Envoi d'un mail si la valeur n'est pas compris dans un intervalle

Bonjour,

un peu difficile de reprendre un projet par épisode

mais a nouveau, la feuille est vide de données https://docs.google.com/spreadsheets/d/12qbYat7Te8tcNtp1RuXslvWTeemI03gq6yTGAqdzwzA/edit#gid=2385111...

or tu fais appel à cette feuille ...

var feuilleG = classeur.getSheetByName('CAPA');

Bonjour, oui je m'excuse du manque de réactivité de ma part. Quand vous dites que la feuille est vide c'est le manque d'information dans les cellules telles que relevé?

Si c'est le cas je viens de remplir.

J'ai modifié et testé (mais comme aucune valeur n'est hors tolérance, je n'ai rien eu, ce qui est normal à ce stade). Il faudrait essayer avec un jeu de données qui permettent de réellement tester.

On aurait pu faire plus court, mais je suis parti d ece qui avait été fait auparavant et modifié a minima.

function envoi() {
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var email = 'xxxxxxxxxxxxxxxxxxxxxx@gmail.com'
  var feuille = classeur.getSheetByName('CAPA');

  // partie Gauche ====================
  // boucle sur les lignes
  for (var i=8; i<=feuille.getLastRow(); i=i+20){
    var texte = ''
    // valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
    var pG = feuille.getRange('A'+i).getValue().substring(0,2)
    if (pG.split(' ')[1]=='Gauche'){
    var feuilleTolerances = classeur.getSheetByName('Capa '+pG)
    var limiteSupg = feuilleTolerances.getRange('H38').getValue()
    var limiteInfg = feuilleTolerances.getRange('H39').getValue()
    // chargement des données et boucle sur celles-ci
    var releve = feuille.getRange('D'+i+':Z'+i).getValues()
    for (var n=0;n<releve[0].length;n++){
      if ( releve[0][n]!='' && ( (releve[0][n]<limiteInfg) || (releve[0][n]>limiteSupg) ) ){
        texte += releve[0][n] +  '\n'
      }
    }}
    // envoi d'un mail par Px
    if (texte!='') {GmailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pG + '"\n' + texte)}
  }

  // partie Droite ====================
  // boucle sur les lignes
  for (var i=8; i<=feuille.getLastRow(); i=i+20){
    var texte = ''
    // valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
    var pD = feuille.getRange('A'+i).getValue().substring(0,2)
    if (pD.split(' ')[1]=='Droite'){
    var feuilleTolerances = classeur.getSheetByName('Capa '+pD)
    var limiteSupD = feuilleTolerances.getRange('I38').getValue()
    var limiteInfD = feuilleTolerances.getRange('I39').getValue()
    // chargement des données et boucle sur celles-ci
    var releve = feuille.getRange('D'+i+':Z'+i).getValues()
    for (var n=0;n<releve[0].length;n++){
      if ( releve[0][n]!='' && ( (releve[0][n]<limiteInfD) || (releve[0][n]>limiteSupD) ) ){
        texte += releve[0][n] +  '\n'
      }
    }}
    // envoi d'un mail par Px
    if (texte!='') {GmailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '"\n' + texte)}
  }
}

Je vous remercie le programme fonctionne.

Une dernière question s'il vous plait, j'aimerai augmenter le nombre de destinataire et j'ai pensé à ce script mais il ne fonctionne pas( du moins il n' y a qu'un destinataire qui reçois

function envoi() {
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var email ='**********b@gmail.com'
  var email2='********@gmail.com'
  var email3='*****@gmail.com'
  var feuille = classeur.getSheetByName('CAPA');

  // partie Gauche ====================
  // boucle sur les lignes
  for (var i=8; i<=feuille.getLastRow(); i=i+20){
    var texte = ''
    // valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
    var pG = feuille.getRange('A'+i).getValue().substring(0,2)
    if (pG.split(' ')[1]=='Gauche'){
    var feuilleTolerances = classeur.getSheetByName('Capa '+pG)
    var limiteSupg = feuilleTolerances.getRange('H38').getValue()
    var limiteInfg = feuilleTolerances.getRange('H39').getValue()
    // chargement des données et boucle sur celles-ci
    var releve = feuille.getRange('D'+i+':Z'+i).getValues()
    for (var n=0;n<releve[0].length;n++){
      if ( releve[0][n]!='' && ( (releve[0][n]<=limiteInfg) || (releve[0][n]>=limiteSupg) ) ){
        texte += releve[0][n] +  '\n'
      }
    }}
    // envoi d'un mail par Px
    if (texte!='') {GmailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pG + '"\n' + texte)}
  }

  // partie Droite ====================
  // boucle sur les lignes
  for (var i=8; i<=feuille.getLastRow(); i=i+20){
    var texte = ''
    // valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
    var pD = feuille.getRange('A'+i).getValue().substring(0,2)
    if (pD.split(' ')[1]=='Droite'){
    var feuilleTolerances = classeur.getSheetByName('Capa '+pD)
    var limiteSupD = feuilleTolerances.getRange('I38').getValue()
    var limiteInfD = feuilleTolerances.getRange('I39').getValue()
    // chargement des données et boucle sur celles-ci
    var releve = feuille.getRange('D'+i+':Z'+i).getValues()
    for (var n=0;n<releve[0].length;n++){
      if ( releve[0][n]!='' && ( (releve[0][n]<limiteInfD) || (releve[0][n]>limiteSupD) ) ){
        texte += releve[0][n] +  '\n'
      }
    }}
    // envoi d'un mail par Px
    if (texte!='') {GmailApp.sendEmail(email,email2,email3, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '"\n' + texte)}
  }
}

le mail et rien que l'objet du mail sans le corps du message).

Pouvez vous 'il vous plait ou se trouve le problème?

Voici mon script.

essaie de faire quelque chose comme ceci

if (texte!='') {
GmailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '"\n' + texte);
GmailApp.sendEmail(email2, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '"\n' + '');
GmailApp.sendEmail(email3, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '"\n' + '');
}

Merci. Et j'ai essayé avec ce script également, mais je n'arrive pas à mette plus d'un CC, je vais continuer à chercher. Sinon je prendrai ton script.

 var email = '*****@gmail.com';
  var options = {
      cc:'****@gmail.com',
    }
 if (texte!='') {MailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '" ' +  '\n' + texte, options)}
  }

Je vous remercie pour le temps passé à résoudre mon problème.

si tu mets un CC les destinataires en copie auront le texte !

si tu veux envoyer à plusieurs personnes, crée alors un email de ce type :

var emailTous = "xxxxxx@gmail.com, yyyyyyyyy@gmail.com"

les emails individuels étant séparés par une virgule (à vérifier)

Je vous remercie, c'est ce détail qui me manquait.

capture

Bonjour je reviens encore sur la même sujet. Le programme fonctionne super bien, le problème est que je reçois un nombre important de mail même quand la dernière valeur inscrite est dans l'intervalle.

J'essaie de trouver comment améliorer le programme pour que je reçoive un mail si et seulement si la dernière valeur valeur rentrée dans la ligne relevé est hors intervalle.

Je vous remet le lien du document https://docs.google.com/spreadsheets/d/12qbYat7Te8tcNtp1RuXslvWTeemI03gq6yTGAqdzwzA/edit?usp=sharing

En vous remerciant d'avance pour vos précieuses aides.

function onOpen(e){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('↓ Relance ↓')
  .addItem('Envois emails ↓', 'envoi')
  .addToUi();
}
function onEdit(event){
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName()=='CAPA'  && (cellule.getColumn()>=4 && cellule.getColumn()<=26)){
    var jour = feuille.getRange('D5:Z5').getDisplayValues()
    var heure = feuille.getRange('D6:Z6').getDisplayValues()

    var i=cellule.getRow()
    var email= '*********** '

    var p = feuille.getRange('A'+i).getValue()
    var feuilleTolerances = classeur.getSheetByName('Capa '+p)
    var limiteSup = feuilleTolerances.getRange('H38').getValue()
    var limiteInf = feuilleTolerances.getRange('H39').getValue()
    //Browser.msgBox(p + ' ' + limiteSup + ' ' + limiteInf)
    var texte = ''
    var releve = feuille.getRange('D'+i+':Z'+i).getValues()
    for (var n=0;n<releve[0].length;n++){
      if (releve[0][n]!='' && ((releve[0][n]<=limiteInf) || (releve[0][n]>=limiteSup) )) { 
        texte += releve[0][n] + ' le ' + jour[0][n] + ' à ' + heure[0][n] + '\n'
      }
    }
    //Browser.msgBox(texte)
   if (texte!='') {
GmailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + p + + '"\n' + texte)
}
  }
}
function envoi() {
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var feuille = classeur.getSheetByName('CAPA');

  // chargement des données calendaires et horaires
  var jour = feuille.getRange('D5:Z5').getDisplayValues()
  var heure = feuille.getRange('D6:Z6').getDisplayValues()

  // préparation du mail
  var email= '***** '
  // boucle sur les lignes
  for (var i=8; i<=feuille.getLastRow(); i=i+20){

    // valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
    var p = feuille.getRange('A'+i).getValue()
    var feuilleTolerances = classeur.getSheetByName('Capa '+p)
    var limiteSup = feuilleTolerances.getRange('H38').getValue()
    var limiteInf = feuilleTolerances.getRange('H39').getValue()

    //Logger.log(p)// + ' ' + limiteSupg + ' ' + limiteInfg + ' ' + limiteSupd + ' ' + limiteInfd)

    // préparation du mail
    var texte = ''

    // chargement des données et boucle sur celles-ci
    var releve = feuille.getRange('D'+i+':Z'+i).getValues()
    for (var n=0;n<releve[0].length;n++){
      if (releve[0][n]!='' && ( (releve[0][n]<=limiteInf) || (releve[0][n]>=limiteSup))){
        //Logger.log(releveG[0][n] + ' supG=' + limiteSupg + ' infG=' + limiteInfg + ' supD=' + limiteSupd + ' infD=' + limiteInfd)
        texte += releve[0][n] + ' le ' + jour[0][n] + ' à ' + heure[0][n] + '\n'
      }
    }

    // envoi d'un mail par Px
    if (texte!='') {GmailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + p + + '"\n' + texte)}
  }
}  

J'étais parti pour modifier ceci

if (feuille.getName()=='CAPA'  && (cellule.getColumn()>=4 && cellule.getColumn()<=26)){

mais le script que tu donnes n'est pas celui du fichier !

Je m'excuse pour ce désagrément. J'ai remis le bon script dans le fichier et normalement ca doit fonctionner.

Et j'ai également eu à modifier la partie dont vous parlez mais j'ai pas la solution voulue.

une façon assez simple de le faire :

if (feuille.getName()=='CAPA'&& cellule.getColumn()>=4 && cellule.getColumn()<=26 && cellule.offset(0,1)==''){

au lieu de

if (feuille.getName()=='CAPA'&& cellule.getColumn()>=4 && cellule.getColumn()<=26){

En essayant votre proposition, le programme ne fonctionne pas de mon coté. Pourquoi mettre une fonction décalage? J'ai pensé à une fonction qui réinitialise la valeur comprise dans l'intervalle qui vient d'être entrée dans relevé . Le mail sera envoyé seulement pour la valeur saisie hors intervalle.

Bonjour,

erreur probable de ma part :

cellule.offset(0,1).getValue()==''

au lieu de

cellule.offset(0,1)==''

De mon coté la modification n'a rien changé au programme.

je regarde

pourquoi 2 ?

cellule.offset(0,2).getValue()==''

pourquoi y a t'il des 1 dans la colonne Z, car pour moi c'est alors la dernière valeur !

comment améliorer le programme pour que je reçoive un mail si et seulement si la dernière valeur valeur rentrée dans la ligne relevé est hors intervalle.

C'était des essais pour voir si fonctionnait

1- Ta réponse m'interpelle ...

que je reçoive un mail si et seulement si la dernière valeur valeur rentrée dans la ligne relevé est hors intervalle.

s'agit-il de la valeur entrée en colonne Z ou la dernière valeur rentrée de la ligne ?

2- Tu as 2 scripts : un onEdit(event) qui se déclenche quand on entre une valeur manuellement, un envoi() qui est lancé en cliquant sur le menu. Les 2 me semblent redondants. Le quel utilises-tu ?

Regarde si la modif correspond ... et précise ta position sur les questions ci-dessus, surtout la seconde. Merci

Rechercher des sujets similaires à "envoi mail valeur pas compris intervalle"