Partage
  • Partager sur Facebook
  • Partager sur Twitter

Google Sheet: Script de Sélection - PDF - Mail

    28 août 2024 à 13:34:59

    Bonjour,

    Cela fait un petit moment que je ne suis pas passé dans le coin.

    Je me permet de contacter la communauté, car je me trouve un peu embêté et je n'arrive pas à finaliser le code que j'utilise.

    Voici mon besoin initiale:

    Dans le cadre professionnel, je dois créer un fichier contenant des questions, qui par la suite viennent compléter un courrier, qui une fois généré en pdf, est stocké dans le drive et une copie envoyé par mail.

    A ce jour, voici mon avancement:

    - Questionnaire: Ok, il est créer sous Google Form

    - Restitution du questionnaire: OK, il est tout simplement restitué par la fonction de Google Form sous format Google Sheet (forme tableau)

    - Génération d'un courrier: OK, en fonction des réponses de la restitutions je remplie le courrier via les fonctions

    - Génération du PDF: OK, le PDF est bien généré et sauvegardé dans les Drive

    - Génération du mail: OK, le mail est bien généré et envoyé avec en pièce jointe le PDF associé

    - Sélection de la ligne à générer: KO, c'est la que je bloque, je dois pour le moment toujours rentrer dans le script pour demander à celui ci de générer les PDF et l'envoie de mail de tel à tel ligne.

    Bref, passons maintenant, à ce qui nous intéresse le plus, le code (attention coté trouvé et adapté, des améliorations sont donc possible):

    function PDF() {
    
    
    //var spreadsheet = SpreadsheetApp.getActive();
    //spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Réponses au formulaire 1'), true);
    //var data = feuille.getRange('Réponses au formulaire 1').getValues();
    
    
    var doc = SpreadsheetApp.getActive();
    var feuille = SpreadsheetApp.getActive();
    var data = doc.getSheetByName("Réponses au formulaire 1").getRange("C2:C3").getValues();
    
    
    for (var i = 0; i < data.length; i++) {
    feuille.getRange('Courrier!J1').setValue(data[i]);
    
    
    SpreadsheetApp.flush(); // permet une mise à jour de la feuille
    Utilities.sleep(i*1000);
    
    
    // faire appel à la fonction pdf
    Mail();
    
    
    }
    }
    function Mail() {
    DocumentApp.getActiveDocument();
    DriveApp.getFiles();
    
    
    // variables
    const doc = SpreadsheetApp.getActive();
    //Référence de la page du courrier
    const docID = 'XXXXXXXXXX';
    //Identifiant du propriétaire de la page
    const feuilleID = 'XXXXXXXXXX';
    //Adresse mail de réception
    const email = doc.getActiveSheet().getRange("Courrier!J2").getValue();
    const fichier = doc.getActiveSheet().getRange("Courrier!C25").getValue().toString() +".pdf"
    const objet = 'Objet';
    const corps = "Bonjour,<br><br>Veuillez trouver en pièce jointe le courrier<br><br>Cordialement<br><br>;
    //Référence du dossier de stockage
    const dossier = DriveApp.getFolderById('XXXXXXXXXXX');
    
    
    // Création du fichier pdf
    const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
    const exportOptions =
    'exportFormat=pdf&format=pdf' +
    '&size=A3' +
    '&portrait=true' + // orientation portrait, false pour paysage
    '&fitw=true' + // pas d'ajustement en largeur
    '&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
    '&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
    '&fzr=false' + // frozen rows = pas de répétition de l'en-tête
    '&gid=' + feuilleID;
    var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
    var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();
    
    
    // Envoi email avec fichier attaché
    GmailApp.sendEmail(email, objet, corps, {
    htmlBody: corps,
    attachments: [{
    fileName: fichier,
    content: reponse.getBytes(),
    mimeType: "application/pdf"
    }]
    });
    
    
    // Sauvegarde du fichier.
    DriveApp.createFile(reponse.setName(fichier));
      // Sauvegarde du fichier.
      dossier.createFile(reponse.setName(fichier));
    }

    Les 2 codes si dessus sont fonctionnels et répondent à mes attentes. 

    Mais,

    Je dois systématique rentrer dans la fonction PDF et modifier la ligne 

    var data = doc.getSheetByName("Réponses au formulaire 1").getRange("C2:C3").getValues();

    qui ici me génère uniquement les courrier des lignes 2 à 3 (C2:C3 car j'ai créer une colonne Id, pour m'aider)

    J'espère avoir pu vous donner un maximum d'information.

    Merci d'avance pour aide précieuse.

    Au plaisir de vous lire.

    Bonne journée.

    • Partager sur Facebook
    • Partager sur Twitter
      28 août 2024 à 15:05:58

      qu'est-ce qui permettrait de savoir quelles lignes sont à traiter ?

      est-ce que getActiveRange() pourrait aider ? éventuellement couplé à getRow() pour extraire uniquement le numéro de ligne et modifier la boucle pour parcourir les cellules du Range et non plus les données ?

      • Partager sur Facebook
      • Partager sur Twitter
        29 août 2024 à 8:37:04

        Umfed,

        Bonjour, comme toujours fidele au post et reactif. Je t'en remercie.

        J'ai pensais à plusieurs solution, dont une que j'ai testé et qui fonctionne seule mais que je n'arrive pas à intégrer à mes fonctions.

        J'ai donc pensé, soit un système de case à cocher pour générer le pdf et envoyé le mail de la ligne cochée.

        J'ai un code qui fonctionne dans le principe, mais que je n'arrive pas à intégrer dans mes codes fonctionnel.

        Soit en mettant en place une box, demandant à l'opérateur de saisir le numéro de ligne ou l'id ou la référence, quelque chose du genre.

        Si cela peut aider, voici le code que j'ai utilisé pour la sélection de case à cocher:

        function onEdit(event){
        
          //var feuille = event.source.getActiveSheet();
          var cellule = event.source.getActiveRange();
        
          var ui = SpreadsheetApp.getUi()
          var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
          var fuseauHoraire = Session.getScriptTimeZone();
        
          if (feuille.getName()=='Réponses au formulaire 1'){
        
            // colonne A : mail 1 : Générer Courrier
        
            if (cellule.getColumn()==1 && cellule.getValue()){
        
              var fal = feuille.getRange("I"+ cellule.getRow()).getValues().toString();
        
              // Alerte utilisateur
              var dialogue = ui.alert('Vous avez demandé de "Générer Courrier".', 'Envoyer le mail contenant le Courrier avec le PDFt ' + fal + ' ?', ui.ButtonSet.YES_NO)
        
              // Si l'utilisateur approuve
              if (dialogue == ui.Button.YES) {
        
                  // faire appel à la fonction pdf
                  PDF();
              }
              Logger.log("Emailing " + email) // Enregistrer le courriel dans la log
              SpreadsheetApp.getActiveSheet().getRange("B" + cellule.getRow()).setValue(Utilities.formatDate(new Date(), fuseauHoraire, "dd/MM/yyyy")); //Inscription dans la colonne B la date d'envoi du mail 
            }
          }
        }



        • Partager sur Facebook
        • Partager sur Twitter
          29 août 2024 à 12:00:50

          là ça se déclenche quand tu rentres dans l'édition d'une cellule de la colonne A.

          N'oublies pas que tu peux passer des paramètres à tes fonctions (dont les valeurs à utiliser ou la plage à utiliser)

          là comme tu as une colonne indiquant si tu as envoyé le mail ou ps, tu pourrais l'utiliser pour savoir si tu dois l'envoyer ou pas.

          • Partager sur Facebook
          • Partager sur Twitter
            29 août 2024 à 14:55:00

            Oui en gros, en colonne A tu as la case à cocher.

            En colonne B, j'ai une information qui me dit quand a été cocher la cellule, et par conséquent quand le PDF a été généré et envoyé avec le courrier.

            Quand celle ci est cocher, une box s'ouvre et te demande si tu veux vraiment générer le courrier ?

            Si tu répond non, elle ce ferme et rien ne ce passe.

            Si tu répond oui, j'ai besoin qu'elle lancer mes 2 fonctions, génération PDF et envoie du mail.

            • Partager sur Facebook
            • Partager sur Twitter
              29 août 2024 à 18:48:45

              ça devrait marcher à partir du moment où tu passes en paramètre de tes fonctions les bons éléments (valeur ou plage) (cf exemple de la fonction DOUBLE dans la doc 
              • Partager sur Facebook
              • Partager sur Twitter
                6 septembre 2024 à 13:26:26

                Alors la, ca ne me parle absolument pas.

                J'ai beau lire l'article, mais je ne comprend pas comment je peu l'intégrer et comment cela va s'articuler.

                Ma compréhension des différents codes, ce limite malheureusement à des cars d'usage précis, je ne suis pas novice pour autant mais ma connaissance reste limité à du cas d'usage.

                • Partager sur Facebook
                • Partager sur Twitter
                  6 septembre 2024 à 17:07:15

                  le passage de paramètres dans une fonction,  ça reste un principe ultra répandu en programmation, ça fait parti des bases même ....

                  Si je reprends tes codes en les modifiant:

                  function onEdit(event){
                   
                    //var feuille = event.source.getActiveSheet();
                    var cellule = event.source.getActiveRange();
                   
                    var ui = SpreadsheetApp.getUi();
                    var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
                    var fuseauHoraire = Session.getScriptTimeZone();
                   
                    if (feuille.getName()=='Réponses au formulaire 1'){
                   
                      // colonne A : mail 1 : Générer Courrier
                   
                      if (cellule.getColumn()==1 && cellule.getValue()){
                   
                        var fal = feuille.getRange("I"+ cellule.getRow()).getValues().toString();
                   
                        // Alerte utilisateur
                        var dialogue = ui.alert('Vous avez demandé de "Générer Courrier".', 'Envoyer le mail contenant le Courrier avec le PDFt ' + fal + ' ?', ui.ButtonSet.YES_NO)
                   
                        // Si l'utilisateur approuve
                        if (dialogue == ui.Button.YES) {
                   
                            // faire appel à la fonction pdf
                            PDF(fal); // il me semble que c'est cette valeur que tu utilise par la suite
                        }
                        Logger.log("Emailing " + email) // Enregistrer le courriel dans la log
                        SpreadsheetApp.getActiveSheet().getRange("B" + cellule.getRow()).setValue(Utilities.formatDate(new Date(), fuseauHoraire, "dd/MM/yyyy")); //Inscription dans la colonne B la date d'envoi du mail
                      }
                    }
                  };
                  
                  
                  
                  function PDF(fichierpdf) {
                   
                  if(fichierpdf == undefined) fichierpdf="message test"; //Ajout: si on veut tester la fonction pdf, on peut s'assurer que fichierpdf contienne une valeur
                  
                  //var spreadsheet = SpreadsheetApp.getActive();
                  //spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Réponses au formulaire 1'), true);
                  //var data = feuille.getRange('Réponses au formulaire 1').getValues();
                   
                   
                  //var doc = SpreadsheetApp.getActive();
                  var feuille = SpreadsheetApp.getActive();
                  //var data = doc.getSheetByName("Réponses au formulaire 1").getRange("C2:C3").getValues();
                   
                   
                  //for (var i = 0; i < data.length; i++) {
                  feuille.getRange('Courrier!J1').setValue(fichierpdf);
                   
                   
                  SpreadsheetApp.flush(); // permet une mise à jour de la feuille
                  //Utilities.sleep(i*1000);
                  Utilities.sleep(1000); 
                   
                  // faire appel à la fonction pdf
                  Mail();
                   
                   
                  //}
                  };
                  function Mail() {
                  DocumentApp.getActiveDocument();
                  DriveApp.getFiles();
                   
                   
                  // variables
                  const doc = SpreadsheetApp.getActive();
                  //Référence de la page du courrier
                  const docID = 'XXXXXXXXXX';
                  //Identifiant du propriétaire de la page
                  const feuilleID = 'XXXXXXXXXX';
                  //Adresse mail de réception
                  const email = doc.getActiveSheet().getRange("Courrier!J2").getValue();
                  const fichier = doc.getActiveSheet().getRange("Courrier!C25").getValue().toString() +".pdf"
                  const objet = 'Objet';
                  const corps = "Bonjour,<br><br>Veuillez trouver en pièce jointe le courrier<br><br>Cordialement<br><br>;
                  //Référence du dossier de stockage
                  const dossier = DriveApp.getFolderById('XXXXXXXXXXX');
                   
                   
                  // Création du fichier pdf
                  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
                  const exportOptions =
                  'exportFormat=pdf&format=pdf' +
                  '&size=A3' +
                  '&portrait=true' + // orientation portrait, false pour paysage
                  '&fitw=true' + // pas d'ajustement en largeur
                  '&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
                  '&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
                  '&fzr=false' + // frozen rows = pas de répétition de l'en-tête
                  '&gid=' + feuilleID;
                  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
                  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();
                   
                   
                  // Envoi email avec fichier attaché
                  GmailApp.sendEmail(email, objet, corps, {
                  htmlBody: corps,
                  attachments: [{
                  fileName: fichier,
                  content: reponse.getBytes(),
                  mimeType: "application/pdf"
                  }]
                  });
                   
                   
                  // Sauvegarde du fichier.
                  DriveApp.createFile(reponse.setName(fichier));
                    // Sauvegarde du fichier.
                    dossier.createFile(reponse.setName(fichier));
                  };


                  Après, je ne suis pas sûr des références de cellules à utiliser.
                  Dans onEdit, on récupère la valeur de la cellule Ix (x étant le numéro de la ligne éditée)

                  Dans PDF, on passe cette valeur, et tu remplis la cellule Courrier!J1 avec cette valeur

                  Dans Mail() tu va récupérer les cellules Courrier!J2 et Courrier!C25 et là je ne vois pas la liaison avec la cellule Courrier!J1 (ni avec la valeur récupérée en Ix).
                  PS; j'ai commenté les lignes non utilies de tes codes précédents

                  Edit: j'ai apporté des corrections au code suite à ma réponse du 11/09/2024

                  -
                  Edité par umfred 11 septembre 2024 à 17:32:44

                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 septembre 2024 à 9:01:33

                    Umfred,

                    Bonjour, merci pour ton retour.

                    Voici les réponses à tes interrogations.

                    Tout d'abord, ce qu'il faut savoir:

                    PDF: Derrière mon tableau avec les différentes informations complétés via Google Form, j'ai un feuille qui sert de mise en forme et qui remet correctement en place les informations avec la bonne charte graphique.

                    Celle ci est compléter via différentes fonction directement dans les cellules, notamment des INDEX + EQUI.

                    Dans onEdit:

                    La valeur de la colonne I est la référence que je que j'utilise pour me repérer, ce n'est peut pas le plus judicieux.

                    Dans PDF:

                    La fameuse cellule Courrier!J1 reprend l'Id de la ligne de réponse (qui ce trouve en colonne C dans mon tableau)et complète la feuille Courrier avec les différents éléments de réponse en respectant la charte graphique.

                    C'est pour cela que dans le script PDF j'avais le code 

                    //var data = doc.getSheetByName("Réponses au formulaire 1").getRange("C2:C3").getValues();


                    Qui me permettait en choisissant mes Id de (pour l'exemple: "C2:C3") de faire fonctionner mes fonctions sur le courrier et générer les différents PDF en masse, toujours dans notre exemple 2 PDF générés le premier avec l'id en C2 et le second avec l'id en C3, contenant chacun des informations différentes.

                    Cela est fonctionnel, mais mon but maintenant c'est de sélectionner uniquement la ligne que je souhaite générer et envoyer par mail en cochant la case de la ligne qui convient.

                    Dans Mail:

                    Dans Courrier!J2 je reprend la valeur de l'adresse mail du tableau via mes fonctions INDEX + EQUIV, qui pourrait très bien être géré via le script. Mais j'ai fais au plus simple pour moi pour cette étape, étant donné que je fais la mise en forme via les fonctions INDEX + EQUIV, d'où cette redondance.

                    Pour Courrier!C25, c'est la même chose, sauf que je récupère la référence de la colonne I (le fameux cellule Ix)

                    Pour le moment, les modifications n'ont pas débloqué la situation, je gratte un peu pour voir ou sa bloque.

                    J'espere que mon complément d'information te permettra également de m'aider dans cette résolution.

                    Quand je test les scripts 1 à 1 voici les messages que j'obtiens:

                    PDF:

                    Erreur	
                    ReferenceError: feuille is not defined
                    PDF	@ PDF.gs:15

                    Mail:

                    RAS il est fonctionnel en l'état.

                    Sélection:

                    Erreur	
                    TypeError: Cannot read properties of undefined (reading 'source')
                    onEdit	@ Selection.gs:4

                    Je pense que c'est normal, car je dois normalement dans le process cocher la case en question, du coup ici il doit attendre l'information.

                    Quand je lance le test en mode normal, j'ai bien la question au script de Sélection, mais derrière j'ai l'impression que rien ne ce passe. 

                    PDF non généré

                    Mail non envoyé

                    Date non enregistré sur ma ligne en colonne B

                    Encore merci.

                    Bonne journée.

                    -
                    Edité par Wolfy81100 10 septembre 2024 à 9:13:58

                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 septembre 2024 à 11:42:59

                      Il faut décommenter la ligne 10 de PDF (le message disant que feuille n'est pas défini, il faut remettre sa définition, logique).

                      c'est normal que rien ne se produise si il y a une erreur dans les scripts :lol:; en décommentant la ligne que je mentionne ça devrait fonctionner  (le test unitaire ne va pas fonctionner pour PDF (ou de façon non voulu) car la variable passée en paramètre ne sera pas définie (pour le test, peut-être rajouter un truc du genre, if (not fichierpdf)  fichierpdf="une valeur qui peut fonctionner" (à écrire avec les bonnes syntaxes et valeurs)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 septembre 2024 à 16:32:09

                        Malgré la modification de la ligne 10, pas d'amélioration.

                        J'ai l'impression que le blocage ce fait coté de la Sélection via le onEdit.

                        J'ai bien, le message qui me demande si je veux bien générer le fichier "Oui" ou "Non", mais quand je clique sur "Oui", la fenêtre ce ferme et pas d'action derrière.

                        J'ai meme tester de remplacer le PDF(Fal); par Mail(); pour voir si ca venez de la fonction pdf, mais rien.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 septembre 2024 à 16:50:47

                          tu as respecté la casse pour la variable fal (les variables sont sensibles à la casse (une variable fal sera une variable différente de la variable Fal)

                          tu peux rajouter des messagebox ou des alerts pour voir où il va (et éventuellement y afficher tes variables)

                          Browser.msgBox('Vous avez cliqué sur "Oui" !');
                          ou
                          SpreadsheetApp.getUi().alert('Hello, world');



                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 septembre 2024 à 15:39:13

                            Umfred,

                            Bonjour, pour le coup je suis perdu, déjà, je ne sais pas à quoi correspond le fal ou FAL. j'ai vu que tu l'avais ajouté dans le script modifié.

                            En ce qui concerne le fichier, voici à quoi il ressemble

                            En gros cellule A, je viens cocher la ligne qui correspond pour demander au script de générer le PDF et envoyer une copie par mail

                            Au moment de cocher, pas de soucis j'ai la boite de dialogue qui s'ouvre pour me demander si je suis sur de vouloir générer et envoyer le PDF.

                            Que je réponde Oui ou Non actuellement, je ne vois pas de changement, rien n'est généré ou envoyer.

                            La feuille "Courrier" derrière est le fameux fichier que je met en PDF, pour le moment  avec cette méthode je ne la modifie pas pour qu'elle prenne la valeur de la cellule cocher, ca viendra dans un second.

                            Je ne veux pas aller trop vite pour ne pas me perdre.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 septembre 2024 à 17:15:04

                              Je l'ai pourtant dit (pas explicitement) et il suffit de suivre le code (je l'ai juste passé à PDF, tu l'utilisais en ligne 16 dans ton code initial sans l'utiliser sauf pour affichage dans l'alert ligne 19)

                              umfred a écrit:

                              Après, je ne suis pas sûr des références de cellules à utiliser.

                              Dans onEdit, on récupère la valeur de la cellule Ix (x étant le numéro de la ligne éditée)

                              Dans PDF, on passe cette valeur, et tu remplis la cellule Courrier!J1 avec cette valeur


                              la variable que je passe, qui s'appelle fal contient la valeur récupérée de la cellule Ix dans onEdit et qui est donc copiée dans Courrier!J1 par PDF

                              Sinon, j'ai vu un souci: il faut supprimer le i pour avoir un Utilities.sleep(1000);  je pense que c'est l'origine du problème (i n'étant pas défini vu qu'il est créé dans le for qui n'est plus utilisé)

                              Edit: il devait peut-être aussi manquer quelques point-virgules en fin de fonctions; j'ai corrigé dans le post précédent où j'ai mis les codes

                              -
                              Edité par umfred 11 septembre 2024 à 17:26:15

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 septembre 2024 à 11:19:04

                                Bonjour,

                                Désolé, semaine chargé, donc pas trop avancé sur le sujet.

                                Je me remet donc un peu à la tache.

                                A date, voici ce qu'il ce passe.

                                Quand j'utilise la fonction PDF, un PDF est bien généré avec les données que j'ai dans "Courrier", et stocker sur le drive.

                                Ca fonctionne très bien !

                                Par contre, si je lancer avec la case à cocher.

                                la feuille "Courrier", prend bien la valeur de la ligne que j'ai coché, mais par contre la fonction PDF ne génère pas le PDF et ne le stock pas dans le drive.

                                En attendant des idées, je continue à trafiquer un peu de mon coté.

                                Merci d'avance pour votre aide.

                                Bonne journée.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 septembre 2024 à 16:03:07

                                  c'est donc la fonction Mail (appelé par PDF) qui fonctionne mal.

                                  A priori, depuis le début, il y a un guillemet manquant à la fin de la ligne 16 

                                  const corps = "Bonjour ....<br/>";

                                  qui doit faire capoter la fonction (mais du coup, je ne vois pas pourquoi ça fonctionne dans un cas, à moins que tu n'utilises pas la même fonction)

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 septembre 2024 à 9:06:37

                                    Umfred,

                                    Bonjour, j'avais vu le problème et l'avais déjà corrigé.

                                    Ce que je n'arrive pas à comprendre, c'est pourquoi si je lance dans la console la fonction PDF, il génère bien le PDF et ensuite l'envoie par mail, puisque la fonction PDf, appel par la suite la fonction MAIL.

                                    Edit: Génère avec la ligne que tu m'as fais ajouté:

                                    if(fichierpdf == undefined) fichierpdf="message test"; //Ajout: si on veut tester la fonction pdf, on peut s'assurer que fichierpdf contienne une valeur
                                     



                                    Mais par contre si j'appelle la fonction onEdit, je n'ai ni génération de PDF, ni d'envoie de mail.

                                    Je me doute qu'une ligne doit bloquer, mais je pense que c'est au niveau de onEdit que ce situe le problème pour le coup.

                                    Edit: Est ce que ce ne serais pas justement fichierpdf dans la fonction PDF qui me pose problème. Quelle valeur je peux associer à:

                                    //for (var i = 0; i < data.length; i++) {
                                    feuille.getRange('Courrier!J1').setValue(fichierpdf);



                                    Quelque chose m'échappe.

                                    -
                                    Edité par Wolfy81100 26 septembre 2024 à 9:15:06

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 septembre 2024 à 15:05:04

                                      je le répète, fichierpdf prend ici la valeur qu'on lui passe et qui correspond à la valeur de la colonne I de la ligne cliquée de la feuille "réponses au formulaire 1" donc à la valeur de ta colonne "NUMERO DE RAPPORT CORRIGE" que tu montres dans ta capture d'écran des feuilles.

                                      var fal = feuille.getRange("I"+ cellule.getRow()).getValues().toString();
                                        


                                      Et la fonction OnEdit ne s'appelle pas directement, elle doit se déclenché au clic sur  une case ou à la fin de la modification d'une cellule de la feuille concernée 

                                      Edit: de mon côté, je viens de constater que la fonction onEdit me renvoie une erreur parce que la variable email n'est pas définie sur sa ligne "Logger.log("Emailing " + email)" quand on ne valide pas la demande d'envoi, donc il faudrait déplacer l'accolade fermante du test (if (dialogue == ui.Button.YES)) après le log et la mise à jour de la date d'envoi (ce qui est, somme toute, logique); mais ça n'explique pas ton problème)

                                      -
                                      Edité par umfred 26 septembre 2024 à 17:48:36

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Google Sheet: Script de Sélection - PDF - Mail

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      • Editeur
                                      • Markdown