Function onEdit

Salut,

a force de fouiller sur le forum j'ai réussie a créer mon script que je veux a l'exception d'un item. Mon script *function sendEmail* fonctionne parfaitement, il va cherché les valeur etc etc.. mais la je veux le faire automatisé. quand il y a le mot *recu* dans la 4e colone, je veux que mon script ce déclenche auto. Je pensais avec la *function onEdit* sa pouvais fonctionné mais non.... ou c'est peut-être moi qui la mal formulé. voici a quoi j'en suis rendu

function onEdit(event){
  var Commande = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if ((cel.getColumn() == 4) && (cel.getValue()=='recu'));
}

function sendEmail() {

  //definir les variables

    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var Liste_commande =ss.getSheetByName('Commande');
    var Texte_mail =ss.getSheetByName('Message');
    var subject = Texte_mail.getRange(2,1).getValue();

    // retrouver la dernière ligne

    var n = Liste_commande.getLastRow();

    //------- la boucle ----------

    //le compteur

    for (var i = 2; i < n +1; i ++) {

      // les variables de la boucle

      var emailAdress = Texte_mail.getRange(2,4).getValue();
      var job=Liste_commande.getRange(i,1).getValue();
      var description=Liste_commande.getRange(i,3).getValue();
      var message = Texte_mail.getRange(2,2).getValue();

      // remplacer les mots clefs

      message = message.replace("<description>", description).replace("<job>", job);

      //envoyer les mails

      MailApp.sendEmail(emailAdress,subject,message);

    }
}

Bonjour,

oui la fonction onEdit peut le faire ... mais dans ce cas particulier, lorsque onEdit lance une action soumise à authentification de l'auteur il faut intaller la fonction par un déclencheur (trigger) https://developers.google.com/apps-script/guides/triggers

Restrictions

Because simple triggers fire automatically, without asking the user for authorization, they are subject to several restrictions:

They cannot access services that require authorization. For example, a simple trigger cannot send an email because the Gmail service requires authorization, but a simple trigger can translate a phrase with the Language service, which is anonymous.

il te faut donc définir un déclencheur sur la fonction onEdit

Par contre, ta fonction onEdit ne semble pas terminée ...

function onEdit(event){
  var Commande = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if ((cel.getColumn() == 4) && (cel.getValue()=='recu')); // que fait-on ???
}

c'est sa que je pensais aussi, je c'est juste pas comment la finaliser pour l'envoie de courriel

Mets un fichier anonymisé, cela nous aidera aussi.

function onEdit(event) {
  var Commande = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if ((cel.getColumn() == 4) && (cel.getValue() == 'recu')) {
    sendEmail(cel.getRow())
  };
}

function sendEmail(i) {

  //definir les variables

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var Liste_commande = ss.getSheetByName('Commande');
  var Texte_mail = ss.getSheetByName('Message');
  var subject = Texte_mail.getRange(2, 1).getValue();

  // retrouver la dernière ligne

  var emailAdress = Texte_mail.getRange(2, 4).getValue();
  var job = Liste_commande.getRange(i, 1).getValue();
  var description = Liste_commande.getRange(i, 3).getValue();
  var message = Texte_mail.getRange(2, 2).getValue();

  // remplacer les mots clefs

  message = message.replace("<description>", description).replace("<job>", job);

  //envoyer les mails

  MailApp.sendEmail(emailAdress, subject, message);

}

n'oublie pas le déclencheur

capture d ecran 1253

woow génial sa fonctionne

merci beaucoup! il me reste juste a l'essayer sur ma bonne feuille sheets et je te redonne des nouvelles

sa fonctionne a l'exception une chose. comment je vais pour modifier le script pour qu'il soit associer a une ligne seulement. (voir photo) comme la si je sélection *RECU* dans colonne K ligne 7, je reçois un email avec ce que je veux de cette ligne. mais si je vais dans colonne K mais la ligne 8 et que je sélection *RECU* j'ai les donné de la ligne 7 que je reçois

tableau

par email. probablement qu'il faudra que chaque ligne a son script mais comment je vais pour l'adapté a elle même seulement.

après c'est tout , j'aurai probablement fini

merci encore mille fois

Dans la fonction donnée ci-dessus,

function onEdit(event) {
  var Commande = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if ((cel.getColumn() == 4) && (cel.getValue() == 'recu')) {
    sendEmail(cel.getRow())
  };
}

je transmets la valeur de la ligne concernée qui est cel.getRow(), donc il n'y a pas de problème pour moi, sinon donne le script que tu as adapté à ta feuille réelle

à moins que tu n'aies saisie 2 lignes en même temps par un copier/coller ?

voici mon sheets en pièce joint.

le bu es d'inscrire les donné dans la ligne 3, je clique sur ajouté, elle ce transmet a la ligne 7. et les donné qui étais a la ligne 7 défile a la ligne 8, la 8 ver le 9 etc etc.. je quoi que c'est la le problème ... le défilement ver le bas.

comme tu peux voir c'est dans la collone K qu'ont sélection *RECU*.

https://docs.google.com/spreadsheets/d/1hLYanuctJT5cMK2JHSeEYRzWPmJ8gqYAkarKeCcAihM/edit?usp=sharing

tu n'as pas tenu compte de mon script ici https://forum.excel-pratique.com/sheets/function-onedit-167344#p1036650

fais un copier/coller !

tu écris toujours

  var job = Liste_commande.getRange(7, 2).getValue();
  var description = Liste_commande.getRange(7, 5).getValue();

alors que j'ai mis

  var job = Liste_commande.getRange(i, 1).getValue();
  var description = Liste_commande.getRange(i, 3).getValue();

oui j'vais faite un copier collé, mais j'ai adapté le scrips au dernier document. car le premier c'étais juste comme test.

la le script es bien:

function onEdit(event) {
  var commande = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if ((cel.getColumn() == 11) && (cel.getValue() == 'REÇU')) {
    sendEmail(cel.getRow())
  };
}

function sendEmail(i) {

  //definir les variables

    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var Liste_commande =ss.getSheetByName('commande');
    var Texte_mail =ss.getSheetByName('Message');
    var subject = Texte_mail.getRange(2,1).getValue();

    // retrouver la dernière ligne

      var emailAdress = Texte_mail.getRange(2,4).getValue();
      var job=Liste_commande.getRange(7,2).getValue();
      var description=Liste_commande.getRange(7,5).getValue();
      var message = Texte_mail.getRange(2,2).getValue();

      // remplacer les mots clefs

      message = message.replace("<description>", description).replace("<job>", job);

      //envoyer les mails

      MailApp.sendEmail(emailAdress,subject,message);

}

avec les bonne info a var job ..... etc etc. 7, 2 es bon pour allé cherche les donné dans b7

var description... 7, 5 es bon pour allé cherché les donné dans e7

quand je clique sur *reçu* de la ligne 7, je reçois l'info comme je veux dans mon courriel. le seul problème c'est que quand je clique sur *reçu* d'un autre ligne, je reçois toujours les donnés de la ligne 7

je répète encore une fois, pourquoi tu mets 7 et non pas i

tu n'as pas tenu compte de mon script ici https://forum.excel-pratique.com/sheets/function-onedit-167344#p1036650

fais un copier/coller !

tu écris toujours

  var job = Liste_commande.getRange(7, 2).getValue();
  var description = Liste_commande.getRange(7, 5).getValue();

alors que j'ai mis

  var job = Liste_commande.getRange(i, 1).getValue();
  var description = Liste_commande.getRange(i, 3).getValue();
tableau

je mets 7 car je veux qu'il aille cherché les donnes de 7 b et 7 f.

si je mets i, 1 et l'autre i, 3 la je ne reçois vraiment pu rien dans mon courriel.

regarde sur mon image.

sa me donne l'impression qu'il faudrait modifier mon script où: if ((cel.getColumn() == 11) && (cel.getValue() == 'REÇU')) { car la peux importe la ligne que je sélection *recu* de la colonne K, je reçois toujours les donné de la ligne 7

ou lallala sur mon document *copie* que je tes envoyer, le déclencher étais pu la..

fonctionne nickel!!

mille fois merci et désoler te 'avoir obstiné.. je me n'avais pas rendu compte qu'il se s'avait pas copier et i, 1 devais être i, 2 et l'autre i, 5

ouf!

Rechercher des sujets similaires à "function onedit"