Ajout sur Google Agenda depuis Sheets depuis un script déjà existant

Bonjour tout le monde,

Etant totalement novice dans le domaine des scripts, je m'y essaye tant bien que mal pour automatiser mon tableau et en faire un véritable outils pour ma société.

Jusqu'à maintenant, j'ai mis en place un Google Form dans lequel nous sommes en capacités de remplir nos périodes d'absences, j'ai un script qui lorsque une case est cochée envoie automatiquement un mail de confirmation à la personne concernée. Tout fonctionne très bien.

Cependant, j'ai cherché un script permettant l'ajout en même temps sur un Google agenda de la période d'absence de la personne afin que nous soyons tous informés de sa présence au bureau en temps réel ou non et que nous ne soyons pas tous à se demander "Bidule travaille aujourd'hui ? En TT ?"

Bref ! Des scripts j'en ai vu plein mais encore une fois, étant totalement novice, je ne trouve pas un moyen d'associer les 2 scripts ensemble...
D'ailleurs les scripts sont à chaque fois peu conséquents, ça ne semble pourtant pas si compliqué mais je ne comprends pas tout :p

La première question serait donc : Est-ce qu'il est possible d'avoir plusieurs scripts sur un même fichier ?
Si oui, la seconde question serait : Comment faire pour que mon script actuel, lorsque je valide une demande en validant (via les cases à cocher) les demandes des gens, continue non seulement de leur envoyer un mail avec une réponse à leur demande mais également, ajoute automatiquement dans l'agenda google dédié les lignes que je viens de valider ?

Merci à vous,

Bonjour,

C'est en effet réalisable, afin de garder en lisibilité, le mieux est de séparer les script en réutilisant certaines données.

Voici un exemple simplifier pour illustrer mon propos :

function addition () {
  let num1 = 10;
  let num2 = 20;
  let resultat = num1+num2;
  additionMoins10(resultat)
}

function additionMoins10 (nombreASoustraire) {
  let soustraction = aSoustraire-10;
}

Dans ce cas, une première fonction fait opère sur des données et en envoie dans une seconde fonction afin que celle ci travaille dessus.

La seconde fonction nécessite une donnée pour travailler dessus.

Dans ta situation, ta fonction actuelle doit stocker dans une variable les jours d'absences et bien envoie les dans une nouvelle fonction ajoutAgenda par exemple :

function jourAbsence () {
...
...
let jourAbsent = ... ;
...
...
ajoutAgenda(jourAbsent)
}

function ajoutAgenda(absence) {
cette fonction ajoute les jours à l'agenda
}

Merci beaucoup pour la réponse, mon script actuel est comme ceci :

function onEditDeclencheur(e) {
  Logger.log(e.value) //Enregistrer la valeur de e.value dans la log

  if(e.value=="TRUE"){
    // Declaration des variables
    var ui = SpreadsheetApp.getUi()
    var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var fuseauHoraire = Session.getScriptTimeZone();

    // Alerte utilisateur
    var resultat = ui.alert('[XXXXX]','Envoyer un courriel ?',ui.ButtonSet.YES_NO)
    var scp = feuille.getRange("C"+e.range.getRow()).getValues(); // Récupération de l'identité
    var cptt = feuille.getRange("D6").getValue(); // Récupération du type de demande
    var cprep = feuille.getRange("G"+e.range.getRow()).getValues(); // Récupération de la réponse
    var debut = feuille.getRange("D"+e.range.getRow()).getDisplayValues(); // Début de période
    var fin = feuille.getRange("E"+e.range.getRow()).getDisplayValues(); // Fin de période

    // Si l'utilisateur approuve
    if(resultat==ui.Button.YES){
      var email = feuille.getRange("J"+e.range.getRow()).getValues(); // Récupération de  l'e-mail de la colonne Q de la ligne éditée

      Logger.log("Emailing "+email[0]) // Enregistrer le courriel dans la log
      feuille.getRange("K"+e.range.getRow()).setValue(Utilities.formatDate(new Date(), fuseauHoraire, "dd/MM/yyyy")); //Inscription dans la colonne F que la dernière date d'envoi du mail 

      // Envoyer le courriel
      MailApp.sendEmail({
        to: email.toString(),
        subject: "Réponse à votre demande de "+ cptt +"", // Objet ici
        name: "XXXX", // Votre nom ici
        body: "Bonjour "+ scp +", ta demande de "+ cptt +" a été "+ cprep +" pour la période du : "+ debut +" au "+ fin +".", // Corps du courriel ici
      })
      Logger.log("Envoyé") //
    }
    Logger.log("Mot déclencheur "+e.value+" compléter") //
  }
}

A quel endroit et quel code utiliser pour s'y prendre du coup ?

Je devrais le mettre à la suite de l'ensemble de "MailApp" et entre les "})" et le "Logger.log("Envoyé") //" ?

Quelque chose comme ça ?

      // Envoyer le courriel
      MailApp.sendEmail({
        to: email.toString(),
        subject: "Réponse à votre demande de "+ cptt +"", // Objet ici
        name: "Groupe MIYU", // Votre nom ici
        body: "Bonjour "+ scp +", ta demande de "+ cptt +" a été "+ cprep +" pour la période du : "+ debut +" au "+ fin +".", // Corps du courriel ici
      })

      function ajoutagenda

      var debut = feuille.getRange("D"+e.range.getRow()).getDisplayValues(); // Début de période
      var fin = feuille.getRange("E"+e.range.getRow()).getDisplayValues(); // Fin de période

      CalendarApp.getCalendarById('Id agenda').createEvent(ajoutagenda){
      }
      Logger.log("Envoyé") //
    var cptt = feuille.getRange("D6").getValue(); // Récupération du type de demande

Ici c'est le type d'absence ? (rtt, cp, tt, etc... )

    var debut = feuille.getRange("D"+e.range.getRow()).getDisplayValues(); // Début de période
    var fin = feuille.getRange("E"+e.range.getRow()).getDisplayValues(); // Fin de période

Ces variables contiennent les dates d'absence ? sous quel format ? "dd/MM/yyyy" ?

var cptt c'est pour alimenter le mail.

C'est la cellule du tableau contenant l'information du tableau de suivi, j'ai deux onglets, l'un étant dédié aux demandes des CP, l'autre de TT et donc en D6 il y est écrit sur l'un Congés payés et l'autre Télétravail. Ce qui permet de renvoyer dans l'objet et le corps du mail un message selon la réponse : Votre demande de xxx, xxx étant donc remplacé par la variable de la feuille active, si je suis sur la feuille des CP, ça formule "Votre demande de congés payés", sur l'onglet de TT, "Votre demande de Télétravail".

Pour l'agenda, ça pourrait servir également en combinant dans le titre de l'évènement : XXX est en Congés payés/Télétravail cela dit

var debut et fin ce sont bien les dates d'absences : le format est ainsi (les heures et minutes je me suis dit que ça servirait pour définir également les demi-journées, cependant, je me dis qu'il faudrait que j'ajoute une colonne pour alimenter l'agenda pour faire en sorte que ça applique "Toute la journée" quand c'est le cas plutôt que de remplir les colonnes de l'agenda de 9h à 18h et avoir des gros pavés pour tout le monde

format date

Donc cptt est bien égal au motif d'absence, ça c'est OK

debut et fin sont bien au format date, après qu'importe le niveau de précision utilisé, le format reconnu est au format date c'est ce qui compte

À la fin du script, quand le mail est envoyé, il faudrait lancer un second script qui ajoute les plages aux planning :

ajoutAgenda(cptt,debut,fin)

et voici comment débuter la nouvelle fonction :

function ajoutAgenda(typeAbs,dateDebut,dateFin) {
...

Merci beaucoup pour vos réponses !

J'ai essayé quelques petits choses mais ça ne fonctionne pas du tout, je n'arrive pas à concevoir le script de A à Z, ni même exploité un script déjà existant pour l'adapter...

Auriez vous la possibilité de me montrer tout le script à ajouter s'il vous plaît ?

      // Envoyer le courriel
      MailApp.sendEmail({
        to: email.toString(),
        subject: "Réponse à votre demande de "+ cptt +"", // Objet ici
        name: "XXXX", // Votre nom ici
        body: "Bonjour "+ scp +", ta demande de "+ cptt +" a été "+ cprep +" pour la période du : "+ debut +" au "+ fin +".", // Corps du courriel ici
      })

  function ajout_agenda(){

     // Reconnaissance de l'agenda
     var idagenda = CalendarApp.getCalendarById('xxxxxx@group.calendar.google.com')

    // Création évènements
     idagenda.createEvent(cptt,
                 new Date(debut),
                 new Date(fin),)
  }
      Logger.log("Envoyé") //
    }
    Logger.log("Mot déclencheur "+e.value+" compléter") //
  }
}

Re-bonsoir, nous sommes à la veille de lundi et je bloque toujours sur cette affaire.. Je fais des tests ici et là, je cherche la logique dans quelque chose qui me reste encore obscur.

J'ai essayé encore ceci, je n'ai même pas eu de message d'erreur lors de la sauvegarde mais absolument rien ne se passe sur l'agenda en question, je continue bien de recevoir mon mail, tout va bien, sauf l'agenda.

Ca reste vide, l'évènement ne se créer pas :(

Bonjour,

Pour commencer, à la fin de votre script d'envoi de mail ajoutez :

ajout_agenda(cptt,debut,fin)

Puis renommez votre fonction ainsi :

function ajout_agenda(typeAbs,dateDebut,dateFin){

Et ajouter un log voir si les variables sont bien envoyées dans la nouvelle fonction :

Logger.log("type absence :"+cptt+" début absence : "+dateDebut+" fin absence : "+dateFin)

Merci beaucoup ! J'ai réussi à la faire fonctionner !

Ce qui n'allait pas, c'était le format de la date qui n'était pas reconnue semble-t-il par l'agenda.

Merci beaucoup pour l'aide :D

Rechercher des sujets similaires à "ajout google agenda sheets script deja existant"