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 :

cellules modifier

Créer un compteur

L'objectif ici sera de créer un compteur en A2 :

google apps script compteur modifier cellules

Commencez par copier la fonction test et complétez-la (avant de passer à la solution un peu plus bas) :

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]);
}