Cours Apps Script : modifier les valeurs des cellules
Nous allons maintenant chercher à modifier le contenu d'une cellule ou d'une plage de cellules, suivi par 2 exemples pratiques simples (le compteur et l'ajout de données à la suite dans une autre feuille).
Modifier la valeur d'une cellule
La modification est très similaire à la récupération d'une valeur d'une cellule, car au lieu d'utiliser la méthode getValue, nous utiliserons ici setValue.
Dans cet exemple, le code entre la valeur "1234" dans la cellule A1 :
const feuille = SpreadsheetApp.getActiveSheet();
const cellule = feuille.getRange('A1');
cellule.setValue(1234); // Entre la valeur "1234" dans la cellule A1
Modifier les valeurs d'une plage de cellules
Pour modifier une plage entière, utilisez la méthode setValues (à laquelle vous devez fournir un tableau contenant un tableau par ligne, comme les données retournées par getValues).
Dans cet exemple, le code entre les valeurs 1 à 5 dans les cellules A1 à E1 :
const feuille = SpreadsheetApp.getActiveSheet();
const plage = feuille.getRange('A1:E1');
plage.setValues([[1, 2, 3, 4, 5]]); // Entre les valeurs 1 à 5 dans les cellules A1 à E1
Pour mieux visualiser la "grille", vous pouvez afficher le tableau comme ceci :
const feuille = SpreadsheetApp.getActiveSheet();
const plage = feuille.getRange('A1:E1');
const tableau = [
[1, 2, 3, 4, 5]
];
plage.setValues(tableau); // Entre les valeurs 1 à 5 dans les cellules A1 à E1
Un autre exemple pour modifier une plage de 2 colonnes et 5 lignes :
const feuille = SpreadsheetApp.getActiveSheet();
const plage = feuille.getRange('A1:B5');
const tableau = [
[1, 11],
[2, 22],
[3, 33],
[4, 44],
[5, 55]
];
plage.setValues(tableau); // Entre les valeurs dans les cellules A1 à B5
Pour obtenir :
Créer un compteur
L'objectif ici sera de créer un compteur en A2 :
Commencez par copier la fonction test et complétez-la (avant de passer à la solution un peu plus bas) :
- récupérez la valeur de la cellule A2
- modifiez la valeur de la cellule A2 par sa propre valeur + 1
- (facultatif) assignez la fonction test à une forme ou une image (comme au tout début de ce cours)
function test() {
const feuille = SpreadsheetApp.getActiveSheet();
// A compléter ...
}
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution commentée :
function test() {
// Feuille active
const feuille = SpreadsheetApp.getActiveSheet();
// Cellule A2
const celluleCompteur = feuille.getRange('A2');
// Valeur de la cellule A2 + 1
const compteur = celluleCompteur.getValue() + 1;
// Changement de la valeur de la cellule A2
celluleCompteur.setValue(compteur);
}
Ajouter une ligne à la suite
Pour ajouter une plage de cellules à la suite dans une autre feuille, il existe une méthode très pratique, appendRow.
Pour commencer voici un exemple simple qui insère un tableau à la suite de la feuille "Feuille 2" :
const feuille2 = SpreadsheetApp.getActive().getSheetByName('Feuille 2');
feuille2.appendRow(['Valeur 1', 'Valeur 2', 'Valeur 3']);
Complétez maintenant la fonction suivante pour qu'elle copie la ligne 1 de "Feuille 1" à la suite dans "Feuille 2" :
function test() {
const ss = SpreadsheetApp.getActive(); // Pour éviter d'exécuter "getActive()" à double
const feuille1 = ss.getSheetByName('Feuille 1');
const feuille2 = ss.getSheetByName('Feuille 2');
// A compléter ...
}
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
La solution commentée :
function test() {
const ss = SpreadsheetApp.getActive(); // Pour éviter d'exécuter "getActive()" à double
const feuille1 = ss.getSheetByName('Feuille 1');
const feuille2 = ss.getSheetByName('Feuille 2');
// Cellules de la ligne 1
const cellules = feuille1.getRange('1:1');
// Valeurs des cellules de la ligne 1
const tableau = cellules.getValues();
// Ligne 1 du tableau
const ligneTableau = tableau[0];
// Insertion des valeurs
feuille2.appendRow(ligneTableau);
}
Notez que vous n'avez pas forcément besoin de passer par toutes ces constantes, si vous vous sentez à l'aise, vous pouvez créer des versions plus courtes (bien qu'un peu moins "lisibles") :
function test() {
const ss = SpreadsheetApp.getActive(); // Pour éviter d'exécuter "getActive()" à double
const feuille1 = ss.getSheetByName('Feuille 1');
const feuille2 = ss.getSheetByName('Feuille 2');
// Copie les valeurs de la ligne 1 de "Feuille 1" à la suite dans "Feuille 2"
feuille2.appendRow(feuille1.getRange('1:1').getValues()[0]);
}