Ajouter une ligne automatiquement dans Google Sheets avec Apps Script + Remplir avec des valeur d'en-tête



📌 Ajouter une ligne automatiquement dans Google Sheets avec Apps Script sans copie des formules + Remplir avec des valeur d'en-tête

🧩 Objectif du script

Ce script sert à ajouter une ligne dans un tableau (à partir de la ligne 10) dans la feuille nommée "Liste ECOLE". Il remplit cette ligne avec des données saisies dans certaines cellules (par exemple G2, J3, etc.).

L’idée est d’écrire seulement dans les colonnes dont le nom est dans la ligne 10, sans toucher aux autres.


💡 Où se trouvent les informations à remplir ?

DonnéeSaisie manuelle dans…Destination
NomG3Colonne "Nom"
ICEG4Colonne "ICE"
AdresseJ3Colonne "Adresse"

📜 Explication du code

javascript
function Ajouter_Client() {

On commence une fonction nommée Ajouter_Client.


javascript
const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("Liste ECOLE");

On récupère le fichier actif et la feuille "Liste ECOLE".


javascript
const headers = sheet.getRange(10, 1, 1, sheet.getLastColumn()).getValues()[0];

On lit la ligne 10, qui contient les noms des colonnes (par exemple : "Nom", "ICE", etc.).


javascript
const data = sheet.getDataRange().getValues(); let lastRow = data.length; while (lastRow > 2 && data[lastRow - 1].join("") === "") { lastRow--; } const newRow = lastRow + 1;

On cherche la première ligne vide après les données, pour savoir où insérer la nouvelle ligne.


javascript
const fixedPairs = [ ["G2", "Nom Facture"], ["G3", "Nom"], ["G4", "ICE"], ["G5", "Ville"], ["G6", "Responsable"], ["G7", "Interlocuteur"], ["G8", "N° ligne (G.sheet)"], ["J2", "Client/prospect"], ["J3", "Adresse"], ["J4", "FAMILLE"], ["J5", "ID SMS"], ["J6", "N°TEL"], ["J7", "EMAIL"] ];

On définit une liste de cellules de saisie (G2, G3, etc.) et leur colonne correspondante dans la ligne 10.


javascript
for (let [cellRef, colName] of fixedPairs) { const value = sheet.getRange(cellRef).getValue(); const colIndex = headers.indexOf(colName); if (value !== "" && colIndex !== -1) { sheet.getRange(newRow, colIndex + 1).setValue(value); } }

On parcourt chaque paire. Si la cellule contient une valeur, on la met dans la bonne colonne de la nouvelle ligne.


🔁 Colonnes dynamiques

Parfois, tu veux remplir une colonne dont le nom change. Par exemple, dans I8 tu écris "Activité" et dans J8 la valeur "Sport".

javascript
const dyn1 = sheet.getRange("I8").getValue(); const val1 = sheet.getRange("J8").getValue();

On lit le nom de la colonne (I8) et sa valeur (J8).

javascript
if (dyn1 && val1) { const colIndex = headers.indexOf(dyn1); if (colIndex !== -1) { sheet.getRange(newRow, colIndex + 1).setValue(val1); } }

Si les deux sont remplis, on met la valeur dans la bonne colonne.


🔁 Boucles dynamiques (plusieurs lignes)

Par exemple :
K2:K8 contient les noms des colonnes,
L2:L8 contient les valeurs à y insérer.

On fait pareil pour :

  • K2:L8

  • M2:N8

  • O2:P4

javascript
const blocks = [ { keys: "K", values: "L", from: 2, to: 8 },// K2 à K8 + L2 à L8 { keys: "M", values: "N", from: 2, to: 8 },// M2 à M8 + N2 à N8 { keys: "O", values: "P", from: 2, to: 8 }// O2 à O8 + P2 à P8 ];
javascript
for (let block of blocks) { for (let i = block.from; i <= block.to; i++) { const colName = sheet.getRange(block.keys + i).getValue(); const value = sheet.getRange(block.values + i).getValue(); if (colName && value) { const colIndex = headers.indexOf(colName); if (colIndex !== -1) { sheet.getRange(newRow, colIndex + 1).setValue(value); } } } }

👉 Cela permet d’insérer plusieurs informations dans des colonnes choisies au moment de l’écriture.

 Boucle principale

javascript

for (let block of blocks) {
  • Tu parcours chaque objet (block) de ton tableau blocks.

  • À chaque itération, block contiendra par exemple :

    js

    { labelCol: "K", valueCol: "L", from: 2, to: 8 }

🔁 Deuxième boucle : sur les lignes de chaque bloc

javascript

for (let i = block.from; i <= block.to; i++) {
  • Tu fais une boucle de i = 2 à 8 (ou autre, selon les propriétés from et to de ce bloc).

  • Cela te permet de parcourir toutes les lignes d’un bloc, comme K2, K3, ..., K8.


🔤 Lecture du nom de colonne cible

javascript

const colName = sheet.getRange(block.labelCol + i).getValue();
  • Par exemple, si block.labelCol = "K" et i = 2, tu lis la cellule K2.

  • Elle contient le nom dynamique de la colonne vers laquelle tu veux écrire la valeur.


📤 Appel d'une fonction pour remplir la cellule

javascript

remplirCellule(block.valueCol + i, colName);
  • Tu appelles une fonction personnalisée remplirCellule() :

    • 1er argument : l’adresse de la cellule contenant la valeur à écrire (ex: L2).

    • 2e argument : le nom de colonne cible, obtenu juste avant (ex: "ICE", "Ville", etc.).


💡 À quoi ça sert exactement ?

Ce code sert à faire un remplissage dynamique d’un tableau dans une autre feuille :

  • L'utilisateur peut taper dans K2:K8, M2:M8, etc., le nom exact d'une colonne du tableau cible.

  • Dans L2:L8, N2:N8, etc., il entre la valeur à enregistrer.

  • Le script se charge automatiquement de retrouver la colonne correspondante et d’y placer la valeur, sans avoir à coder chaque nom de colonne manuellement.


✅ Message final

javascript
SpreadsheetApp.getUi().alert("Client ajouté avec succès !"); }

Une boîte de dialogue confirme que l’ajout a bien été fait.


🔘 Bonus : Ajouter un bouton

Tu peux insérer un bouton dans la feuille, et lui attribuer la fonction Ajouter_Client pour lancer le script en un clic !


✨ Résultat

Avec ce script, tu peux ajouter des clients, élèves ou données à ton tableau Google Sheets en un clic, sans te tromper de colonne.

Commentaires

Posts les plus consultés de ce blog

🛠 Utilisation de CustomUIEditor pour Personnaliser le Ruban Excel

🗓️ Simulateur de Congés et Calendrier Collaboratif sous Google Sheets

Explication VBA : Facturation automatique Gestion client