Envoyer des invitations de plusieurs réunion à plusieurs personnes

Bonjour,

Je ne connais rien en programmation, j'ai trouvé ce script et je voudrai l'adapter, qui pourrai m'aider ? en page 1 le tableau de départ et en page 2 ce que je désire sur 100 lignes ou plus

ce script insère plusieurs réunions sur le planning à 1 seul personne.

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////// Menu personnalisé pour déclencher la création des événements définis ///////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('📅 Création des événements')
      .addItem('▶️ Exécuter', 'evenements_agenda')
      .addToUi();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////

function evenements_agenda() {

// Identification de l'agenda à éditer  
var spreadsheet = SpreadsheetApp.getActiveSheet();
var calendarId = spreadsheet.getRange("C4").getValue();
var eventCal = CalendarApp.getCalendarById(calendarId);

// Cellules pour intégrer les informations des événements 
  var signups = spreadsheet.getRange("B6:D19").getValues();  

// Boucle pour prendre en compte toutes les lignes du tableau  
  for (x=0; x<signups.length; x++) {
    var shift = signups[x];
    var HeureDebut = shift[0];
    var HeureFin = shift[1];
    var Titre = shift[2];

// Création des événements
eventCal.createEvent(Titre, 
            new Date(HeureDebut),
            new Date(HeureFin),)
   }
}

autre info utile dans la case où je mets mes contacts, j'aurais voulu les insérer depuis mes contacts lorsque je l'insère avec @Nom prénom ou l'email direct si inexistant.

merci

re, j'ai trouvé un code mieux adapté, cependant je dois ajouter les emails manuellement sans pouvoir les récupérer depuis mes contacts (quand je tape @ dans la case et le nom mon contact apparaît).

https://oliviervaudel.wordpress.com/2017/01/16/ajouter-des-evenements-dans-google-agenda-a-partir-du...

après autant le premier script que celui-ci, j'ai une erreur :

image

merci au courageux de me répondre.

Bonjour,

pour que le code fonctionne il faut que l'ID calendar soit renseigné correctement

à cette ligne var cal = CalendarApp.getCalendarById("ID calendar") // mettre ici votre ID que l'on trouve dans les paramètres

20220114 153421 001

ce qui donne après le lancement du script (PS : modifiez bien les dates pour que ça corresponde dans l'agenda)

20220114 153851 001

@ philippou_84

Un fichier xlsx pèse lourd sur le drive le votre 80ko

Un fichier GSheets ne pèse rien

Alors Merci. De mettre des fichiers pour GSheets

Bonjour, sur le drive il est bien en gsheet, c'est à l'enregistrement que mon disque qu'il a modifié en xlsx

Alors ça fonctionne ?

Les infos sont biens transmises à l’agenda ?

Bonjour Gilbert,

J'ai suivi d'assez loin ce post, mais je m'étais posé la question de savoir si c'était pour soi, ou pour envoyer à d'autres personnes.

Personnellement, quand il s'agissait d'autres personnes (et lorsque je travaillais sur excel), j'avais déployé des outils permettant d'envoyer par messagerie des fichiers ics permettant aux participants de l'enregistrer (ou pas) dans leur propre agenda.

S'agissant ne plus ici de google agenda, il est aussi possible d'envoyer le lien du genre

https://www.google.com/calendar/render?patati20%patata

en laissant toujours le loisir aux participants d'accepter ou no (voire peut-être de le faire quand on n'a pas accès aux agendas de tiers).

@Mike

L’idée ici est de remplir un tableau Google Sheets afin d’alimenter son agenda Google.

Il est possible aussi d'automatiser les mises à jour

Bonjour, le fichier que je veux remplir, c'est pour remplir mon planning ET ENVOYER les invitations aux participants.

Gilbert_RGI : oui ça marche en insérant l'ID, mais maintenant il faudrait adapter le tableau pour pouvoir envoyer l'invitation à un nombre de personnes indéterminées, voir exemple de tableau en pj, j'ai mis à la fin (colonne O)une case "concatener" des cases qui suivent avec dans chaque case un email d'un invité.

@Gilbert

Bonjour, le fichier que je veux remplir, c'est pour remplir mon planning ET ENVOYER les invitations aux participants.

donc il ne s'agit plus seulement de son propre agenda ... tu me diras comment on peut faire, cela m'intéresse.

Pour moi on peut toujours envoyer un lien http mais cela n'inscrira pas automatiquement le rendez-vous dans l'agenda

@Micke

Il faut peut être voir le concepteur du script

Olivier Vaudel

message supprimé

ah, je commence à comprendre le schmilblick

https://oliviervaudel.wordpress.com/2017/01/16/ajouter-des-evenements-dans-google-agenda-a-partir-du...

après autant le premier script que celui-ci, j'ai une erreur :

image

merci au courageux de me répondre.

un peu capricieux le code, fonctionne, fonctionne pas, fonctionne, fonctionne pas ... comme les clignotants de voiture

j'ai eu un paquet d'autres erreurs

il y a surtout quelques incohérences

Ajoutera le texte "AJOUTE" dans la colonne Y
puis
Colonne T - Statut de l'importation - colonne AJOUTE A L'AGENDA

je vais tenter de remettre au carré


au passage en O2, tu peux mettre

=textjoin(",";true;R2:AP2)

Bon, alors, le code marche dans son ensemble MAIS

  1. il faut respecter les colonnes
  2. si tu ajoutes des données à droite (participants), alors il faut figer la colonne où sera mis "ajouté" = T ou 20
  3. et corriger le schmilblick sur la colonne "ajouté"

le code est donc le suivant

var EVENT_IMPORTED = "AJOUTE"; // Ajoutera le texte "AJOUTE" dans la colonne T
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
   var menuEntries = [{name: "Ajouter les événements à l'agenda", functionName: "importCalendar"}];
   ss.addMenu("Agenda", menuEntries); // Pour ajouter une menu Agenda et un sous-menu "ajouter les événements" dans la feuille de calcul. Cela permettra de tester manuellement la liaison entre la feuille de calcul et l'agenda
}

function importCalendar() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getDataRange();
    var startrow = 2;     // Première ligne de prise en compte des données
    var startcolumn = 2;  // Première colonne de prise en compte des données, soit la colonne B (titre du rendez-vous)
    var numrows = range.getLastRow();        // Nombre de lignes
    var numcolumns = range.getLastColumn();  // Nombre de colonnes
    var data = sheet.getRange(startrow, startcolumn, numrows-1, numcolumns).getValues();   // Plage contenant des données

  for (var i = 0; i < numrows-1; ++i) { 
    var column = data[i];
    var titre = column[0];                     // Colonne B - Titre de l'événement dans l'agenda - Titre du rendez-vous
    var DateDebut = column[1] + "GMT+0100";    // Colonne C - date et heure de début de l'événement
    var DateFin = column[2] + "GMT+0100";      // Colonne D - date et heure de fin de l'événement
    var EvtJournee = column[3].toUpperCase();  // Colonne E - événement sur la journée
    var Description = column[4];               // Colonne F - description de l'événement
    var Lieux = column[5];                     // Colonne G - lieux de l'événement
    var Private = column[6].toUpperCase();     // Colonne H - statut privé / public de l'événement
    var Rappel1 = column[7].toUpperCase();     // Colonne I - Rappel n°1
    var Rappel1Min = column[8];                // Colonne J - Nombre de minutes avant évènement pour le rappel n°1
    var Rappel1Type = column[9].toUpperCase(); // Colonne K - Type du rappel n°1 (notification ou email)
    var Rappel2 = column[10].toUpperCase();    // Colonne L - Rappel n°2
    var Rappel2Min = column[11];               // Colonne M - Nombre de minutes avant évènement pour le rappel n°2
    var Rappel2Type = column[12].toUpperCase();// Colonne N - Type du rappel n°2 (notification ou email)
    var Participants = column[13];             // Colonne O - adresse(s) mail(s) de(s) participants (séparées par des virgules)
    var EnvoieInvit = column[14].toUpperCase();// Colonne P - envoie des invitations aux participants
    var Ressources = column[15];               // Colonne Q - ajouté au champ description
    var Dispo = column[16];                    // Colonne R - ajouté au champ description
    var couleur = column[17];                  // Colonne S - Couleur de l'événement
    var eventImported = column[18];            // Colonne T - Statut de l'importation - colonne AJOUTE A L'AGENDA

    var Description_complete = Description + "\nRessources : " + Ressources + "\nDisponibilité : " + Dispo  // concatenation des champs destinés à la zone Description de l'agenda

    var calendarID = sheet.getRange(i+startrow,1).getValue(); // Référence de la cellule contenant le nom de l'agenda

    var cal = CalendarApp.getCalendarById(calendarID);

    var AEcrire = (eventImported  != EVENT_IMPORTED) && (titre != "") && (column[1] != "") && (column[2] != "")
    if (AEcrire == true) {  // Evite les doublons dans l'agenda

      switch(couleur){
        case "Bleu pale":
          couleur = "1";
          break;

        case "Vert pale":
          couleur = "2";
          break;

        case "Mauve":
          couleur = "3";
          break;

        case "Rouge pale":
          couleur = "4";
          break;

        case "Jaune":
          couleur = "5";
          break;

        case "Orange":
          couleur = "6";
          break;

        case "Cyan":
          couleur = "7";
          break;

        case "Gris":
          couleur = "8";
          break;

        case "Bleu":
          couleur = "9";
          break;

        case "Vert":
          couleur = "10";
          break;

        case "Rouge":
          couleur = "11";
          break;
      }

    if (EvtJournee == "VRAI"){   //évènement sur la journée
      evt = cal.createAllDayEventSeries(titre, new Date(DateDebut), CalendarApp.newRecurrence().addDailyRule().times(1).until(new Date(DateFin)), {description: Description_complete, location: Lieux, guests: Participants}); // Création de l'événement dans l'agenda
      evt.setColor(couleur);}
    else {
      evt = cal.createEvent(titre, new Date(DateDebut), new Date(DateFin), {description: Description_complete, location: Lieux, guests: Participants}); // Création de l'événement dans l'agenda
      evt.setColor(couleur);
    }

    //visibilité de l'évènement
      switch(Private){
      case "PRIVATE" :
          evt.setVisibility(CalendarApp.Visibility.PRIVATE);
          break;
      case "PUBLIC" :
          evt.setVisibility(CalendarApp.Visibility.PUBLIC);
          break;
      case "CONFIDENTIAL" :
          evt.setVisibility(CalendarApp.Visibility.CONFIDENTIAL);
          break;
      default :
          evt.setVisibility(CalendarApp.Visibility.DEFAULT);
      }

    //Rappels  
    if (Rappel1 == "VRAI"){                  // rappel n°1
      if (Rappel1Type == "NOTIF"){
        evt.addPopupReminder(Rappel1Min);}
      if (Rappel1Type == "EMAIL"){
        evt.addEmailReminder(Rappel1Min);}
      }

     if (Rappel2 == "VRAI"){                 // rappel n°2
      if (Rappel2Type == "NOTIF"){
        evt.addPopupReminder(Rappel2Min);}
      if (Rappel2Type == "EMAIL"){
        evt.addEmailReminder(Rappel2Min);}
      } 

      sheet.getRange(startrow + i, 20).setValue(EVENT_IMPORTED); 

      SpreadsheetApp.flush();  
    }
  }
}

les colonnes sont

Agenda (ID)
Objet
Date et heure de début
Date et heure de fin
Toute la journée
Description
Lieu
Visibilité (Confidential, Private, Public ou Default) - en majuscules
Rappel actif/inactif n°1 (TRUE ou FALSE)
Nb minutes avant rappel n°1 (valeur comprise entre 5 et 40320 (4 semaines))
Type de rappel n°1 (NOTIF ou EMAIL)
Rappel actif/inactif n°2 (TRUE ou FALSE)
Nb minutes avant rappel n°2 (valeur comprise entre 5 et 40320 (4 semaines))
Type de rappel n°2 (NOTIF ou EMAIL)
Participants
Envoie Invitation(s)
Ressources
Disponibilité
Couleur
Ajout à l'agenda
invité 1
invité 2
etc.

et ti peux mettre en O2

=textjoin(",";true;U2:Z2)

enfin, modifie Z en fonction de ta dernière colonne

Pour envoyer un mail en parallèle

modifie le code comme suit (vers la fin = une ligne ajoutée)

      sheet.getRange(startrow + i, 20).setValue(EVENT_IMPORTED); 

      envoyerEmail(Participants,'Invitation réunion','Merci de valider la réunion prévue le '+DateDebut+'.<br>Objet : '+Description+'<br><br>Cordialement')

      SpreadsheetApp.flush();  

et ajoute ce code

function envoyerEmail(email,objet,texte) {
  MailApp.sendEmail({to:email,
  subject: objet, 
  htmlBody: texte})
};

pour plus de renseignement sur le fonctionnement, comme le disais Gilbert, il faudrait voir avec l'auteur.

merci j'ai également mis 20 ici

var eventImported = column[20];            // Colonne T - Statut de l'importation - colonne AJOUTE A L'AGENDA

je vais tester maintenant !

ah ben oui, tu as raison, comme quoi tu maîtrises -et que ce code méritait quelques corrections- !


hé bien NON

subtilités :

  • en array, les indices commencent à 0 et pas 1 comme les sheets
  • de plus l'extraction des données commence à B !!
var startcolumn = 2;  // Première colonne de prise en compte des données, soit la colonne B (titre du rendez-vous)

à vouloir faire un code trop sophistiqué et plein de subtilités on le rend moins maintenable

Merci beaucoup, voici le code qui fonctionne :

var EVENT_IMPORTED = "AJOUTE"; // Ajoutera le texte "AJOUTE" dans la colonne Y
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
   var menuEntries = [{name: "Ajouter les événements à l'agenda", functionName: "importCalendar"}];
   ss.addMenu("Agenda", menuEntries); // Pour ajouter une menu Agenda et un sous-menu "ajouter les événements" dans la feuille de calcul. Cela permettra de tester manuellement la liaison entre la feuille de calcul et l'agenda
}
function envoyerEmail(email,objet,texte) {
  MailApp.sendEmail({to:email,
  subject: objet, 
  htmlBody: texte})
};

function importCalendar() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getDataRange();
    var startrow = 2;     // Première ligne de prise en compte des données
    var startcolumn = 2;  // Première colonne de prise en compte des données, soit la colonne B (titre du rendez-vous)
    var numrows = range.getLastRow();        // Nombre de lignes
    var numcolumns = range.getLastColumn();  // Nombre de colonnes
    var data = sheet.getRange(startrow, startcolumn, numrows-1, numcolumns).getValues();   // Plage contenant des données

  for (var i = 0; i < numrows-1; ++i) { 
    var column = data[i];
    var titre = column[0];                     // Colonne B - Titre de l'événement dans l'agenda - Titre du rendez-vous
    var DateDebut = column[1] + "GMT+0100";    // Colonne C - date et heure de début de l'événement
    var DateFin = column[2] + "GMT+0100";      // Colonne D - date et heure de fin de l'événement
    var EvtJournee = column[3].toUpperCase();  // Colonne E - événement sur la journée
    var Description = column[4];               // Colonne F - description de l'événement
    var Lieux = column[5];                     // Colonne G - lieux de l'événement
    var Private = column[6].toUpperCase();     // Colonne H - statut privé / public de l'événement
    var Rappel1 = column[7].toUpperCase();     // Colonne I - Rappel n°1
    var Rappel1Min = column[8];                // Colonne J - Nombre de minutes avant évènement pour le rappel n°1
    var Rappel1Type = column[9].toUpperCase(); // Colonne K - Type du rappel n°1 (notification ou email)
    var Rappel2 = column[10].toUpperCase();    // Colonne L - Rappel n°2
    var Rappel2Min = column[11];               // Colonne M - Nombre de minutes avant évènement pour le rappel n°2
    var Rappel2Type = column[12].toUpperCase();// Colonne N - Type du rappel n°2 (notification ou email)
    var Participants = column[13];             // Colonne O - adresse(s) mail(s) de(s) participants (séparées par des virgules)
    var EnvoieInvit = column[14].toUpperCase();// Colonne P - envoie des invitations aux participants
    var Ressources = column[15];               // Colonne Q - ajouté au champ description
    var Dispo = column[16];                    // Colonne R - ajouté au champ description
    var couleur = column[17];                  // Colonne S - Couleur de l'événement
    var eventImported = column[18];            // Colonne T - Statut de l'importation - colonne AJOUTE A L'AGENDA

    var Description_complete = Description + "\nRessources : " + Ressources + "\nDisponibilité : " + Dispo  // concatenation des champs destinés à la zone Description de l'agenda

    var calendarID = sheet.getRange(i+startrow,1).getValue(); // Référence de la cellule contenant le nom de l'agenda

    var cal = CalendarApp.getCalendarById(calendarID);

    var AEcrire = (eventImported  != EVENT_IMPORTED) && (titre != "") && (column[1] != "") && (column[2] != "")
    if (AEcrire == true) {  // Evite les doublons dans l'agenda

      switch(couleur){
        case "Bleu pale":
          couleur = "1";
          break;

        case "Vert pale":
          couleur = "2";
          break;

        case "Mauve":
          couleur = "3";
          break;

        case "Rouge pale":
          couleur = "4";
          break;

        case "Jaune":
          couleur = "5";
          break;

        case "Orange":
          couleur = "6";
          break;

        case "Cyan":
          couleur = "7";
          break;

        case "Gris":
          couleur = "8";
          break;

        case "Bleu":
          couleur = "9";
          break;

        case "Vert":
          couleur = "10";
          break;

        case "Rouge":
          couleur = "11";
          break;
      }

    if (EvtJournee == "VRAI"){   //évènement sur la journée
      evt = cal.createAllDayEventSeries(titre, new Date(DateDebut), CalendarApp.newRecurrence().addDailyRule().times(1).until(new Date(DateFin)), {description: Description_complete, location: Lieux, guests: Participants}); // Création de l'événement dans l'agenda
      evt.setColor(couleur);}
    else {
      evt = cal.createEvent(titre, new Date(DateDebut), new Date(DateFin), {description: Description_complete, location: Lieux, guests: Participants}); // Création de l'événement dans l'agenda
      evt.setColor(couleur);}

    //visibilité de l'évènement
      switch(Private){
      case "PRIVATE" :
          evt.setVisibility(CalendarApp.Visibility.PRIVATE);
          break;
      case "PUBLIC" :
          evt.setVisibility(CalendarApp.Visibility.PUBLIC);
          break;
      case "CONFIDENTIAL" :
          evt.setVisibility(CalendarApp.Visibility.CONFIDENTIAL);
          break;
      default :
          evt.setVisibility(CalendarApp.Visibility.DEFAULT);
      }

    //Rappels  
    if (Rappel1 == "VRAI"){                  // rappel n°1
      if (Rappel1Type == "NOTIF"){
        evt.addPopupReminder(Rappel1Min);}
      if (Rappel1Type == "EMAIL"){
        evt.addEmailReminder(Rappel1Min);}
      }

     if (Rappel2 == "VRAI"){                 // rappel n°2
      if (Rappel2Type == "NOTIF"){
        evt.addPopupReminder(Rappel2Min);}
      if (Rappel2Type == "EMAIL"){
        evt.addEmailReminder(Rappel2Min);}
      } 

      sheet.getRange(startrow + i, 20).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données
      envoyerEmail(Participants,'Invitation réunion','Merci de valider sur votre agenda google la réunion prévue le '+DateDebut+'.<br>Objet : '+Description+'<br><br>Cordialement')     //Envoi emails
      SpreadsheetApp.flush();  
    }
  }
}

//colonne :
// 1 genda (ID)
//Objet
//Date et heure de début
//Date et heure de fin
//Toute la journée
//Description
//Lieu
//Visibilité (Confidential, Private, Public ou Default) - en majuscules
//Rappel actif/inactif n°1 (TRUE ou FALSE)
//Nb minutes avant rappel n°1 (valeur comprise entre 5 et 40320 (4 semaines))
//Type de rappel n°1 (NOTIF ou EMAIL)
//Rappel actif/inactif n°2 (TRUE ou FALSE)
//Nb minutes avant rappel n°2 (valeur comprise entre 5 et 40320 (4 semaines))
//Type de rappel n°2 (NOTIF ou EMAIL)
//Participants
//Envoie Invitation(s)
//Ressources
//Disponibilité
//Couleur
//Ajout à l'agenda
//invité 1
//invité 2
//etc.
Rechercher des sujets similaires à "envoyer invitations reunion personnes"