Mail automatique : le code ne rentre pas dans le if

Bonjour à tous,

Voilà je suis en train de rédiger ce code pour envoyer un mail automatiquement lorsque qu'une case est cochée dans le tableur (tableur généré par un form).

Voici le souci :

Il fonctionne très bien lorsque la variable "fal" stockée en colonne E est vide au départ du code (le cas où on rentre dans le if ligne 19 : saisie de la variable par l'utilisateur). Mais lorsque la variable "fal" est déjà écrite en colonne E (provenant de la réponse form) (else ligne 23), là le code ne rentre plus dans les if lignes 33 ou 37 (ceux où on vérifie ce que contient "fal") et donc la variable "email" n'est pas affectée.

J'ai essayé de placer des msgbox pour vérifier que la "fal" contient bien la donnée et c'est le cas à chaque fois, c'est pour ça que je ne comprends pas du tout pourquoi dans le cas du else ligne 23 cela ne fonctionne plus...

Merci de votre aide !

 //Envoie un mail à l'adresse de diffusion (320 ou 350 selon le cas) lorsque la case "traité" a été cochée par un gestionnaire du HUB
  // utilise un déclencheur : la case à cocher colonne G

  //Si élargissement du périmètre, ajouter des If dans le paragraphe "si l'utilisateur approuve"

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

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

    var fal = feuille.getRange("E" + e.range.getRow()).getValues();

    if (fal==0) {
      var saisie = ui.prompt('L\'appartenance de l\'équipement n\'a pas été renseignée. A quelle FAL appartient-il ?');
      var fal =saisie.getResponseText();
    }
      else {
        var fal = feuille.getRange("E" + e.range.getRow()).getValues();
         }

    // Alerte utilisateur
    var dialogue = ui.alert('Vous avez coché "Traité".', 'Envoyer un mail à la liste de diffusion ' + fal + ' ?', ui.ButtonSet.YES_NO)

    // Si l'utilisateur approuve
    if (dialogue == ui.Button.YES) {

      if (fal.indexOf("320")>-1) {
        SpreadsheetApp.getActiveSheet().getRange("E" + e.range.getRow()).setValue("A320")
        var email = "mail 1"; 
      }
      if (fal.indexOf("350")>-1) {
        SpreadsheetApp.getActiveSheet().getRange("E" + e.range.getRow()).setValue("A350")
        var email = "mail 2";
      }

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

      // Envoyer le courriel
      MailApp.sendEmail({
        to: email.toString(),
        cc: 'mail 3,mail 4',
        subject: "blablabla à créer " + feuille.getRange("B" + e.range.getRow()).getValues(), // Objet ici
        name: "L'équipe gestionnaire du HUB logistique", // Votre nom ici
        body: "Bonjour, \nmerci de créer blabla pour l'équipement " + feuille.getRange("C" + e.range.getRow()).getValues() + " n° " + feuille.getRange("B" + e.range.getRow()).getValues() + " localisé en " + feuille.getRange("D" + e.range.getRow()).getValues() + ". \n\nCordialement,\nL'équipe HUB \n", // Corps du courriel ici
      })
      Logger.log("Envoyé") //
    }
    Logger.log("Mot déclencheur " + e.value + " compléter") //
   }
}

Bonjour,

  • Quelle est la fonction utilisée ? onEDit ou autre fonction ? j'ai l'impression qu'il manque le début du code
  • Comment est déclaré le déclencheur ?
  • Quel est l'élément déclencheur ? comment est-il renseugné ?

Pour un travail efficace, il serait bon que tu mettes un lien vers une copie simplifiée de ton fichier ?

Bonjour Mikhail, content de te retrouver !

Oui mince j'ai coupé le tout début du code, je vous mettre un lien vers mon drive perso (accès bloqué sur mon réseau pro).

Concernant le déclencheur, il est correctement configuré puisque le mails partent bien dans le 1er cas, mais je vais mettre une image du paramétrage. Et comment il est déclaré... bonne question, c'est un code que j'ai copié (je pense qu'il s'agit de "e" dans le code), mais en tous cas de ce côté là ça fonctionne (même si je ne comprends pas comment aha)

Le lien :

https://docs.google.com/spreadsheets/d/1vvMkobJkOxIkP0dbn1GlJ5vjYwLskUlgGDxfg-o5Wno/edit?usp=sharing

capture

Décidément je les fait toutes...

https://docs.google.com/spreadsheets/d/1vvMkobJkOxIkP0dbn1GlJ5vjYwLskUlgGDxfg-o5Wno/edit?usp=sharing

Voilà normalement tu devrais pouvoir travailler dessus

Ceci bloque le script

Logger.log("Emailing " + email[0])

car email n'est pas un tableau ... mettre

Logger.log("Emailing " + email)

je n'ai pas encore regardé le reste

Remarque, si tu exploite dans ton script des valeurs que tu affectes par setValue(), il faut alors mettre un flush pour actualiser la page (car le script tourne côté serveur en ayant mémorisé au départ ta page sans les modifs que tu aurais pu faire)

SpreadsheetApp.flush();

La case est cochée comment ? manuellement ?

Oui la case est cochée par l'utilisateur manuellement

En enlevant le [0] déjà ça supprime l'erreur que j'avais au début, le code rentre bien dans les if qui vérifient le contenu du "fal" (puisqu'il vient écrire en dur dans la case comme demandé", mais produit maintenant cette erreur :

image

Dans ce cas, mets juste

to: email,

mais si tu n'as ni 350, ni 320, var email n'est pas connu !! pas défini ...

      if (fal.indexOf("320")>-1) {
        SpreadsheetApp.getActiveSheet().getRange("E" + e.range.getRow()).setValue("A320")
        var email = "mail 1"; 
      }
      else if (fal.indexOf("350")>-1) {
        SpreadsheetApp.getActiveSheet().getRange("E" + e.range.getRow()).setValue("A350")
        var email = "mail 2";
      }
      else {
        ui.alert('rien, nada')
        return
      }

Merci de ton aide,

Pour rappel, le cas qui pose problème est celui où fal est prérempli en colonne E lors de l'exécution du code. Ce qui est d'autant plus incompréhensible puisque "fal" existe bien !

D'ailleurs pour tester, j'ai mis dans ui.alert la variable fal et "fal" contient bien la donnée qui devrait permettre de tester la condition (fal.indexOf("320")>-1).

Je ne comprends vraiment pas pourquoi le code ne rentre pas dans ce if (et du coup n'affecte rien à "email") alors que "fal" contient bien la bonne donnée...

Ajoute

.toString()
    if (fal==0) {
      var saisie = ui.prompt('L\'appartenance de l\'équipement n\'a pas été renseignée. A quelle FAL appartient-il ?');
      var fal =saisie.getResponseText();
    }
    else {
      var fal = feuille.getRange("E" + e.range.getRow()).getValues().toString();
    }

C'ETAIT ÇA !!

Vraiment un tout petit détail, mais avec ce toString ça vient enfin lire "fal". Avec la solution sous les yeux je comprends maintenant, mais sans toi je n'aurai jamais pensé à ça

Merci encore, le post est résolu

Rechercher des sujets similaires à "mail automatique code rentre pas"