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
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
ce qui donne après le lancement du script (PS : modifiez bien les dates pour que ça corresponde dans l'agenda)
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
message supprimé
ah, je commence à comprendre le schmilblick
après autant le premier script que celui-ci, j'ai une erreur :
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
- il faut respecter les colonnes
- si tu ajoutes des données à droite (participants), alors il faut figer la colonne où sera mis "ajouté" = T ou 20
- 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.