Envoi automatique du mail de la dernière ligne de Sheet

Bonjour,

J'ai crée un Script dans l'Apps Script qui permet d'envoyer un mail de confirmation à une personne qui a répondu à un formulaire Form.

Le problème est que chaque fois qu'il y a une réponse, les précédents reçoivent à nouveau leur mail de récap (je pense que le problème si situe au niveau du compteur de la boucle).

Je souhaiterai donc que mon script se joue sur la dernière ligne uniquement.

Je vous mets le code du script.

Merci pour votre aide.

Bien cordialement.

function confmail(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var feuille_1 = ss.getSheetByName("Réponses au formulaire 1");
var texte_mail = ss.getSheetByName("Message");
var subject = texte_mail.getRange(2,1).getValue();

var n = feuille_1.getLastRow();
for (var i = 2; i < n +1; i ++) {
var emailadresse = feuille_1.getRange(i,6).getValue();
var nom = feuille_1.getRange(i,5).getValue();
var aikido = feuille_1.getRange(i,2).getValue();
var badminton = feuille_1.getRange(i,3).getValue();
var fitgym = feuille_1.getRange(i,4).getValue();
var cotisation = feuille_1.getRange(i,8).getValue();
var messagemail = texte_mail.getRange(2,2).getValue();

Logger.log("affichage de la variable emailadresse : "+emailadresse)
Logger.log("type de la variable emailadresse : "+typeof(emailadressemail))

messagemail = messagemail.replace("<Nom>",nom).replace("<Selection des sections [Aikido 135 €]>",aikido).replace("<Selection des sections [Badminton 90 €]>",badminton).replace("<Selection des sections [Fit'Gym 110 €]>",fitgym).replace("<Cotisation>",cotisation);

MailApp.sendEmail(emailadresse,subject,messagemail);
}
}

Bonjour, essai ce script modifié pour envoyer un e-mail de confirmation uniquement pour la dernière ligne du formulaire.

function confmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var feuille_1 = ss.getSheetByName("Réponses au formulaire 1");
  var texte_mail = ss.getSheetByName("Message");
  var subject = texte_mail.getRange(2, 1).getValue();

  var n = feuille_1.getLastRow();
  var i = n; // Utilisez la dernière ligne comme point de départ

  var emailadresse = feuille_1.getRange(i, 6).getValue();
  var nom = feuille_1.getRange(i, 5).getValue();
  var aikido = feuille_1.getRange(i, 2).getValue();
  var badminton = feuille_1.getRange(i, 3).getValue();
  var fitgym = feuille_1.getRange(i, 4).getValue();
  var cotisation = feuille_1.getRange(i, 8).getValue();
  var messagemail = texte_mail.getRange(2, 2).getValue();

  // Remplacez les balises dans le message par les valeurs correspondantes
  messagemail = messagemail.replace("<Nom>", nom)
    .replace("<Selection des sections [Aikido 135 €]>", aikido)
    .replace("<Selection des sections [Badminton 90 €]>", badminton)
    .replace("<Selection des sections [Fit'Gym 110 €]>", fitgym)
    .replace("<Cotisation>", cotisation);

  // Envoi de l'e-mail
  MailApp.sendEmail(emailadresse, subject, messagemail);

  // Journalisation des informations
  Logger.log("Affichage de la variable emailadresse : " + emailadresse);
  Logger.log("Type de la variable emailadresse : " + typeof(emailadresse));
}

Cdlt

Alex

Bonjour Alex,

Merci pour ta réponse. Le script ne fonctionne pas :

image

Bonjour,

C'est le souci de l'IA, c'est une aide, ça ne résolue pas tout les problèmes

@Greg, le message d'erreur indique qu'il n'y a pas de destinataire, place les logs AVANT l'envoi du mail, ainsi ils seront exécutés même si MailApp ne fonctionne pas, essaye donc ceci voir les logs : (je pense que le soucis vient de la lecture de l'adresse mail)

function confmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var feuille_1 = ss.getSheetByName("Réponses au formulaire 1");
  var texte_mail = ss.getSheetByName("Message");
  var subject = texte_mail.getRange(2, 1).getValue();
  var dataRange = feuille_1.getRange(feuille_1.getLastRow(), 1, 1, 8);
  var rowData = dataRange.getValues()[0];

  var emailadresse = rowData[5]; //adresse e-mail
  var nom = rowData[4]; // nom
  var aikido = rowData[1]; // Aikido
  var badminton = rowData[2]; // Badminton
  var fitgym = rowData[3]; // FitGym
  var cotisation = rowData[7]; // cotisation
  var messagemail = texte_mail.getRange(2, 2).getValue(); // le message

  messagemail = messagemail.replace("<Nom>", nom)
    .replace("<Selection des sections [Aikido 135 €]>", aikido)
    .replace("<Selection des sections [Badminton 90 €]>", badminton)
    .replace("<Selection des sections [Fit'Gym 110 €]>", fitgym)
    .replace("<Cotisation>", cotisation);

// logs pour voir ce qui va etre envoyé
  Logger.log("Le mail va être envoyé à : "+emailadresse)
  Logger.log("Sujet du mail : "+subject)
  Logger.log("corps du mail : "+messagemail)

  MailApp.sendEmail(emailadresse, subject, messagemail);

}

Bonjour Pierre,

Merci pour ta réponse et pour ton aide.

Effectivement, je constate que les champs de fusion de mon mail sont vides. Ce qui veut dire que le script se joue sur la dernière ligne du sheet c'est à dire celle en dessous de la dernière ligne remplie.

J'ai essayé en indiquant n+1 ou n-1 mais ça ne fonctionne pas

var n = feuille_1.getLastRow();
  var i = n+1; // Utilisez la dernière ligne comme point de départ

Est ce possible de partager ton fichier ? Si des données sensibles s'y trouve, une copie du fichier juste pour voir la structure ?

Non c'est un fichier test donc il n'y a aucune données personnelles

Voici le lien vers le sheet : https://docs.google.com/spreadsheets/d/1pkDLo9zyf5SqlX0MMwAruUUK4tRsQcOwkCMFFEIrIW8/edit?usp=sharing

Merci

Le décalage est du aux calculs colonnes G et H qui font que la dernière ligne est en 104 alors que réellement tes données s'arrêtent en 4.

Voici le script adapté qui se focus sur les données contenues en colonne A :

function confmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var feuille_1 = ss.getSheetByName("Réponses au formulaire 1");
  var texte_mail = ss.getSheetByName("Message");
  var subject = texte_mail.getRange(2, 1).getValue();
    var data = feuille_1.getDataRange().getValues();
    var lastRowWithData = data.length;
  while (lastRowWithData > 0 && data[lastRowWithData - 1][0] === "") {
    lastRowWithData--;}
  var rowData = data[lastRowWithData - 1];

  var emailadresse = rowData[5]; //adresse e-mail
  var nom = rowData[4]; // nom
  var aikido = rowData[1]; // Aikido
  var badminton = rowData[2]; // Badminton
  var fitgym = rowData[3]; // FitGym
  var cotisation = rowData[7]; // cotisation
  var messagemail = texte_mail.getRange(2, 2).getValue(); // le message

  messagemail = messagemail.replace("<Nom>", nom)
    .replace("<Selection des sections [Aikido 135 €]>", aikido)
    .replace("<Selection des sections [Badminton 90 €]>", badminton)
    .replace("<Selection des sections [Fit'Gym 110 €]>", fitgym)
    .replace("<Cotisation>", cotisation);

  Logger.log("Le mail va être envoyé à : " + emailadresse)
  Logger.log("Sujet du mail : " + subject)
  Logger.log("corps du mail : " + messagemail)
  MailApp.sendEmail(emailadresse, subject, messagemail);
}

C'est magique !

Merci beaucoup Pierre.

Bonjour @PierreLepinay, merci pour ta remarque "C'est le souci de l'IA, c'est une aide, ça ne résolue pas tout les problèmes" mais quand je prends un sujet je vais à tâtons un peu comme tu le fais pour au final trouver la solution.

Ne prends pas mal ma petite remarque surtout ! je me sers quotidiennement d'outils basés sur de l'IA, toutefois, en effet on ne peut pas simplement (à ce jour du moins) écrire une problématique et que l'IA nous ponde une solution parfaite.

Pour ce cas, l'IA a fait une absurdité afin de "rentrer" dans le cadre du prompt sans résoudre quoi que ce soit ici :

var n = feuille_1.getLastRow();
  var i = n; // Utilisez la dernière ligne comme point de départ

Et j'ai trouvé cela amusant, (ce pourquoi je t'ai fais un petit commentaire 😁)

Rechercher des sujets similaires à "envoi automatique mail derniere ligne sheet"