Google sheet _ Affichage valeur

Affichage valeur d'une plage a coté d'une plage active

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous et merci d'avance pour votre lecture,

voici mon souci sous google sheets: J'ai activé la notification d'emails à chaque modification apporté a une plage spécifique.(H2:H1000) la notification se fait correctement. J'aimerai maintenant que le contenu de la case à gauche de la cellule modifié puisse apparaître dans le mail envoyé.(F2:F1000)

Voici le script que j'utilise :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var email ="monemail@gmail.com";
var range = "H2:H1000";

function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();

  var Sousmenu = [];

   Sousmenu.push({name: "Notif cellule", functionName: "Message"});  

   ss.addMenu("Info Notif", Sousmenu);
 }

function Message() {
Browser.msgBox ('Cellule programmée : '+range +'.   Email programmé :' +email);
}

function Notification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var editRange = sheet.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var testrange = sheet.getRange(range);
  var testrange = sheet.getRange(range2);
  var rangeRowStart = testrange.getRow();
  var rangeRowEnd = rangeRowStart + testrange.getHeight()-1;
  var rangeColStart = testrange.getColumn();
  var rangeColEnd = rangeColStart + testrange.getWidth()-1;
  if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
      && editCol >= rangeColStart && editCol <= rangeColEnd)
  { 
  var objet = 'Modification de '+sheet.getName();
  var body = sheet.getName() + ' a été mis à jour . Suivre ' + ss.getUrl() + ' pour le numéro de série : «' + range + '». Validation: «' + editRange.getValue() + '».';
  MailApp.sendEmail(email, objet, body);
  }
}

Est ce que quelqu'un pourrait le modifier afin qu'à la ligne 'pour le numéro de série' (+range+) la valeur de la cellule (F2:F1000) s'affiche dans le mail au même titre que 'validation' ? Je précise que la seule cellule à modifier est dans le H2:H1000, la valeur est déjà inscrite dans F2:F1000.

Merci à vous

+0 -0
Auteur du sujet

hello,

Effectivement c'est difficile a mettre par écrit. Le code concerne bien la colonne H. chaque modification dans une cellule de cette colonne génère un mail vers une adresse spécifique avec la contenu de la cellule. Ce que je voudrais c'est que soit pris en compte le contenu de la cellule a gauche de la cellule modifiée.

J'ai été plus clair? lol

+0 -0
Staff

As-tu déjà programmé? Si oui, tu peux passer le paragraphe qui va suivre sinon, voilà le concept que je vais utiliser :

Tu te rends compte qu'à chaque fois tu veux "obtenir la valeur d'une cellule". Cette demande se pratique toujours de la même manière :

  • on prend une colonne,
  • on prend une ligne
  • on demande la valeur dans le range qui ne prend que la cellule.

Tout cela peut se mettre dans une simple fonction get_cell_value(col, row) :

1
2
3
4
5
6
function get_cell_value(sheet, col, row) {
  var cellAsRange = sheet.getRange(row, col);
  var valuesInArray = cellAsRange.getValues();
  return values[0][0];

}

Une fois que cette fonction existe, il suffit de lui demander, comme pour une fonction mathématique "donne moi le résultat quand je te donne tel, tel et tel paramètre". Par exemple, pour obtenir la valeur en A5, tu feras var valueA5 = get_cell_value(sheet, 5, 2);

Donc maintenant il faut utiliser ça dans notre script initial :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function get_cell_value(sheet, col, row) {
  var cellAsRange = sheet.getRange(row, col);
  var valuesInArray = cellAsRange.getValues();
  return values[0][0];

}
function Notification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var editRange = sheet.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var testrange = sheet.getRange(range);
  var rangeRowStart = testrange.getRow();
  var rangeRowEnd = rangeRowStart + testrange.getHeight()-1;
  var rangeColStart = testrange.getColumn();
  var rangeColEnd = rangeColStart + testrange.getWidth()-1;
  if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
      && editCol >= rangeColStart && editCol <= rangeColEnd)
  { 
  var valeurAGauche = get_cell_value(sheet, editCol - 1, editRow);
  var objet = 'Modification de '+sheet.getName();
  var body = sheet.getName() + ' a été mis à jour . Suivre ' + ss.getUrl() + ' pour le numéro de série : «' + range + '». Validation: «' + editRange.getValue() + '».' + "la valeur à gauche est " + valeurAGauche;
  MailApp.sendEmail(email, objet, body);
  }
}

Édité par artragis

+0 -0
Auteur du sujet

encore merci pour ta réponse et ton tps :)

alors non jamais programmé j'ai fait quelques recherches sur le net et trouvé ce script. si je me réfère a ce que tu me communiques ca me donne

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var email ="monemail@gmail.com";
var range = "H2:H1000";


function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();

  var Sousmenu = [];

   Sousmenu.push({name: "Notif cellule", functionName: "Message"});  

   ss.addMenu("Info Notif", Sousmenu);
 }

function Message() {
Browser.msgBox ('Cellule programmée : '+range +'.   Email programmé :' +email);
}

function get_cell_value(sheet, col, row) {
  var cellAsRange = sheet.getRange(row, col);
  var valuesInArray = cellAsRange.getValues();
  return values[0][0];

}
function Notification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var editRange = sheet.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var testrange = sheet.getRange(range);
  var rangeRowStart = testrange.getRow();
  var rangeRowEnd = rangeRowStart + testrange.getHeight()-1;
  var rangeColStart = testrange.getColumn();
  var rangeColEnd = rangeColStart + testrange.getWidth()-1;
  if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
      && editCol >= rangeColStart && editCol <= rangeColEnd)
  { 
  var valeurAGauche = get_cell_value(sheet, editCol -1, editRow);
  var objet = 'Modification de '+sheet.getName();
  var body = sheet.getName() + ' a été mis à jour . Suivre ' + ss.getUrl() + ' pour le numéro de série : «' + range + . Validation: «' + editRange.getValue() + .' + "la valeur à gauche est " + valeurAGauche;
  MailApp.sendEmail(email, objet, body);
  }
}

Mais ca me donne cette erreur : ReferenceError: L'élément "values" n'est pas défini. (ligne 22, fichier "Code")

Merci pour ton aide

Édité par wan2no

+0 -0
Auteur du sujet

Bon j'imagine que c'est rien pour toi vu la facilité avec laquelle tu as répondu lol mais franchement merci mec ! t une bete.

3 jours que je me farci du java alors que j'y connais rien. ma journée est terminée lol Merci encore à toi

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte