Automatiser la gestion des jours fériés dans Google Sheets avec Google Apps Script

Chaque entreprise doit tenir compte des jours fériés pour planifier efficacement ses activités, ses ressources humaines et ses projets. Dans Google Sheets, jusqu’à présent nous devions saisir manuellement les jours fériés.

Grâce à Google Apps Script et à l’API du gouvernement français, il est désormais possible de récupérer automatiquement les jours fériés et de les intégrer directement dans Google Sheets. L’API permet de récupérer les jours fériés jusqu’à 20 ans dans le passé et 5 ans dans le futur par rapport à l’année courante.

Cet article vous guide à travers les étapes pour mettre en place cette automatisation.

Prérequis

  • Un compte Google avec accès à Google Sheets.
  • Une connaissance de base de Google Apps Script.

Étapes pour la mise en œuvre

  1. Ouverture de l’éditeur de script
  • Ouvrez Google Sheets.
  • Sélectionnez Extensions > Apps Script pour ouvrir l’éditeur de script.
  1. Création du Script
  • Supprimez tout le code existant.
  • Copiez et collez le script fourni ci-dessous dans l’éditeur.
/**
* Script pour récupérer et afficher les jours fériés en France pour la zone métropolitaine.
* Utilise l'API https://calendrier.api.gouv.fr/jours-feries/ pour obtenir les données.
* Développé par Fabrice Faucheux de l'Atelier Informatique.
* Ce script crée un onglet "Jours fériés" dans le classeur Google Sheets, où il liste les jours fériés,
* avec leur nom et leur date, triés chronologiquement et formatés en dd/MM/yyyy.
*/

function obtenirJoursFeriesEtMettreAJourFeuille() {
const zone = 'metropole'; // Vous pouvez changer cette valeur pour d'autres zones
const url = `https://calendrier.api.gouv.fr/jours-feries/${zone}.json`;

const reponse = UrlFetchApp.fetch(url);
const joursFeries = JSON.parse(reponse.getContentText());

const ss = SpreadsheetApp.getActiveSpreadsheet();
let feuilleJoursFeries = ss.getSheetByName("Jours fériés");
if (!feuilleJoursFeries) {
feuilleJoursFeries = ss.insertSheet("Jours fériés");
} else {
feuilleJoursFeries.clear(); // Nettoyer la feuille si elle existe déjà
}

feuilleJoursFeries.setFrozenRows(1); // Figer la première ligne

const entetes = [["Nom du Jour Férié", "Date"]];

const donneesJoursFeries = Object.keys(joursFeries).map(date => {
return {
nom: joursFeries[date],
date: new Date(date)
};
});

// Trier les jours fériés par date en ordre décroissant
donneesJoursFeries.sort((a, b) => b.date - a.date);

// Formatage des dates pour l'affichage
const formattedData = donneesJoursFeries.map(item => [item.nom, Utilities.formatDate(item.date, "GMT+1", "dd/MM/yyyy")]);

// Écrire les en-têtes et les données dans la feuille
const rangeEntetes = feuilleJoursFeries.getRange(1, 1, 1, 2);
rangeEntetes.setValues(entetes);
rangeEntetes.setFontWeight("bold"); // Mettre en gras les en-têtes

const rangeDonnees = feuilleJoursFeries.getRange(2, 1, formattedData.length, 2);
rangeDonnees.setValues(formattedData);

// Appliquer la mise en forme
feuilleJoursFeries.getRange("A:A").setHorizontalAlignment("left"); // Aligner à gauche les noms des jours fériés
feuilleJoursFeries.getRange("B2:B").setNumberFormat("dd/MM/yyyy"); // Format de date pour les données
}

  1. Exécution du script
  • Après avoir inséré le script, cliquez sur le bouton Exécuter.
  • Autorisez les autorisations requises pour permettre au script d’accéder à votre Google Sheets.
  1. Vérification des résultats
  • Revenez à votre feuille de calcul Google Sheets.
  • Vous devriez voir un nouvel onglet intitulé « Jours fériés » rempli avec les jours fériés de l’année en cours pour la zone spécifiée.


Vous pouvez modifier la variable zone dans le script pour adapter la liste des jours fériés à d’autres régions fournies par l’API, telles que « alsace-moselle » ou « guadeloupe ». Voir https://www.data.gouv.fr/fr/datasets/5b3cc551c751df4822526c1c/

Avantages de cette intégration

  • Automatisation : Réduit le besoin de saisie manuelle et d’erreur humaine.
  • Mise à jour en temps réel : Les jours fériés sont récupérés directement depuis une source officielle et à jour.
  • Personnalisation : Facile à adapter pour différentes régions et besoins.

Création d’une fonction pour déterminer si une date est un jour férié

Grâce à cette API, il est également possible de créer une fonction à appeler dans Google Sheets qui détermine si une date passée en paramètre est ou non un jour férié.

/**
* Vérifie si une date donnée est un jour férié en France pour la zone spécifiée.
* Cette fonction peut être utilisée directement dans Google Sheets.
*
* @param {string} dateEntree - La date à vérifier, au format "yyyy-MM-dd" ou tout format valide pour JavaScript Date.
* @customfunction
*/
function estJourFerie(dateEntree) {
const zone = 'metropole'; // Zone configurée pour la métropole, modifiable selon les besoins
const url = `https://calendrier.api.gouv.fr/jours-feries/${zone}.json`;

const reponse = UrlFetchApp.fetch(url);
const joursFeries = JSON.parse(reponse.getContentText());

// Formatage de la date d'entrée au format yyyy-MM-dd pour la comparaison
const dateFormatee = Utilities.formatDate(new Date(dateEntree), "GMT+1", "yyyy-MM-dd");

// Vérifier si la date formatée est un jour férié
return !!joursFeries[dateFormatee];
}

Intégrer automatiquement les jours fériés dans Google Sheets améliore la précision de la planification et la gestion des ressources. Avec Google Apps Script et l’API du gouvernement français, cette intégration est non seulement simple mais également robuste, garantissant que votre entreprise reste informée des jours non ouvrables tout au long de l’année.

Pour exemple, ce code a permis de récupérer automatiquement les jours fériés pour la gestion d’un diagramme de GANTT.

Laisser un commentaire