Google Apps Script : de zéro à un
Les formules vivent dans les cellules. Apps Script vit derrière la feuille de calcul — c'est du JavaScript capable de lire et d'écrire n'importe quelle cellule, de réagir aux modifications, et de s'exécuter selon un planning. Ce guide vous fait passer d'un script vide à trois automatisations fonctionnelles.
Ouvrir l'éditeur de script
Chaque feuille Google dispose d'un projet de script associé. Ouvrez-le via Extensions > Apps Script. Vous verrez un fichier nommé Code.gs (ou Code.js) avec une fonction myFunction vide — c'est un simple fichier JavaScript, exécuté sur les serveurs de Google plutôt que dans votre navigateur.
Votre premier script : lire et écrire des cellules
Tout dans Sheets se manipule via SpreadsheetApp. Remplacez la fonction par défaut par ceci :
function helloSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const cell = sheet.getRange("A1");
cell.setValue("Bonjour depuis Apps Script");
}
Enregistrez (Ctrl/Cmd + S), puis cliquez sur Exécuter. La première fois, Google vous demande d'autoriser le script — c'est normal, puisqu'il s'apprête à modifier votre feuille de calcul. Approuvez, et A1 affichera le texte. getRange accepte n'importe quelle référence au format A1 ("A1", "B2:D10", "A:A"), la même notation que celle déjà utilisée dans les formules.
Lire une plage et la parcourir
Les scripts deviennent utiles dès qu'ils traitent plus d'une cellule. Ceci lit une colonne de nombres et affiche le total :
function sumColumnA() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const values = sheet.getRange("A1:A10").getValues(); // retourne un tableau 2D
let total = 0;
for (const row of values) {
total += row[0]; // row[0] est la valeur de la colonne A sur cette ligne
}
Logger.log(total);
}
getValues() retourne toujours un tableau 2D — des lignes de colonnes — même pour une seule colonne, d'où la lecture row[0] dans la boucle. Ouvrez Affichage > Journaux après exécution pour voir le résultat. C'est le pattern derrière presque toutes les automatisations Apps Script : lire une plage dans un tableau, la transformer en JavaScript, puis la réécrire.
Écrire une fonction personnalisée (=VOTREFONCTION dans une cellule)
Une fonction devient utilisable dans une formule — comme =SUM() ou =XLOOKUP() — dès qu'elle prend des valeurs de cellules en argument et retourne une valeur :
/**
* Convertit un prix et un taux de taxe en total.
* @param {number} price Le prix de base.
* @param {number} rate Le taux de taxe, ex. 0.2 pour 20%.
* @return Le prix taxes comprises.
* @customfunction
*/
function PRIXAVECTAXE(price, rate) {
return price * (1 + rate);
}
C'est le tag @customfunction qui la fait apparaître comme une formule. Tapez =PRIXAVECTAXE(A2, 0.2) dans n'importe quelle cellule et elle fonctionne exactement comme une fonction native — recalculant automatiquement quand A2 change. C'est le moyen le plus rapide de combler un manque que la référence des fonctions ne couvre pas.
Automatiser avec des déclencheurs
Les scripts ci-dessus ne s'exécutent que si vous cliquez sur Exécuter. Un déclencheur (trigger) les exécute automatiquement. Les deux plus courants :
Basé sur le temps — s'exécute selon un planning (toutes les heures, chaque jour, chaque semaine), utile pour des rapports programmés :
function createDailyTrigger() {
ScriptApp.newTrigger("sendDailyReport")
.timeBased()
.everyDays(1)
.atHour(8)
.create();
}
Exécutez createDailyTrigger une seule fois — cela programme sendDailyReport (une fonction que vous écririez séparément) pour s'exécuter chaque jour à 8h, sans avoir besoin d'ouvrir la feuille.
Sur modification — s'exécute à chaque changement de cellule, utile pour la validation ou la mise en forme automatique. Cela utilise un nom de fonction spécial qu'Apps Script appelle automatiquement, sans configuration manuelle de déclencheur :
function onEdit(e) {
const range = e.range;
if (range.getColumn() === 2 && range.getValue() < 0) {
range.setBackground("#f8d7da"); // met en évidence les valeurs négatives en colonne B
}
}
e est l'événement de modification — e.range est la cellule modifiée, e.value sa nouvelle valeur. Cela s'exécute instantanément à chaque modification, ce qui en fait l'outil idéal pour de la validation légère — mais gardez-le rapide : une fonction onEdit lente rend la saisie dans la feuille pénible.
Une première automatisation concrète
Combinez les éléments ci-dessus en quelque chose d'utile : mettre en évidence toute ligne d'une feuille de budget dont le montant dépasse un seuil, à chaque modification.
function onEdit(e) {
const sheet = e.range.getSheet();
if (sheet.getName() !== "Budget") return;
const row = e.range.getRow();
const amount = sheet.getRange(row, 2).getValue(); // colonne B = montant
const rowRange = sheet.getRange(row, 1, 1, 3); // colonnes A:C pour cette ligne
if (amount > 500) {
rowRange.setBackground("#fff3cd");
} else {
rowRange.setBackground(null);
}
}
Collez ceci dans l'éditeur de script associé à votre feuille de budget, enregistrez, et modifiez un montant supérieur à 500 — la ligne se met en évidence automatiquement, sans mise en forme manuelle ni règle de mise en forme conditionnelle à maintenir.
Pour aller plus loin
- Parcourez la référence des fonctions avant d'écrire une fonction personnalisée — il y a de bonnes chances que le calcul dont vous avez besoin existe déjà en natif.
- Si vous découvrez les feuilles de calcul en général, commencez par Google Sheets de zéro à un — les formules sont la base sur laquelle Apps Script s'appuie.
SpreadsheetApp,ScriptAppet les autres services utilisés ci-dessus sont documentés dans la référence Apps Script de Google — à garder sous la main dès que vous commencez à écrire vos propres scripts.