Problème de résultat d'un calcul présent dans script google
Bonjour à tous,
Grâce à Steelson j'ai un script qui me permet d'être notifié lorsque le résultat d'un calcul atteint une valeur défini.
voici le code vu avec Steelson:
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');
}
}
}
}Le problème que je rencontre est que le résultat ne correspond pas du tout et donc j'ai des notifications tout le temps.
exemple lorsque je devais avoir le résultat attendu de 12, j'ai 333.
Pour 9 j'ai 63 et
Pour 6 j'ai 33.
A savoir que j'ai séparé le script fait par Steelson en 2 script car j'avais remarqué que la deuxième partie du script dépendait de la première et je voulais qu'il soit tout les 2 indépendant.
Voici comment j'ai adapté mon code pour mon fichier.
function envoyer() {
var document = SpreadsheetApp.getActive();
var f = document.getSheetByName('RE7');
var derL = f.getLastRow();
for (var i = 2; i <= derL; i++){
if ( (f.getRange(i,3).getValue() != '') && (f.getRange(i,42).getValue() == '') ) {
var val1 = f.getRange(i,13).getValue();
var val2 = f.getRange(i,15).getValue();
var val3 = f.getRange(i,16).getValue();
var val4 = f.getRange(i,17).getValue();
var val5 = f.getRange(i,19).getValue();
var val6 = f.getRange(i,20).getValue();
var val7 = f.getRange(i,21).getValue();
var val8 = f.getRange(i,22).getValue();
var val9 = f.getRange(i,24).getValue();
var val10 = f.getRange(i,25).getValue();
var val11 = f.getRange(i,26).getValue();
var val12 = f.getRange(i,27).getValue();
var val13 = f.getRange(i,31).getValue();
var val14 = f.getRange(i,39).getValue();
var val15 = f.getRange(i,11).getValue();
var calc = ((val1+val2+val3+val4+val5+val6+val7+val8+val9+val10+val11+val12+val13+val14)/val15)*100;
var resultat = f.getRange(i,43);
resultat.setValue(calc);
if ( (f.getRange(i,11).getValue() >= 40) && (f.getRange(i,43).getValue() > 10) ) {
//Browser.msgBox(f.getRange(i,r).getValue());
GmailApp.sendEmail('email@gmail.com', 'pourcentage dans RE7', 'Voici le pourcentage: «' + f.getRange(i,43).getValue()) + '%».';
f.getRange(i,42).setValue('Alerte envoyée');
}
}
}
}Merci d'avance pour l'aide
Bonjour,
Le problème que je rencontre est que le résultat ne correspond pas du tout et donc j'ai des notifications tout le temps.
exemple lorsque je devais avoir le résultat attendu de 12, j'ai 333.
Pour 9 j'ai 63 et
Pour 6 j'ai 33.
A savoir que j'ai séparé le script fait par Steelson en 2 script car j'avais remarqué que la deuxième partie du script dépendait de la première et je voulais qu'il soit tout les 2 indépendant.
Je me suis contenté d'aider à la mise en place du mail, pour le calcul, j'ai toujours été réservé sur l'emploi de la zone pourcent.
- Personnellement, je fais toujours les calculs dans la feuille que ce soit excel ou GSheets, d'autant qu'avec GSheets on peut formuler d'un seul coup toute une colonne avec
arrayformula: je te conseille cette solution - Maintenant pourquoi une valeur erronée en dépit d'un calcul apparemment correct : tu utilises la feuille pour stocker ta valeur en plein milieu d'un script et GSheets n'aime pas a priori, alors 2 solutions
- fais un
flush()dont le but(*) est de "Applies all pending Spreadsheet changes." https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app - ou mieux, conserve la valeur dans la variable calc et inclue celle-ci dans le mail sans stocker le résultat dans la feuille
- fais un
(*) ensure that the previous code's output and/or effects are written to the spreadsheet before continuing
Merci Steelson,
j'essaierai tes cconseils demain.
Bonsoir Steelson,
J'ai essayé la méthode ARRAYFORMULA et ça fonctionne parfaitement.
UN GRAND MERCI STEELSON