Problème mail automatique

Bonjour,

J'ai un script pour envoyer automatiquement un mail lors que dans la casse G35 est marquer "OUI" .

Sa envoie automatiquement un email a différente personnes par rapport a une liste de destinataire prédéfinie, sauf que le problème c'est que lors que la casse G35 est marquer "OUI" rien ne se passe.

Trouvez si dessous le lien du tableau: Copie de Copie de Inventaire POUR Pedro - Google Sheets<br>

function onEdit(e) {
  // Vérifier que l'objet événement est défini
  if (!e) {
    Logger.log("L'objet événement 'e' est indéfini");
    return;
  }

  var feuille = e.source.getActiveSheet();
  var range = e.range;

  // Vérifier si la cellule modifiée est G35 et si sa valeur est "OUI"
  if (range.getA1Notation() === 'G35' && e.value === 'OUI') {
    sendTableAsPDF();
  }
}

function sendTableAsPDF() {
  // Récupérer la feuille active
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Liste des destinataires
  var destinataires = [
    feuille.getRange("I8").getValue(),
    feuille.getRange("I9").getValue(),
    feuille.getRange("P5").getValue(),
    feuille.getRange("P6").getValue(),
    feuille.getRange("P7").getValue(),
    feuille.getRange("P9").getValue(),
    feuille.getRange("P10").getValue(),
    feuille.getRange("P11").getValue()
  ];

  // Sujet du mail
  var sujet = "Compte rendu de la garde";

  // Contenu du mail
  var message =
    "Bonjour,\n\nVoici le compte rendu de la garde du " +
    feuille.getRange("D6").getValue() +
    " " +
    feuille.getRange("E6").getValue() +
    " " +
    feuille.getRange("F6").getValue() +
    ".\n" +
    "Le chef de garde du jour était : " +
    feuille.getRange("J5").getValue() +
    "\n\nLes retours des inventaires sont :\n\n" +
    feuille.getRange("B17").getValue() + " " + feuille.getRange("C17").getValue() + " : " + "\n" + feuille.getRange("M17").getValue() + "\n\n" +
    feuille.getRange("B20").getValue() + " : " + "\n" + feuille.getRange("M20").getValue() + "\n\n" +
    feuille.getRange("B23").getValue() + " " + feuille.getRange("C23").getValue() + " : " + "\n" + feuille.getRange("M23").getValue() + "\n\n" +
    feuille.getRange("B26").getValue() + " " + feuille.getRange("C26").getValue() + " : " + "\n" + feuille.getRange("M26").getValue() + "\n\n" +
    feuille.getRange("B29").getValue() + " " + feuille.getRange("C29").getValue() + " : " + "\n" + feuille.getRange("M29").getValue() + "\n\n" +
    "\n\nRespectueusement";

  // Parcourir la liste des destinataires
  for (var i = 0; i < destinataires.length; i++) {
    // Créer et enregistrer le PDF
    var pdfFile = createAndSavePDF(feuille);
    // Vérifier si le PDF a été créé avec succès
    if (pdfFile) {
      // Envoyer le mail avec le PDF en pièce jointe
      MailApp.sendEmail({
        to: destinataires[i],
        subject: sujet,
        body: message,
        attachments: [pdfFile.getAs(MimeType.PDF)]
      });
      // Supprimer le fichier PDF après l'envoi du mail
      pdfFile.setTrashed(true);
    } else {
      Logger.log("Erreur lors de la création du PDF.");
    }
  }
}

// Fonction pour créer et enregistrer le PDF
function createAndSavePDF(feuille) {
  // URL du dossier de destination
  var folderUrl = 'https://drive.google.com/drive/folders/1NCVwdEHLU-X4YezkoJBeVdmLrJPuaQfB'; 
  // Extraire l'identifiant du dossier à partir de l'URL
  var folderId = folderUrl.match(/[-\w]{25,}/); 

  // Vérifier si l'identifiant du dossier a été trouvé
  if (folderId) {
    folderId = folderId[0];
    var folder = DriveApp.getFolderById(folderId);

    // Obtenir le lien d'exportation PDF
    var pdfBlob = getPDFExportLink(feuille);
    // Vérifier si le lien d'exportation PDF a été obtenu avec succès
    if (pdfBlob) {
      // Télécharger le PDF et l'enregistrer dans le dossier de destination
      var nomFichier = "garde_" + feuille.getRange("D6").getValue() + "_" + feuille.getRange("E6").getValue() + "_" + feuille.getRange("F6").getValue() + ".pdf";
      var pdfFile = folder.createFile(pdfBlob).setName(nomFichier);
      // Retourner le fichier PDF
      return pdfFile;
    } else {
      Logger.log("Erreur lors de l'exportation en PDF.");
      return null;
    }
  } else {
    Logger.log("Impossible de trouver l'identifiant du dossier dans l'URL.");
    return null;
  }
}

// Fonction pour obtenir le lien d'exportation PDF
function getPDFExportLink(sheet) {
  var spreadsheetId = sheet.getParent().getId();
  var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=pdf&portrait=false&gid=" + sheet.getSheetId();
  var options = {
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
    }
  };
  var response = UrlFetchApp.fetch(url, options);
  var blob = response.getBlob();
  return blob;
}

avez vous une idée d'où peux venir le problème.

Merci par avance pour votre aide.

Salut !

Et si tu échappes la casse en forçant la majuscule ? càd tu convertie ton input en majuscule, si je reprends le début de ton script :

function onEdit(e) {
  // Vérifier que l'objet événement est défini
  if (!e) {
    Logger.log("L'objet événement 'e' est indéfini");
    return;
  }

  var feuille = e.source.getActiveSheet();
  var range = e.range;
  var valeur = e.value.toUpperCase();

  // Vérifier si la cellule modifiée est G35 et si sa valeur est "OUI"
  if (range.getA1Notation() === 'G35' && valeur === 'OUI') {
    sendTableAsPDF();
  }
}
...

je viens de modifier le script et ce la ne fonctionne pas non plus, avec vos modification

 function onEdit(e) {
  // Vérifier que l'objet événement est défini
  if (!e) {
    Logger.log("L'objet événement 'e' est indéfini");
    return;
  }

  var feuille = e.source.getActiveSheet();
  var range = e.range;
  var valeur = e.value.toUpperCase();
…  var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=pdf&portrait=false&gid=" + sheet.getSheetId();
  var options = {
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
    }
  };
  var response = UrlFetchApp.fetch(url, options);
  var blob = response.getBlob();
  return blob;
}

je reçois le mail suivent:

17:38 (il y a 3 heures)

Your script, Macros enregistrées (Inventaire POUR Pedro), has recently failed to finish successfully. A summary of the failure(s) is shown below. To configure the triggers for this script, or change your setting for receiving future failure notifications, click here.

The script is used by the document Copie de Copie de Inventaire POUR Pedro.

StartFunctionError MessageTriggerEnd
2024-07-16 17:38:05 Central European Summer TimeonEditException: Access denied: DriveApp.edit2024-07-16 17:38:13 Central European Summer Time

Sincerely,

Google Apps Script

Need help? Visit the Google Apps Script documentation. Please do not reply to this message. (c) 2024 Google

Bonjour,

Le problème ne vient pas du script mais des droits, pourquoi la fonction onEdit doit renvoyer blob ?

Rechercher des sujets similaires à "probleme mail automatique"