Comment synchroniser automatiquement vos événements depuis une feuille Google Sheets vers votre calendrier Google ?
Gérer ses événements professionnels ou personnels peut rapidement devenir une tâche chronophage lorsque l’on manipule différentes sources de données. Si vous utilisez Google Sheets pour lister vos événements (réunions, rappels, échéances importantes), vous pouvez automatiser leur création dans votre calendrier Google. Dans cet article, nous allons voir comment mettre en place une fonction personnalisée dans Google Apps Script pour synchroniser vos événements depuis une feuille de calcul directement vers un calendrier Google, avec des notifications prévues une semaine avant, la veille, et le jour même de chaque événement.
Pourquoi synchroniser ses événements depuis Google Sheets ?
- Centralisation des données : Vous pouvez tenir à jour toutes vos informations dans Google Sheets, qui sert souvent de tableau de bord partagé avec votre équipe.
- Automatisation des rappels : Plutôt que de saisir manuellement chaque événement dans votre calendrier, laissez un script faire le travail à votre place.
- Gain de temps : En évitant la duplication manuelle de l’information, vous pouvez consacrer plus de temps à l’analyse, à la planification et à la prise de décision.
- Flexibilité : La solution est entièrement personnalisable : vous pouvez ajuster les intervalles (une semaine avant, la veille), changer le calendrier cible ou les intitulés des notifications.
Préparer votre feuille Google Sheets
1. Créer ou utiliser une feuille dédiée :
Créez une nouvelle feuille (un onglet) dans votre classeur Google Sheets, par exemple nommez-la « Événements ».
2. Colonnes nécessaires :
Sur la première ligne, créez des en-têtes :
- Colonne A : « Événement »
- Colonne B : « Date » (sous un format reconnu comme une date par Google Sheets, par exemple 15/12/2024)
3. Saisie des données :
À partir de la ligne 2, entrez vos événements et leurs dates.
Par exemple :
Le code Apps Script
Google Apps Script est un environnement de scripting intégré à Google Workspace. Il permet d’interagir avec les différents services (Agenda, Sheets, etc.).
Étapes pour ajouter le code :
1. Ouvrez votre feuille Google Sheets.
2. Cliquez sur Extensions > Apps Script pour ouvrir l’éditeur de script.
3. Copiez-collez le code ci-dessous dans l’éditeur, en remplaçant le contenu existant.
//@OnlyCurrentDoc // Paramètres ajustables const NB_JOURS_AVANT = 7; const NB_JOURS_VEILLE = 1; // Préfixes des événements const PREFIX_A_VENIR = "[À venir]"; const PREFIX_DEMAIN = "[Demain]"; const PREFIX_AUJOURDHUI = "[Aujourd'hui]"; // Optionnel : Utilisez un calendrier spécifique ou laissez vide pour le calendrier par défaut const CALENDRIER_ID = ''; // Ex. 'votre_id_de_calendrier@group.calendar.google.com' function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('Calendrier') .addItem('Mettre à jour les événements', 'FEUILLES_VERS_CALENDRIER') .addToUi(); } /** * Fonction pour créer automatiquement des évènements dans un calendrier Google * à partir des données contenues dans une feuille Google Sheets. * La feuille doit contenir une ligne d'en-tête (Événement, Date) * et chaque ligne suivante un événement et sa date. * * Trois événements seront créés pour chacun : * - Une semaine avant l'événement ("[À venir]") * - La veille de l'événement ("[Demain]") * - Le jour de l'événement ("[Aujourd'hui]") */ function FEUILLES_VERS_CALENDRIER() { const feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const donnees = feuille.getDataRange().getValues(); let calendrier; if (CALENDRIER_ID) { calendrier = CalendarApp.getCalendarById(CALENDRIER_ID); if (!calendrier) { Logger.log("Impossible de trouver le calendrier avec l'ID : " + CALENDRIER_ID); return; } } else { calendrier = CalendarApp.getDefaultCalendar(); } // Parcours des lignes en ignorant la première (entête) for (let i = 1; i < donnees.length; i++) { if (donnees[i].length < 2) { Logger.log("Ligne " + (i+1) + ": Données insuffisantes."); continue; } const nomEvenement = donnees[i][0]; // Nom de l'événement const dateEvenement = new Date(donnees[i][1]); // Date de l'événement // Vérification de la validité des données if (!nomEvenement) { Logger.log("Ligne " + (i+1) + ": Le nom de l'événement est vide."); continue; } if (isNaN(dateEvenement.getTime())) { Logger.log("Ligne " + (i+1) + ": La date n'est pas valide."); continue; } // Dates calculées const uneSemaineAvant = ajouterJours(dateEvenement, -NB_JOURS_AVANT); const veille = ajouterJours(dateEvenement, -NB_JOURS_VEILLE); // Création des événements creerEvenement(calendrier, PREFIX_A_VENIR + " " + nomEvenement, uneSemaineAvant); creerEvenement(calendrier, PREFIX_DEMAIN + " " + nomEvenement, veille); creerEvenement(calendrier, PREFIX_AUJOURDHUI + " " + nomEvenement, dateEvenement); } } /** * Ajoute un nombre de jours à une date. * @param {Date} date - La date de base * @param {number} jours - Nombre de jours à ajouter (négatif pour soustraire) * @return {Date} Nouvelle date */ function ajouterJours(date, jours) { const nouvelleDate = new Date(date); nouvelleDate.setDate(nouvelleDate.getDate() + jours); return nouvelleDate; } /** * Crée un événement sur une journée entière dans le calendrier. * Si un événement du même nom existe déjà ce jour-là, il est supprimé avant. * * @param {Calendar} calendrier - Le calendrier cible * @param {string} titre - Le titre de l'événement * @param {Date} date - La date de l'événement */ function creerEvenement(calendrier, titre, date) { supprimerEvenementExistant(calendrier, titre, date); const evenement = calendrier.createAllDayEvent(titre, date); evenement.setColor(CalendarApp.EventColor.PALE_BLUE); evenement.addEmailReminder(0); // Rappel par e-mail à minuit } /** * Supprime un événement existant portant le même nom et se déroulant le même jour. * * @param {Calendar} calendrier - Le calendrier cible * @param {string} titre - Le titre de l'événement à supprimer * @param {Date} date - La date de l'événement à supprimer */ function supprimerEvenementExistant(calendrier, titre, date) { const evenements = calendrier.getEventsForDay(date); for (let j = 0; j < evenements.length; j++) { if (evenements[j].getTitle() === titre) { evenements[j].deleteEvent(); } } }
4. Enregistrez le script (icône de disquette).
5. Lors de la première exécution de la fonction, vous devrez accorder les autorisations requises (accès à votre calendrier et votre feuille).
Comment lancer la fonction ?
Vous avez plusieurs options :
- Manuellement depuis l’éditeur de script : Dans l’éditeur, sélectionnez FEUILLES_VERS_CALENDRIER() dans le menu déroulant, puis cliquez sur « Exécuter ».
- Depuis un menu personnalisé dans Google Sheets : Ajoutez une fonction onOpen() pour créer un menu personnalisé dans votre feuille.
- Déclencheur temporel (time-driven trigger) : Configurez un déclencheur pour exécuter la fonction automatiquement chaque jour, chaque semaine ou chaque heure. Pour cela, allez dans l’éditeur Apps Script, cliquez sur l’icône en forme de réveil (« Triggers »), puis ajoutez un déclencheur.
Améliorations possibles
- Définir un autre calendrier : Ajoutez l’ID d’un autre calendrier dans CALENDRIER_ID pour ne pas utiliser votre calendrier par défaut.
- Modifier les intervalles (7 jours, 1 jour) : Ajustez les constantes NB_JOURS_AVANT et NB_JOURS_VEILLE pour modifier quand les rappels sont créés.
- Adapter les préfixes (« À venir », « Demain », « Aujourd’hui ») : Modifiez les constantes PREFIX_A_VENIR, PREFIX_DEMAIN et PREFIX_AUJOURDHUI à votre convenance.
- Journalisation avancée : Utilisez Logger.log() ou la console pour comprendre le comportement du script (par exemple, si certaines lignes ne peuvent être traitées).
En quelques minutes, vous avez mis en place un système qui relie votre feuille de calcul Google Sheets à votre calendrier Google. Vous pouvez ainsi gérer toutes vos informations au même endroit et automatiser la création d’événements. Cette approche est particulièrement utile pour une équipe qui travaille à partir d’un document commun et qui souhaite s’assurer que toutes les échéances, réunions et rendez-vous importants apparaissent automatiquement dans le calendrier.
N’hésitez pas à personnaliser ce script selon vos besoins, en modifiant les intervalles de rappel, les préfixes, ou en ajoutant d’autres fonctionnalités. L’objectif est de gagner du temps, de réduire les erreurs manuelles et d’améliorer votre organisation au quotidien.