Envoyer un mail automatiquement

normalement d'après ton code, il y a bien les deux destinataires, colonnes T et U !

var destinataires = f.getRange('T' + ligne).getValue() + ',' + f.getRange('U' + ligne).getValue();

pour le jour c'est ok

pour l'heure essaye les 2 possibilités ... comment est introduite l'heure ? format 16:30 par exemple ?

bonjour

Bon beaucoup d’effort et de travail de ta part, mais ça ne fonctionne pas.
je comprendrait que tu laisses tombé, mais cette macro Mailcolléges n'en fait cas ça tette.

le code défois que

function Mailcolléges() {
  var f = SpreadsheetApp.getActive();
  var lastRow = f.getLastRow();
  var maintenant = new Date().getTime();
  var debut = new Date(maintenant + 86400000);
  var fin = new Date(maintenant + 2 * 86400000); 
  for (var ligne = 2 ; ligne <= lastRow ; ligne++){
    if (f.getRange('J' + ligne).getValue() >= debut && f.getRange('J' + ligne).getValue() < fin){
      var destinataires = f.getRange('U' + ligne).getValue() + ',' + f.getRange('V' + ligne).getValue();
      var objet = "Visite de votre collège1";
      var quand = Utilities.formatDate(f.getRange('J' + ligne).getValue(), "GMT+1", "dd/MM/yyyy");
      var texte = f.getRange('G' + ligne).getValue() + " et " + f.getRange('H' + ligne).getValue() + " passeront le " + quand + " à " + f.getRange('K' + ligne).getValue() + " à " + f.getRange('Q' + ligne).getValue() + " au collège " + f.getRange('R' + ligne).getValue() + f.getRange('AA' + ligne).getValue() +" (plus texte de la raison du passage) ";
      //Browser.msgBox(texte);
      MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});
    }
  }
}

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('G1').activate();
};

function myFunction1() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('J135').activate();
};

Peux-tu m redonner une copie du fichier en ligne (même en mp) que je regarde, à mon avis il n doit pas y avoir grand chose car j'avais test.

peux-tu effacer ton lien car il y a des infos confidentielles !

je vais me faire une copie et mettre des donnes anonymises

il n'y a pas de problème j'ai confiance.

As-tu bien relié ta macro au fichier ? il faut voir à partir du fichier en faisant Outils > Macros ; si tu ne la vois pas, il faut faire importer et accorder les autorisations.

Ensuite, si je mets une date du 28 cela envoie bien un mail ! donc cela fonctionne correctement ! Envoi entre 1 et 2 jours avant la date.

Et si tu as changé le nom de la fonction, il faut probablement refaire le déclencheur.

Revois ce que j'ai indiqué ici https://forum.excel-pratique.com/sheets/envoyer-un-mail-automatiquement-148989#p919640

Et STP ne mets plus "ça ne marche pas" ! cela fonctionne ...

Pour ajouter l'heure dans le texte du mail, hé bien c'est super compliqué !! En fait non, mais crée une zone où tu auras date et heure

par exemple pour date en A3 et heure:minutes en B3

=A3+hour(B3)/24+minute(B3)/24/60

et ensuite tu peux faire

Utilities.formatDate(new Date(r.getValue()), "GMT+1", "hh:mm")

ou pour avoir les 2

var d = Utilities.formatDate(new Date(r.getValue()), "GMT+1", "dd/MM/yyyy à hh:mm")

r étant la range

Bonjour

Pour le format date + heure, j'y avais pensé, mais je n'aurais pas su comment rajouter ça dans le code.
pour les deux mails, mais peut être que c'est du au faite que le l'un des mail soit celui de mon compte.

merci

Quand tu seras au point des différentes colonnes, redonne moi l'accès je modifierai le programme.

Merci d'arrêter les mp et repasser sur le forum, cela doit profiter à tout le monde.

Bonjour

je transfère ce que j'ai mis en MP.

comme ça?

function Mailcolléges() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var f = doc.getSheetByName('Organisation tournée collège');
  var lastRow = f.getLastRow();
   //Browser.msgBox(texte);
 MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});
  var maintenant = new Date().getTime();
  var debut = new Date(maintenant + 86400000);
  var fin = new Date(maintenant + 2 * 86400000); 
  for (var ligne = 2 ; ligne <= lastRow ; ligne++){
    if (f.getRange('J' + ligne).getValue() >= debut && f.getRange('J' + ligne).getValue() < fin){
      var destinataires = f.getRange('U' + ligne).getValue() + ',' + f.getRange('V' + ligne).getValue();
      var objet = "Visite de votre collège1";
      var quand = Utilities.formatDate(f.getRange('J' + ligne).getValue(), "GMT+1", "dd/MM/yyyy");
      var heure = Utilities.formatDate(f.getRange('K' + ligne).getValue(), "GMT+1", "hh:mm");
      var texte = f.getRange('G' + ligne).getValue() + " et " + f.getRange('H' + ligne).getValue() + " passeront le " + quand + " à " + heure + " à " + f.getRange('Q' + ligne).getValue() + " au collège " + f.getRange('R' + ligne).getValue() + f.getRange('AA' + ligne).getValue() +" (plus texte de la raison du passage) ";
      Browser.msgBox(texte);
      //MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});
    }
  }
}

j'obtiens ça

image

Quand je disais :

une fois au point, remplace

Browser.msgBox(texte);

//MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});

par

//Browser.msgBox(texte);

MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});

//permet de passer l'instruction en commentaire dans la macro

c'est REMPLACER et non AJOUTER, donc à la fin du script

je reçois le message au deux mails.

tous est parfait en MP je te m’aie le message reçu.

pour faire varier le délais d'envois du mail dois je modifier

image

merci

surtout pas var ligne = 2 .......................

cette instruction balaye ton fichier de la ligne 2 jusqu'à la dernière

.

il faut jouer sur var debut et var fin, sachant que 86400000 c'est une journée en millisecondes !

donc si

image

si au lieux de 3 jours il faut envoyer le message 5 jours avant je dois remplacer cette valeur par 432000000 ?

oui, ou bien tu mets 5 * 86400000

évidant

merci

Bonjour

miséré

Je ne comprends pas, or que tous fonctionnais, après un essai hier voilà ce message d’erreurs qui apparait.

image
function Mailcolléges() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var f = doc.getSheetByName('Organisation tournée collège');
  var lastRow = f.getLastRow();
  var maintenant = new Date().getTime();
  var debut = new Date(maintenant + 86400000);
  var fin = new Date(maintenant + 2 * 86400000); 
  for (var ligne = 2 ; ligne <= lastRow ; ligne++){
    if (f.getRange('J' + ligne).getValue() >= debut && f.getRange('J' + ligne).getValue() < fin){
      var destinataires = f.getRange('U' + ligne).getValue() + ',' + f.getRange('V' + ligne).getValue();
      var objet = "Visite de votre collège";
      var quand = Utilities.formatDate(f.getRange('J' + ligne).getValue(), "GMT+1", "dd/MM/yyyy");
      var heure = Utilities.formatDate(f.getRange('K' + ligne).getValue(), "GMT+1", "hh:mm");
      var texte = f.getRange('G' + ligne).getValue() + " et " + f.getRange('H' + ligne).getValue() + " passeront le " + quand + " à partir de heures 7 heures " + heure + " à " + f.getRange('Q' + ligne).getValue() + " au collège " + f.getRange('R' + ligne).getValue() + f.getRange('AA' + ligne).getValue() +" (plus texte de la raison du passage) ";
      MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});
    }
  }
}

Bonjour,

comme cela, sans lien vers un fichier, difficile de procéder à un troubleshooting

mais avec un peu de méthode, tu dois pouvoir y arriver

  • essaie de trouver quel terme bloque dans la fonction MailApp.sendEmail({to: destinataires, subject: objet, htmlBody: texte});
  • en remplaçant chaque terme chacun son tour par un texte directement, par exemple to:"moi@gmail.com"
  • essaie aussi avec un seul destinataire, mets ; au lieu de , entre destinataires
  • etc.
  • et ensuite corrige là où il y a un soucis
Rechercher des sujets similaires à "envoyer mail automatiquement"