Notification lors de la modifications d'une cellule dans une plage

Bonjour Steelson

sinon, ce serait plus facile de poursuivre avec un fichier si nécessaire

tu veux dire une capture d'écran pour voir à quoi ressemble le fichier ou un accès au fichier en question ??

avec un accès à un fichier témoin simplifié, pas forcément ton fichier complet

ok j'essaie de voir ça.

merci Steelson

voici le lien:

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

J'ai essayé ce script mais il ne veut pas l'enregistrer du fait d'une erreur sur la ligne 14 "If"

function envoyer() {
  var document = SpreadsheetApp.getActive();
  var f = document.getSheetByName('RE7');
  var derL = f.getLastRow();
  var c = 8; // H
  for (var i = 2; i <= derL; i++){
    if ( (f.getRange(i,c).getValue() != '') && (f.getRange(i,c+1).getValue() == '') ) {
      //Browser.msgBox(f.getRange(i,c).getValue());
      GmailApp.sendEmail('email@gmail.com', 'Réception d\'un nouveau commentaire dans RE7', 'Voici le commentaire saisi: «' + f.getRange(i,c).getValue()) + '».';
      f.getRange(i,c+1).setValue('notification envoyée');

    var r = 10;//K
      r = ((f.getRange(i,4).getValue()+f.getRange(i,5).getValue()+f.getRange(i,6).getValue())/f.getRange(i,3).getValue()  
    if (f.getRange(i,3).getValue()>=40) and (f.getRange(i,10).getValue()>0.1));{
      //Browser.msgBox(f.getRange(i,r).getValue());
      GmailApp.sendEmail('email@gmail.com', 'pourcentage dans RE7', 'Voici le pourcentage: «' + f.getRange(i,r).getValue()) + '».';
      f.getRange(i,c+3).setValue('Alerte envoyée');
      }
     } 
    }
  ;

il y avait plusieurs choses (j'ai corrigé la syntaxe mais je n'ai pas testé)

  • manque ) final ligne r = __________
  • manque } final
  • et la ligne if
  • and s'écrit && un } parasite , plus d'autres bricoles je pense ...
function envoyer() {
  var document = SpreadsheetApp.getActive();
  var f = document.getSheetByName('RE7');
  var derL = f.getLastRow();
  var c = 8; // H
  for (var i = 2; i <= derL; i++){
    if ( (f.getRange(i,c).getValue() != '') && (f.getRange(i,c+1).getValue() == '') ) {
      //Browser.msgBox(f.getRange(i,c).getValue());
      GmailApp.sendEmail('email@gmail.com', 'Réception d\'un nouveau commentaire dans RE7', 'Voici le commentaire saisi: «' + f.getRange(i,c).getValue()) + '».';
      f.getRange(i,c+1).setValue('notification envoyée');

      var r = 10;//K
      r = ((f.getRange(i,4).getValue() + f.getRange(i,5).getValue() + f.getRange(i,6).getValue())/f.getRange(i,3).getValue())

      if ( (f.getRange(i,3).getValue() >= 40) && (f.getRange(i,10).getValue() > 0,1) ) {
        //Browser.msgBox(f.getRange(i,r).getValue());
        GmailApp.sendEmail('email@gmail.com', 'pourcentage dans RE7', 'Voici le pourcentage: «' + f.getRange(i,r).getValue()) + '».';
        f.getRange(i,c+3).setValue('Alerte envoyée');
      }
    } 
  }
}

Bonjour Steelson,

donc j'ai essayé le script, le résultat ne s'inscrit pas dans la colonne "K" et je n'ai pas d'alerte envoyée suite aux résultat et ce malgré que je dépasse la quantité de 40 et les 10% comme prévu dans le code

if ( (f.getRange(i,3).getValue() >= 40) && (f.getRange(i,10).getValue() > 0,1) ) {

je pense mais je peux me tromper que le problème vient du manque d'écriture de résultat dans la colonne "K" car pour envoyer l'alerte il faut que les 2 conditions soit remplies

var r = 10;//K
      r = ((f.getRange(i,4).getValue() + f.getRange(i,5).getValue() + f.getRange(i,6).getValue())/f.getRange(i,3).getValue())

Merci

Bonjour

ici cela fonctionnait https://forum.excel-pratique.com/sheets/notification-lors-de-la-modifications-d-une-cellule-dans-une...

peux-tu refaire la synthèse des demandes complémentaires ? je suis désolé, mais j'ai perdu le fil depuis 15 jours ...

Je ne vois pas dans ton code

if ( (f.getRange(i,3).getValue() >= 40) && (f.getRange(i,10).getValue() > 0,1) ) {

on ne doit pas parler de la même chose !

ou alors remets un lien vers un nouveau fichier si ce n'est plus le même qu'ici https://forum.excel-pratique.com/sheets/notification-lors-de-la-modifications-d-une-cellule-dans-une...

je n'ai pas changé de lien et je ne l'ai pas rompu.

peut être que tu ne vois pas le code car je fais d'autres essais... voici le code.

function envoyer() {
  var document = SpreadsheetApp.getActive();
  var f = document.getSheetByName('RE7');
  var derL = f.getLastRow();
  var c = 8; // H
  for (var i = 2; i <= derL; i++){
    if ( (f.getRange(i,c).getValue() != '') && (f.getRange(i,c+1).getValue() == '') ) {
      //Browser.msgBox(f.getRange(i,c).getValue());
      GmailApp.sendEmail('email@gmail.com', 'Réception d\'un nouveau commentaire dans RE7', 'Voici le commentaire saisi: «' + f.getRange(i,c).getValue()) + '».';
      f.getRange(i,c+1).setValue('notification envoyée');

      var val1 = f.getRange(i,4).getValue();
      var val2 = f.getRange(i,5).getValue();
      var val3 = f.getRange(i,6).getValue();
      var val4 = f.getRange(i,3).getValue();

      var calc = val1+val2+val3/val4;

    var resultat = sheet.getRange("pourcent"); 
    resultat.setValue(calc); 

      if ( (f.getRange(i,3).getValue() >= 40) && (f.getRange("pourcent").getValue() > 0,1) ) {
        //Browser.msgBox(f.getRange(i,r).getValue());
        GmailApp.sendEmail('email@gmail.com', 'pourcentage dans RE7', 'Voici le pourcentage: «' + f.getRange("pourcent").getValue()) + '».';
        f.getRange(i,c+3).setValue('Alerte envoyée');
      }
    } 
  }
}

peux-tu refaire la synthèse des demandes complémentaires ? je suis désolé, mais j'ai perdu le fil depuis 15 jours ...

je comprends donc...

l'idée était d'être averti par notification d'une modification de cellule mais dans 2 situations différente:

1 - être notifié lors d'un commentaire dans une cellule ( cette partie concerne le début du code jusqu'à la ligne 10 que tu as résolu)

2 - être notifié lorsque les réponses du formulaire (qui rempli la feuille) amène un pourcentage recherché... à savoir

Si la réponse en colonne "C" est supérieur ou égal à 40 et que le calcul des colonnes D+E+F/C est supérieur ou égal à 10% de la colonne "C" alors on envoie une autre notification.

Comme tu peux le voir j'ai essayé une autre approche pour inscrire le résultat de ce calcul dans une cellule nommé "pourcent" (J30) mais là non plus je n'y arrive pas.

est -ce que tu as accès au fichier avec le lien??

parce que je n'ai rien changé.

je n'avais pas vu le second script 'calcul.gs' !

1- Pourquoi

var resultat = sheet.getRange("pourcent"); 

sheet n'est pas défini nulle part

2- Pourquoi

f.getRange("pourcent").getValue()

pourcent est la zone J30 perdue au milieu de rien du tout !

une fois ces 2 points corrigés, je reçois bien des notifications ... à toi d'en faire le tri car j'en reçois plusieurs !

Bonjour Steelson,

1- Pourquoi

var resultat = sheet.getRange("pourcent");

sheet n'est pas défini nulle part

grrrr l'erreur de débutant

2- Pourquoi

f.getRange("pourcent").getValue()

pourcent est la zone J30 perdue au milieu de rien du tout !

c'était juste pour l'essai.

Le sujet est résolu et je t'en remercie Steelson !!!

Voici le code pour ceux que ça intéresse

function envoyer() {
  var document = SpreadsheetApp.getActive();
  var f = document.getSheetByName('RE7');
  var derL = f.getLastRow();
  var c = 8; // H
  for (var i = 2; i <= derL; i++){
    if ( (f.getRange(i,c).getValue() != '') && (f.getRange(i,c+1).getValue() == '') ) {
      //Browser.msgBox(f.getRange(i,c).getValue());
      GmailApp.sendEmail('email@gmail.com', 'Réception d\'un nouveau commentaire dans RE7', 'Voici le commentaire saisi: «' + f.getRange(i,c).getValue()) + '».';
      f.getRange(i,c+1).setValue('notification envoyée');

      var val1 = f.getRange(i,4).getValue();
      var val2 = f.getRange(i,5).getValue();
      var val3 = f.getRange(i,6).getValue();
      var val4 = f.getRange(i,3).getValue();

      var calc = (val1+val2+val3)/val4*100;

    var resultat = f.getRange("pourcent"); 
    resultat.setValue(calc); 

      if ( (f.getRange(i,3).getValue() >= 40) && (f.getRange("pourcent").getValue() > 0,1) ) {
        //Browser.msgBox(f.getRange(i,r).getValue());
        GmailApp.sendEmail('email@gmail.com', 'pourcentage dans RE7', 'Voici le pourcentage: «' + f.getRange("pourcent").getValue()) + '%».';
        f.getRange(i,c+3).setValue('Alerte envoyée');
      }
    } 
  }
}

C'est parfait ! je préférais t'indiquer les anomalies plutôt que la solution, c'est plus formateur.

je valide ta méthode!!

Merci encore !!

Rechercher des sujets similaires à "notification lors modifications plage"