Cours Apps Script : les déclencheurs

Les déclencheurs permettent d'exécuter des instructions lorsqu'un événement se produit.

Les 2 principaux déclencheurs sont onEdit (après la modification d'une valeur) et onOpen (à l'ouverture du document).


onEdit

Pour utiliser ce déclencheur, c'est assez simple, il vous suffit de nommer une fonction onEdit et d'y ajouter les instructions à exécuter. Cette fonction sera alors exécutée à chaque modification de la valeur d'une cellule.

En voici un exemple avec une cellule qui doit contenir une valeur en majuscules (même si l'utilisateur l'entre en minuscules).

Commencez par entrer la fonction en y ajoutant un argument e qui contiendra des informations liées à l'événement qui a déclenché l'exécution de la fonction :

function onEdit(e) {

}

Dans ce cas, la valeur à convertir en majuscules est celle de la cellule B2, nous allons donc vérifier si la cellule modifiée par l'utilisateur est B2 :

function onEdit(e) {

  const celluleModifiee = e.range;

  // Si la cellule B2
  if (celluleModifiee.getA1Notation() == 'B2') {

  }
}

Et la convertir en majuscules si c'est le cas :

function onEdit(e) {

  const celluleModifiee = e.range;

  // Si la cellule B2
  if (celluleModifiee.getA1Notation() == 'B2') {

    // Convertir en majuscules
    celluleModifiee.setValue(celluleModifiee.getValue().toUpperCase());
  }
}
Pour tester la fonction de cet exemple, commencez par enregistrer les modifications puis faites le test en modifiant directement la cellule B2. N'essayez pas de le faire depuis l'éditeur car cela ne pourra pas fonctionner (l'argument e n'est pas renseigné dans le cas d'une exécution depuis l'éditeur).

onOpen

Pour utiliser ce déclencheur, c'est le même principe, nommez une fonction onOpen et ajoutez-y les instructions à exécuter. Cette fonction sera alors exécutée à l'ouverture du document.

Ce déclencheur est très utile notamment pour ajouter un menu personnalisé à l'ouverture du document. Mais puisque nous n'avons pas encore vu les menus, voici un exemple différent où l'objectif est de créer un compteur dans la cellule C1 de la feuille 1 qui s'incrémente de 1 à chaque ouverture :

function onOpen(e) {

  const celluleC1 = e.source.getSheetByName('Feuille 1').getRange('C1');

  // Augmentation de la valeur de C1 de 1
  celluleC1.setValue(celluleC1.getValue() + 1);
}

Ou une autre version sans utiliser l'argument e (qui peut être testée depuis l'éditeur) :

function onOpen() {

  const celluleC1 = SpreadsheetApp.getActive().getSheetByName('Feuille 1').getRange('C1');

  // Augmentation de la valeur de C1 de 1
  celluleC1.setValue(celluleC1.getValue() + 1);
}