Envoi d'un mail si la valeur n'est pas compris dans un intervalle
Je cherche à être notifier par mail lorsqu'une valeur n'est pas l'intervalle. Chaque feuille à son intervalle. Merci pour le temps que vous passiez à m'aider.
est-ce que function onEdit(event)
est encore utile puisque tu as aussi function envoi()
je regarde la syntaxe dans onEdit ... quand tu écris
var feuilleG = event.source.getActiveSheet();
var feuilleD = event.source.getActiveSheet();
c'est donc la même feuille, pas besoin de donner 2 noms différents, à moins que tu ne veuilles affecter les feuilles = CAPA G et CPA D comme tu l'écris dans l'autre fonction ?
et du coup, ceci est la même chose, pG est égal à pD
var pG = feuilleG.getRange('A'+i).getValue()
var pD = feuilleD.getRange('A'+i).getValue()
ici, mets des parenthèses pour être sûr d'avoir le bon test
if ( (feuilleG.getName()=='CAPA G' || feuilleD.getName()=='CAPA G') && cellule.getColumn()==26)
bon, le mieux est de se focaliser sur une fonction d'abord, je vais prendre function envoi()
qui me semble plus logique et claire
- est-ce normal que pour tous les Px, I38 et I39 aient la même valeur ? du coup en effet tout doit être envoyé en email !
- cela dit, là encore, mets des parenthèses pour que le test soit sans ambiguité
if (releve[0][n]!='' && ((releve[0][n]<limiteInfg) || (releve[0][n]>limiteSupg) || (releve[0][n]<limiteInfd) || (releve[0][n]>limiteSupd)))
regarde déjà ces 2 points ...
La fonction OnEdit(event) je l'utilise pour activer un déclencheur. Normalement les valeurs de I38 et I39 ne sont pas les mêmes.( Je les ai modifiées pour voir si mon programme fonctionne).
Et en mettant les parenthèses comme vous me l'avez suggérer, dans les mails je reçois tous les valeurs même celles comprises dans l'intervalle.
je me prends une copie et je regarde ...
Attention, pour le moment je regarde la fonction envoi
(il faudra recopier alors une partie du code dans onedit
)
J'ai ceci en résultat et cela me semble conforme :
P1
0.8 supG=0.31666666666666676 infG=-1.4833333333333334 supD=0.33209999999999995 infD=-1.4679000000000002
P2
1.3 supG=1.1806666666666668 infG=0.18066666666666675 supD=0.6553333333333335 infD=0.15533333333333355
P3
2 supG=2.392 infG=0.7919999999999998 supD=1.4403333333333335 infD=0.6403333333333334
0.2 supG=2.392 infG=0.7919999999999998 supD=1.4403333333333335 infD=0.6403333333333334
2.4 supG=2.392 infG=0.7919999999999998 supD=1.4403333333333335 infD=0.6403333333333334
P4
0.3 supG=0.2973333333333334 infG=-0.9026666666666665 supD=-0.431 infD=-1.031
-0.3 supG=0.2973333333333334 infG=-0.9026666666666665 supD=-0.431 infD=-1.031
0.1 supG=0.2973333333333334 infG=-0.9026666666666665 supD=-0.431 infD=-1.031
P5
0.7 supG=0.5629 infG=-0.6371 supD=-0.11576666666666663 infD=-0.7157666666666667
0.2 supG=0.5629 infG=-0.6371 supD=-0.11576666666666663 infD=-0.7157666666666667
function envoi() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var feuilleG = classeur.getSheetByName('CAPA G');
var feuilleD = classeur.getSheetByName('CAPA D');
// chargement des données calendaires et horaires
// préparation du mail
var email = 'xxxxxxxxxxxxxxx@gmail.com'
// boucle sur les lignes
for (var i=8; i<=feuilleG.getLastRow(); i=i+20){
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
var pD = feuilleD.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa '+pG)
var limiteSupg = feuilleTolerances.getRange('H38').getValue()
var limiteInfg = feuilleTolerances.getRange('H39').getValue()
var limiteSupd = feuilleTolerances.getRange('I38').getValue()
var limiteInfd = feuilleTolerances.getRange('I39').getValue()
Logger.log(pG)// + ' ' + limiteSupg + ' ' + limiteInfg + ' ' + limiteSupd + ' ' + limiteInfd)
// préparation du mail
var texte = ''
// chargement des données et boucle sur celles-ci
var releve = feuilleG.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) || (releve[0][n]<limiteInfd) || (releve[0][n]>limiteSupd) )){
Logger.log(releve[0][n] + ' supG=' + limiteSupg + ' infG=' + limiteInfg + ' supD=' + limiteSupd + ' infD=' + limiteInfd)
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)}
}
}
Il prend en compte l'intervalle de la partie droite également tandis que je remplie que la partie Gauche. C'est ce qui me dérange .
Et merci de m'aider
Pour la partie gauche, et si j'ai bien compris ...
13:15:30 Infos P1
13:15:30 Infos 0.8 supG=0.31666666666666676 infG=-1.4833333333333334
13:15:30 Infos P2
13:15:30 Infos 1.3 supG=1.1806666666666668 infG=0.18066666666666675
13:15:31 Infos P3
13:15:31 Infos 0.2 supG=2.392 infG=0.7919999999999998
13:15:31 Infos 2.4 supG=2.392 infG=0.7919999999999998
13:15:31 Infos P4
13:15:31 Infos 0.3 supG=0.2973333333333334 infG=-0.9026666666666665
13:15:31 Infos P5
13:15:31 Infos 0.7 supG=0.5629 infG=-0.6371
function envoi() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var feuilleG = classeur.getSheetByName('CAPA G');
// préparation du mail
var email = 'xxxxxxxxxxxxxxx@gmail.com'
// boucle sur les lignes
for (var i=8; i<=feuilleG.getLastRow(); i=i+20){
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa '+pG)
var limiteSupg = feuilleTolerances.getRange('H38').getValue()
var limiteInfg = feuilleTolerances.getRange('H39').getValue()
Logger.log(pG)
// préparation du mail
var texte = ''
// chargement des données et boucle sur celles-ci
var releve = feuilleG.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) ) ){
Logger.log(releve[0][n] + ' supG=' + limiteSupg + ' infG=' + limiteInfg)
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)}
}
}
on peut ensuite dupliquer pour la droite
Le dupliquer dans la même fonction ou créer une nouvelle fonction svp si je veux que tout soit fait sur la même feuille?
Partie G et D dans la même fonction ...
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createMenu('↓ Relance ↓')
.addItem('Envois emails ↓', 'envoi')
.addToUi();
}
function envoi() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var email = 'xxxxxxxxxxxxxxx@gmail.com'
// partie Gauche ====================
var feuilleG = classeur.getSheetByName('CAPA G');
// boucle sur les lignes
for (var i=8; i<=feuilleG.getLastRow(); i=i+20){
var texte = ''
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
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 = feuilleG.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 ====================
var feuilleD = classeur.getSheetByName('CAPA D');
// boucle sur les lignes
for (var i=8; i<=feuilleD.getLastRow(); i=i+20){
var texte = ''
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pD = feuilleD.getRange('A'+i).getValue()
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 = feuilleD.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)}
}
}
à tester
Bonjour, je m'excuse pour le retard. Le programme fonctionne. Je vous remercie!
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 = feuilleG.getRange('D6:Z6').getDisplayValues()
var heure = feuilleG.getRange('D7:Z7').getDisplayValues()
var i=cellule.getRow()
var email = '***********'
// partie Gauche ====================
var feuilleG = classeur.getSheetByName('CAPA');
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa '+pG)
var limiteSupg = feuilleTolerances.getRange('I38').getValue()
var limiteInfg = feuilleTolerances.getRange('I39').getValue()
//Browser.msgBox(p + ' ' + limiteSup + ' ' + limiteInf)
var texte = ''
// chargement des données et boucle sur celles-ci
var releve = feuilleG.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] + ' 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 "' + pG + '"' + '\n' + texte)}
}
// partie Droite ====================
var feuilleD = classeur.getSheetByName('CAPA');
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pD = feuilleD.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa '+pD)
var limiteSupD = feuilleTolerances.getRange('H38').getValue()
var limiteInfD = feuilleTolerances.getRange('H39').getValue()
//Browser.msgBox(p + ' ' + limiteSup + ' ' + limiteInf)
var texte = ''
// chargement des données et boucle sur celles-ci
var releve = feuilleD.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] + ' 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 "' + pD + '"' + '\n' + texte)}
}
function envoi() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var email = '******'
// partie Gauche ====================
var feuilleG = classeur.getSheetByName('CAPA');
var jour = feuilleG.getRange('D6:Z6').getDisplayValues()
var heure = feuilleG.getRange('D7:Z7').getDisplayValues()
// boucle sur les lignes
for (var i=8; i<=feuilleG.getLastRow(); i=i+20){
var texte = ''
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
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 = feuilleG.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] + ' 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 "' + pG + '" ' + '\n' + texte)}
}
// partie Droite ====================
var feuilleD = classeur.getSheetByName('CAPA');
var jour = feuilleD.getRange('D6:Z6').getDisplayValues()
var heure = feuilleD.getRange('D7:Z7').getDisplayValues()
// boucle sur les lignes
for (var i=8; i<=feuilleD.getLastRow(); i=i+20){
var texte = ''
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pD = feuilleD.getRange('A'+i).getValue()
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 = feuilleD.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] + ' 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 "' + pD + '"' + '\n' + texte)}
}
}
J'ai essayé ce programme, la fonction envoi fonctionne mais la OnEdit non. (Ce programme c'est dans le cas ou la partie gauche et droite se trouve sur la même feuille CAPA)
Bonjour ...
est-ce que
function onEdit(event)
est encore utile puisque tu as aussifunction envoi()
bon, le mieux est de se focaliser sur une fonction d'abord, je vais prendre
function envoi()
qui me semble plus logique et claire
oui, en effet, c'est ce que j'avais dit : on regarde d'abord la fonction envoi, ensuite on pourra reprendre onEdit si c'est utile
je vais regarder dans la journée, mais je n'ai pas bien compris son utilité ... je pense qu'il faudrait plutôt faire une fonction envoiBis si la seule différence est que les parties droite et gauche se trouvent sur la même feuille
La fonction OnEdit me permet d'ajouter un déclencheur. Je vous remercie
On peut ajouter un déclencheur sur n'importe quelle fonction.
onEdit n'en a pas besoin "habituellement", et cette fonction a la particularité de s'activer dès qu'une cellule est modifiée manuellement. On y ajoute ici un déclencheur car elle envoie un email
Le fichier que j'ai en lien n'a pas d'onglet CAPA, pourrais-tu le rajouter tel que tu le vois ? https://docs.google.com/spreadsheets/d/12qbYat7Te8tcNtp1RuXslvWTeemI03gq6yTGAqdzwzA/edit#gid=4370661...
Ah j'avais pas compris merci pour l'explication. J'ai créé la feuille CAPA.
Merci
Bonjour,
je vois apparaître en fait des groupes de données Px Gauche et Px Droite !! j'en conclus que c'est donc quasiment la même chose que dans les onglets avec séparation des données.
il n'y a pas de données dans la feuille CAPA => difficile de faire des tests
Il y 'a des données qui existent sur la feuille CAPA, mais sauf que les feuilles Capa Px gauche et Capa Px droite n'existe pas. Je crois que je vais nommer juste dans le script Capa Px directement vu que dans certains classeurs il y 'en aura juste un mais en partie gauche et droite.
Merci.
function envoi() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var email = '*****************'
// partie Gauche ====================
var feuilleG = classeur.getSheetByName('CAPA');
// chargement des données calendaires et horaires
var jourG = feuilleG.getRange('D6:Z6').getDisplayValues()
var heureG = feuilleG.getRange('D7:Z7').getDisplayValues()
// boucle sur les lignes
for (var i=8; i<=feuilleG.getLastRow();i=i+20){
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa PX Gauche')
var limiteSupg = feuilleTolerances.getRange('H38').getValue()
var limiteInfg = feuilleTolerances.getRange('H39').getValue()
// chargement des données et boucle sur celles-ci
var texteG = ''
var releveG = feuilleG.getRange('D'+i+':Z'+i).getValues()
for (var n=0;n<releveG[0].length;n++){
if (releveG[0][n]!='' && ((releveG[0][n]<=limiteInfg) || (releveG[0][n]>=limiteSupg) )) {
texteG += releveG[0][n] + ' le ' + jourG[0][n] + ' à ' + heureG[0][n] + '\n'
}
}
// envoi d'un mail par Px
if (texte!='') {MailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pG +'" ' + '\n' + texteG)}
}
// partie Droite ====================
var feuilleD = classeur.getSheetByName('CDS');
// chargement des données calendaires et horaires
var jour = feuilleD.getRange('D6:Z6').getDisplayValues()
var heure = feuilleD.getRange('D7:Z7').getDisplayValues()
// boucle sur les lignes
for (var i=8; i<=feuilleD.getLastRow(); i=i+20){
var texte = ''
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pD = feuilleD.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa PX Droite')
var limiteSupD = feuilleTolerances.getRange('I38').getValue()
var limiteInfD = feuilleTolerances.getRange('I39').getValue()
// chargement des données et boucle sur celles-ci
var texte = ''
var releve = feuilleD.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] + ' le ' + jour[0][n] + ' à ' + heure[0][n] + '\n'
}
}
// envoi d'un mail par Px
if (texte!='') {MailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '" ' + '\n' + texte)}
}
}
J'ai essayé avec ce script en créant les feuilles Capa PX Gauche et Capa PX Droite mais je reçois des messages en plus. Pouvez vous m'aider s'il vous plait à ne recevoir que le nombre exacte de message? merci
function envoi() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var email = '*****************'
// partie Gauche ====================
var feuilleG = classeur.getSheetByName('CAPA');
// chargement des données calendaires et horaires
var jourG = feuilleG.getRange('D6:Z6').getDisplayValues()
var heureG = feuilleG.getRange('D7:Z7').getDisplayValues()
// boucle sur les lignes
for (var i=8; i<=feuilleG.getLastRow();i=i+20){
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pG = feuilleG.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa PX Gauche')
var limiteSupg = feuilleTolerances.getRange('H38').getValue()
var limiteInfg = feuilleTolerances.getRange('H39').getValue()
// chargement des données et boucle sur celles-ci
var texteG = ''
var releveG = feuilleG.getRange('D'+i+':Z'+i).getValues()
for (var n=0;n<releveG[0].length;n++){
if (releveG[0][n]!='' && ((releveG[0][n]<=limiteInfg) || (releveG[0][n]>=limiteSupg) )) {
texteG += releveG[0][n] + ' le ' + jourG[0][n] + ' à ' + heureG[0][n] + '\n'
}
}
// envoi d'un mail par Px
if (texte!='') {MailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pG +'" ' + '\n' + texteG)}
}
// partie Droite ====================
var feuilleD = classeur.getSheetByName('CAPA');
// chargement des données calendaires et horaires
var jour = feuilleD.getRange('D6:Z6').getDisplayValues()
var heure = feuilleD.getRange('D7:Z7').getDisplayValues()
// boucle sur les lignes
for (var i=8; i<=feuilleD.getLastRow(); i=i+20){
var texte = ''
// valeur de Px : P1,P2 ... Poids utiles pour aller chercher les limites
var pD = feuilleD.getRange('A'+i).getValue()
var feuilleTolerances = classeur.getSheetByName('Capa PX Droite')
var limiteSupD = feuilleTolerances.getRange('I38').getValue()
var limiteInfD = feuilleTolerances.getRange('I39').getValue()
// chargement des données et boucle sur celles-ci
var texte = ''
var releve = feuilleD.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] + ' le ' + jour[0][n] + ' à ' + heure[0][n] + '\n'
}
}
// envoi d'un mail par Px
if (texte!='') {MailApp.sendEmail(email, 'Message d\'alerte', 'Valeur hors limite de surveillance sur "' + pD + '" ' + '\n' + texte)}
}
}
'ai essayé avec ce script en créant les feuilles Capa PX Gauche et Capa PX Droite mais je reçois des messages en plus. Pouvez vous m'aider s'il vous plait à ne recevoir que le nombre exacte de message? merci