Google script "Envoie Mail Automatique après changement de valeur"

Bonjour,

Je n'ai jamais codé avec google script avant aujourd'hui et je n'ai malheureusement pas le temps dans mon travail pour m'y pencher sérieusement.
Je vous expose ma demande : J'ai un tableau contenant une liste de produit (Colonne A) qui sont sensés être préparés dés qu'ils sont prêts (Colonne B). Chaque produit est associé à un collaborateur et à son adresse mail (colonne C et D). Je souhaiterai qu'un email soit envoyé au collaborateur de la ligne concernée dés que la valeur de la colonne B passe à "YES". Ceci afin d'informer le collaborateur qu'il peut préparer le produit.
Vous trouverez mon tableau (très simple) via le lien suivant https://docs.google.com/spreadsheets/d/1MFqNeNkTsbSiNtU081IOBV5eg4AAZIaLaMIEAKUr_EE/edit#gid=0

Si une âme charitable voudrait bien m'aider je lui en serais très reconnaissant.

Excellente journée à vous

MF

Bonjour,

pas de soucis ... mais l'accès à ton document est refusé

pour partager ... https://www.sheets-pratique.com/fr/cours/partage

Oups, désolé. Je pense que je ne peux malheureusement pas partager ce fichier avec des gens extérieur à mon entreprise. Je met donc un exemple ci dessous.

IDReadycontact
E140BLO1YESadresse.mail1
E140POZ1YESadress.mail2
E140POZ1NOadress.mail3

Merci de votre aide

dommage, il y a toujours moyen via son compte perso de la faire

voici une proposition

function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  if (sh.getName() == 'mySheet') {
    var rng = e.source.getActiveRange()
    if (e.value) {
      MailApp.sendEmail({
        to: rng.offset(0, 1).getValue(), subject: 'Article prêt', htmlBody: rng.offset(0, -1).getValue()
      })
    }
  }
}

basée sur une case à cocher en colonne B

il faut mettre un déclencheur sur la fonction onSpeEdit

Oula, serait il possible d'avoir une explication détaillée car je ne connais pas du tout ce langage :/ J'ai essayé de juste coller ce code dans la console de AppScript et j'ai mis un déclencheur, mais cela ne fonctionne pas comme je m'y attendais.

J'ai créé un fichier similaire via mon compte perso, mais beaucoup plus proche du fichier réel.

https://docs.google.com/spreadsheets/d/1IPWV_U2d9rB0er7-Bls4E9fPQme8-A1AlS3byvvvB6Y/edit?usp=sharing

ça sera peut être plus facile pour vous de m'aider avec ça.

Oui, c'est nettement plus facile

avec quelques explications

function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  // on teste le nom de la feuille et la colonne (6=F)
  if (sh.getName() == 'Tracking' && rng.getRow()==6) {
    // si la valeur est TRUE donc cochée
    if (e.value) {
      MailApp.sendEmail({
        // l'email est ...2 colonnes plus loin .............et l'article est ............. 5 colonnes avant
        to: rng.offset(0, 2).getValue(), subject: 'Article prêt', htmlBody: rng.offset(0, -5).getValue()
      })
    }
  }
}

Merci c'est plus clair comme ça.
Quand j'essaye d'exécuter ce code via l'éditeur, j'obtient l'erreur suivante : TypeError: Cannot read property 'source' of undefined

Savez vous à quoi cela peut correspondre ?

On y est presque, cela fonctionne mais en partie seulement.
En effet le mail ne s'envoie que lorsque la case est coché en ligne 5 et 9. Mais je reçoit toujours le même email (rng.offset(0, -5).getValue() renvoie toujours la même valeur).
Je suppose donc que la définition de rng ne se fait pas correctement dans la définition des variables.

Merci c'est plus clair comme ça.
Quand j'essaye d'exécuter ce code via l'éditeur, j'obtient l'erreur suivante : TypeError: Cannot read property 'source' of undefined

Savez vous à quoi cela peut correspondre ?

cette fonction ne s'exécute pas à partir de l'éditeur de script, elle s'exécute en automatique quand dans la colonne F tu coches une case

mais avant cela comme précisé plus haut il faut définir un déclencheur sur cette fonction

je reçoit toujours le même email (rng.offset(0, -5).getValue() renvoie toujours la même valeur).

curieux, je regarderai

désolé, erreur grossière, ce n'est pas getRow mais getColumn !!

function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  if (sh.getName() == 'Tracking' && rng.getColumn() == 6) {
    if (rng.getValue() == true) {
      MailApp.sendEmail({
        to: rng.offset(0, 2).getValue(), subject: 'Article prêt', htmlBody: rng.offset(0, -5).getValue()
      })
      Browser.msgBox('email envoyé !')
    }
  }
}

Merci beaucoup, cela fonctionne parfaitement maintenant.
Bonne continuation

Rechercher des sujets similaires à "google script envoie mail automatique changement valeur"