Script sheet Envoi automatique email

Bonjour a tous,

Je souhairerai automatiser l’envoi de mail sur sheet en fonction de la reponse sur une colonne. Je vous explique :

A partir d'un googlesheet (qui est alimenté par un googleform une sorte de formulaire), je souhaiterai si dans la colonne A il y a la mention "critique", que certaines informations sur cette ligne soit envoyé par mail et si possible un document en pdf ou en doc qui serait archivé dans un dossier drive.je souhaiterai automatiser l’envoi d’email avec une sorte de rapport soi en pdf soit en doc ou autre

je ne sais pas si cela est faisable…

Merci d’avance de votre réponse 😊 et surtout merci de votre aide!!

Bonjour,

Tu as bien fait de dissocier du topic de Stellenne !

Pour écrire le script, il fait connaître le nom des différentes zones de ton formulaire, et notamment de la première zone.

Ce que je te propose alors, c'est de mettre ce script dans ta feuille (pas dans la form) avec ton adresse email, à la place de

to: 'xxxxxxxxxx@fai.fr',

ensuite

  1. tu exécutes myTriggerSetup et tu réponds aux consignes de sécurité
  2. tu fais un essai avec la form et tu donnes ici le contenu du mail (qui fera apparaître les noms de variables)
script repris ci-dessous

Merci de ta réponse !

Cela n'envoi pas du coup de mail avec mon adresse email...

Ce que je veux faire, je vous met un exemple :

image

Si la cellule A2 est "critique", alors dans mon mail et dans le corp du email je souhaiterai mettre les infos sur la ligne tels que la cellule C2 et D2 par exemple;

Merci d'avance de votre aide :)

Malheureusement, je ne peux rien en faire. Je vais voir pourquoi tu n'as pas de mail.

Pourrais-tu partager en privé ta feuille ?

Je viens de te le partager

Il me faut une autorisation, mais avant cela, j'ai en effet une form où cela fonctionne et une où cela ne fonctionne pas ! curieux ...

as-tu au bout de la ligne le mot "sent" avec le dernier essai ?

sur le script que tu m'as envoyé il n'y a pas de sent a la fin

désolé pour le délai, je viens juste de rentrer

y a t'il quand même la ligne avec les données que tu as rentrée via le formulaire ?

je vais refaire une mise à plat de mon côté de mes tests

Je viens de refaire un test complet

  1. je créer un nouveau fichier
  2. par le menu, je crée un formulaire (Outils > Créer un formulaire) avec 3 questions
  3. je reprends le fichier, Extension > App scripts, je colle le script ci-dessous
  4. je mets mon adresse email en début de script
  5. je fais Exécuter > myTriggerSetUp et j'accepte les demandes de google jusqu'au bout
  6. je lance mon formulaire
  7. je renseigne et j'envoie
  8. je reçois bien un email avec les données (c'est ce que je cherche avant de préciser l'envoi sous certaines conditions)
const adresseEmail = 'xxxxxxxxx@orange.fr'

function myTriggerSetup() {
  if(!isTrigger('onFormSubmit')) {
    ScriptApp.newTrigger('onFormSubmit')
      .forSpreadsheet(SpreadsheetApp.getActive())
      .onFormSubmit()
      .create();
  }
}
function isTrigger(funcName) {
     var r=false;
     if(funcName) {
       var allTriggers=ScriptApp.getProjectTriggers();
       var allHandlers=[];
       for(var i=0;i<allTriggers.length;i++) {
         allHandlers.push(allTriggers[i].getHandlerFunction());
       }
       if(allHandlers.indexOf(funcName)>-1) {
         r=true;
       }
     }
     return r;
}

function onFormSubmit(e) {
  var responses = e.namedValues;
  MailApp.sendEmail({
    to: adresseEmail,
    subject: 'test envoi onFormSubmit',
    htmlBody: JSON.stringify(responses),
  });
  var d = new Date()
  status = 'Sent ' + d;
  // Append the status on the spreadsheet to the responses
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = e.values.length + 1;
  sheet.getRange(row, column).setValue(status);
}

et dans le fichier ...

image

Merci de ton aide vraiment !!!!! tu assures !!!

Mais en faite, je souhaiterais que cela m'envoi un email que si :

dans la colonne "danger" (par exemple), si c'est "critique" que cela m'envoi un email et non pas a chaque fois,

je viens de te partager mon fichier :)

Tu assures vraiment... !!

Et puis après ça je vais te solliciter encore plus !! mdrrr

En faite je souhaiterai, une fois qu'on arrive a automatiser cette envoi, que les même information récupéré sur une des lignes ou le statu est critique,

soit envoyer dans un fichier en pdf ou doc ou sheet avec l'email... et en plus de ça enregistré dans un dossier dans google...

Merci de ton aide vraiment !!!!! tu assures !!!

Mais en faite, je souhaiterais que cela m'envoi un email que si :

dans la colonne "danger" (par exemple), si c'est "critique" que cela m'envoi un email et non pas a chaque fois,

je viens de te partager mon fichier :)

Tu assures vraiment... !!

Mais, je ne vois pas de formulaire attaché à ton fichier !!

Pour l'aspect critique, après réflexion, je vais faire quelque chose d'assez générique avec un mot-clé en testant l'intégralité des réponses et dès que ce mot-clé apparaît alors l'email sera envoyé avec un tableau de toutes informations rentrées.

Mais de ton côté il faut voir comment associer le formulaire à ta feuille sinon rien ne se passe ... je réitère ma question : y a t'il quand même la ligne avec les données que tu as rentrée via le formulaire ?

il te faut le formulaire de la googleform ? Je vais te le partager durant la matinée

c'est surtout qu'il faut que la form soit bien liée à ton sheet !

Oui la form est bien liée au googlesheet, je viens de te partager le fichier

je répète : ta form n'est pas liée à ton sheet

d'où ma question : est-ce que les données que tu mets dans le formulaire se déverse-t-elle bien dans ton sheet ? ou dans quel sheet ?

Ma form est liée a mon sheet.

La googleform test1 est liée au sheet test1. A chaque saisie sur le googlesheet, ça envoi bien les informations dans le sheet.

Et un mail est bien envoyé a chaque fois oui

Et un mail est bien envoyé a chaque fois oui

ouf ! tu as bien un email ... je t'envoie le test sur le terme "critique" cet apm

Remplace la macro par ceci ...

const adresseEmail = 'xxxxxxxxxxx@orange.fr'
const motCle = 'critique'
const sujet = 'Demande intervention technicien ...'

function onFormSubmit(e) {
  var responses = e.namedValues;
  getData(eval(responses))
  if (!drapeau) {return}
  MailApp.sendEmail({
    to: adresseEmail,
    subject: sujet,
    htmlBody: '<table>' + result + '</table>', 
  });
  var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd MMM yyyy hh:mm a");
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = e.values.length + 1;
  sheet.getRange(row, column).setValue('Envoyé : ' + d);
}

let result = ''
let drapeau = false
function getData(obj) {
  for (let p in obj) {
    if (obj[p]!=null){
      if (typeof obj[p] != 'object' && typeof obj[p] != 'function'){
        result += '<tr><td>'+ obj[p] + '</td></tr>';
        if (obj[p] == motCle) {drapeau = true}
      }
      if (typeof obj[p] == 'object') {
        if (obj[p].length){
          result += '<tr><td><b>'+ p + ' :</b></td></tr>';
        }
        getData(obj[p]);
      }
    }
  }
}

Cela me met un message d'erreur :

image

J'ai crée un autre form et sheet pour ne pas perdre l'ancien codage que tu m'as fait

Rechercher des sujets similaires à "script sheet envoi automatique email"