Automatiser la création d’événements Google Agenda avec Google Sheets et Apps Script

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éeColonne
Titre Partie 1A
Titre Partie 2B
DateC
Email participantD
Case à cocherE

💻 Code du script

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 !