Automatiser la création d’événements Google Agenda avec Google Sheets et Apps Script
L’atelier informatique
·
Gérer des événements manuellement dans Google Agenda peut être fastidieux. Avec Google Apps Script, nous pouvons automatiser cette tâche pour créer un événement dans Google Agenda à partir d’une feuille Google Sheets dès qu’une case est cochée.
Fonctionnement du script
1. Détection de la modification
Lorsque l’utilisateur coche une case dans une colonne spécifique, le script est déclenché.
Il vérifie si la modification concerne la bonne feuille et la bonne colonne.
2. Récupération des informations
Le script extrait les données de la ligne concernée :
Titre de l’événement (composé de colonnes A et B)
Date de l’événement (colonne C)
Email du participant (colonne D)
3. Conversion de la date
Les dates saisies sous forme de texte (“dd Mmm yyyy”) sont converties en format utilisable.
4. Création de l’événement
L’événement est automatiquement ajouté à Google Agenda.
Si un email est renseigné, le participant est ajouté.
5. Décochage automatique de la case
Une fois l’événement créé, la case est décochée pour éviter un double déclenchement.
Configuration
Donnée
Colonne
Titre Partie 1
A
Titre Partie 2
B
Date
C
Email participant
D
Case à cocher
E
Code du script
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
functiononEdit(e){
try{
if(!e){
console.log("Aucune modification détectée. Arrêt du script.");
return;
}
// Configuration des colonnes et de la feuille
const CONFIG = {
nomFeuille: "Ventes 2025",
colonneTitre1: 1, // A
colonneTitre2: 2, // B
colonneDate: 3, // C
colonneEmail: 4, // D
colonneCaseCochee: 5// E
};
// Récupération des détails de la modification
const feuille = e.source.getActiveSheet();
const plage = e.range;
const ligne = plage.getRow();
const colonne = plage.getColumn();
// Vérification que la modification concerne bien la bonne feuille et colonne
if(
feuille.getName() !== CONFIG.nomFeuille ||
colonne !== CONFIG.colonneCaseCochee ||
e.value !== "TRUE"
){
return;
}
console.log(`Modification détectée en ligne ${ligne}, colonne ${colonne}. Traitement en cours...`);
// Décocher la case pour éviter un re-déclenchement
plage.setValue(false);
console.log(`Événement créé : ${evenement.getTitle()} le ${dateEvenement.toDateString()}`);
}catch(erreur){
console.error(`Erreur lors de la création de l'événement : ${erreur.message}`);
}
}catch(erreur){
console.error(`Erreur critique dans le script : ${erreur.message}`);
}
}
function onEdit(e) {
try {
if (!e) {
console.log("Aucune modification détectée. Arrêt du script.");
return;
}
// Configuration des colonnes et de la feuille
const CONFIG = {
nomFeuille: "Ventes 2025",
colonneTitre1: 1, // A
colonneTitre2: 2, // B
colonneDate: 3, // C
colonneEmail: 4, // D
colonneCaseCochee: 5 // E
};
// Récupération des détails de la modification
const feuille = e.source.getActiveSheet();
const plage = e.range;
const ligne = plage.getRow();
const colonne = plage.getColumn();
// Vérification que la modification concerne bien la bonne feuille et colonne
if (
feuille.getName() !== CONFIG.nomFeuille ||
colonne !== CONFIG.colonneCaseCochee ||
e.value !== "TRUE"
) {
return;
}
console.log(`Modification détectée en ligne ${ligne}, colonne ${colonne}. Traitement en cours...`);
// Récupération des données de la ligne modifiée
const ligneDonnees = feuille.getRange(ligne, 1, 1, feuille.getLastColumn()).getValues()[0];
// Vérification et création du titre
const titre1 = ligneDonnees[CONFIG.colonneTitre1 - 1]?.toString().trim() || "";
const titre2 = ligneDonnees[CONFIG.colonneTitre2 - 1]?.toString().trim() || "";
const titre = `${titre1} - ${titre2}`.trim();
if (!titre1 && !titre2) {
console.error("Erreur : Titre de l'événement vide. L'événement ne peut pas être créé.");
return;
}
// Vérification de l'email du participant
const emailParticipant = ligneDonnees[CONFIG.colonneEmail - 1]?.toString().trim();
if (emailParticipant && !emailParticipant.includes("@")) {
console.error(`Erreur : Email du participant invalide (${emailParticipant}).`);
return;
}
// Vérification et conversion de la date
const dateTexte = ligneDonnees[CONFIG.colonneDate - 1]?.toString().trim();
if (!dateTexte) {
console.error("Erreur : Date de l'événement manquante.");
return;
}
const convertirDate = (dateTexte) => {
try {
const [jour, moisAbrege, annee] = dateTexte.split(" ");
const mois = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
const indexMois = mois.indexOf(moisAbrege);
if (indexMois === -1 || isNaN(jour) || isNaN(annee)) throw new Error("Format de date incorrect");
return new Date(annee, indexMois, jour);
} catch (erreur) {
console.error(`Erreur lors de la conversion de la date : ${dateTexte}`);
return null;
}
};
const dateEvenement = convertirDate(dateTexte);
if (!dateEvenement || isNaN(dateEvenement.getTime())) {
console.error("Erreur : Date de l'événement invalide.");
return;
}
// Création de l’événement dans Google Agenda
try {
const calendrier = CalendarApp.getDefaultCalendar;
if (!calendrier) {
console.error("Erreur : Impossible d’accéder au calendrier.");
return;
}
const evenement = calendrier.createAllDayEvent(titre, dateEvenement);
// Ajout du participant si email valide
if (emailParticipant) {
evenement.addGuest(emailParticipant);
console.log(`Participant ajouté : ${emailParticipant}`);
}
// Décocher la case pour éviter un re-déclenchement
plage.setValue(false);
console.log(`Événement créé : ${evenement.getTitle()} le ${dateEvenement.toDateString()}`);
} catch (erreur) {
console.error(`Erreur lors de la création de l'événement : ${erreur.message}`);
}
} catch (erreur) {
console.error(`Erreur critique dans le script : ${erreur.message}`);
}
}
function onEdit(e) {
try {
if (!e) {
console.log("Aucune modification détectée. Arrêt du script.");
return;
}
// Configuration des colonnes et de la feuille
const CONFIG = {
nomFeuille: "Ventes 2025",
colonneTitre1: 1, // A
colonneTitre2: 2, // B
colonneDate: 3, // C
colonneEmail: 4, // D
colonneCaseCochee: 5 // E
};
// Récupération des détails de la modification
const feuille = e.source.getActiveSheet();
const plage = e.range;
const ligne = plage.getRow();
const colonne = plage.getColumn();
// Vérification que la modification concerne bien la bonne feuille et colonne
if (
feuille.getName() !== CONFIG.nomFeuille ||
colonne !== CONFIG.colonneCaseCochee ||
e.value !== "TRUE"
) {
return;
}
console.log(`Modification détectée en ligne ${ligne}, colonne ${colonne}. Traitement en cours...`);
// Récupération des données de la ligne modifiée
const ligneDonnees = feuille.getRange(ligne, 1, 1, feuille.getLastColumn()).getValues()[0];
// Vérification et création du titre
const titre1 = ligneDonnees[CONFIG.colonneTitre1 - 1]?.toString().trim() || "";
const titre2 = ligneDonnees[CONFIG.colonneTitre2 - 1]?.toString().trim() || "";
const titre = `${titre1} - ${titre2}`.trim();
if (!titre1 && !titre2) {
console.error("Erreur : Titre de l'événement vide. L'événement ne peut pas être créé.");
return;
}
// Vérification de l'email du participant
const emailParticipant = ligneDonnees[CONFIG.colonneEmail - 1]?.toString().trim();
if (emailParticipant && !emailParticipant.includes("@")) {
console.error(`Erreur : Email du participant invalide (${emailParticipant}).`);
return;
}
// Vérification et conversion de la date
const dateTexte = ligneDonnees[CONFIG.colonneDate - 1]?.toString().trim();
if (!dateTexte) {
console.error("Erreur : Date de l'événement manquante.");
return;
}
const convertirDate = (dateTexte) => {
try {
const [jour, moisAbrege, annee] = dateTexte.split(" ");
const mois = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
const indexMois = mois.indexOf(moisAbrege);
if (indexMois === -1 || isNaN(jour) || isNaN(annee)) throw new Error("Format de date incorrect");
return new Date(annee, indexMois, jour);
} catch (erreur) {
console.error(`Erreur lors de la conversion de la date : ${dateTexte}`);
return null;
}
};
const dateEvenement = convertirDate(dateTexte);
if (!dateEvenement || isNaN(dateEvenement.getTime())) {
console.error("Erreur : Date de l'événement invalide.");
return;
}
// Création de l’événement dans Google Agenda
try {
const calendrier = CalendarApp.getDefaultCalendar;
if (!calendrier) {
console.error("Erreur : Impossible d’accéder au calendrier.");
return;
}
const evenement = calendrier.createAllDayEvent(titre, dateEvenement);
// Ajout du participant si email valide
if (emailParticipant) {
evenement.addGuest(emailParticipant);
console.log(`Participant ajouté : ${emailParticipant}`);
}
// Décocher la case pour éviter un re-déclenchement
plage.setValue(false);
console.log(`Événement créé : ${evenement.getTitle()} le ${dateEvenement.toDateString()}`);
} catch (erreur) {
console.error(`Erreur lors de la création de l'événement : ${erreur.message}`);
}
} catch (erreur) {
console.error(`Erreur critique dans le script : ${erreur.message}`);
}
}
Avantages du script
Gain de temps : Plus besoin de créer les événements manuellement
Automatisation simple et efficace
Réduction des erreurs grâce à l’extraction automatique des données
Idéal pour les équipes commerciales, RH, ou logistiques
Avec Google Apps Script, il est possible de simplifier la gestion des événements en automatisant la création d’événements sur Google Agenda. Ce script permet aux utilisateurs de cocher une case dans Google Sheets pour planifier instantanément un événement, sans effort supplémentaire.
Si cet article vous a été utile, n’hésitez pas à le partager et à commenter !
Vous aimez mes articles sur Google Workspace ? Offrez-moi un café virtuel via un pourboire PayPal !