Google Sheets Google Apps Script




 

Copier dynamiquement la dernière ligne avec données et insérer une nouvelle ligne propre

function Copier_ligne()

function Copier_ligne() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getRange("E:E").getValues().filter(String).length; // dernière ligne non vide de la colonne E

  // Copier la ligne trouvée
  var sourceRange = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn());
  var targetRow = lastRow + 1;

  // Insérer une nouvelle ligne après la dernière ligne de données
  sheet.insertRowsAfter(lastRow, 1);

  // Coller la ligne copiée
  var targetRange = sheet.getRange(targetRow, 1);
  sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

  // Effacer les cellules spécifiques de la nouvelle ligne (ajuste selon tes besoins)
  var rangesToClear = [
    `E${targetRow}:S${targetRow}`,
    `V${targetRow}:X${targetRow}`,
    `AA${targetRow}:AB${targetRow}`,
    `AD${targetRow}:AF${targetRow}`,
    `AI${targetRow}:AM${targetRow}`,
    `AP${targetRow}:AU${targetRow}`,
    `AX${targetRow}:BE${targetRow}`,
    `BH${targetRow}:BI${targetRow}`,
    `BL${targetRow}`
  ];

  rangesToClear.forEach(function(range) {
    sheet.getRange(range).clear({contentsOnly: true, skipFilteredRows: true});
  });
}

✅ Ce que fait ce script :

  • lastRow : détecte la dernière ligne non vide dans la colonne E. 
  • insertRowsAfter(lastRow, 1) : insère une ligne juste après. 
  • copyTo(...) : copie la ligne entière.
  • clear(...) : nettoie les plages spécifiques de la nouvelle ligne.

✍️ Explication  :

Dans la gestion d’un tableau de paie ou tout autre registre structuré sur Google Sheets, on a souvent besoin de :

  1. Copier la dernière ligne remplie (par exemple une ligne de saisie complète de salarié),

  2. Ajouter automatiquement une nouvelle ligne juste en dessous,

  3. Coller la ligne copiée (pour garder les formules ou mises en forme),

  4. Effacer certains champs spécifiques pour que la nouvelle ligne soit prête à remplir.

Cette opération peut être automatisée grâce à Google Apps Script.

🔧 Fonction utilisée : Copier_ligne

Voici ce que fait la fonction pas à pas :

  • 🔎 Elle cherche la dernière ligne non vide dans la colonne E, souvent utilisée pour indiquer une donnée obligatoire (comme un nom ou matricule).

  • 📋 Elle copie toute la ligne correspondante (de la colonne A à la dernière colonne).

  • ➕ Elle insère une ligne vide juste en dessous.

  • 📎 Elle colle la ligne copiée dans la nouvelle ligne insérée.

  • 🧹 Elle vide les champs que l’utilisateur doit remplir à nouveau (noms, dates, valeurs chiffrées…), tout en conservant la structure.

🧪 Exemple d’utilisation

Tu as un tableau de gestion du personnel. En cliquant sur un bouton associé à cette macro, une nouvelle ligne prête à remplir est insérée automatiquement, avec les bonnes formules en place, sans duplication inutile des anciennes données.

u peux rendre ton script automatique et intelligent en détectant toutes les cellules avec une valeur dans la ligne copiée (la nouvelle ligne ajoutée), sans avoir à spécifier manuellement les plages (E:S, V:X, etc.).


✅ Objectif :

Effacer toutes les cellules avec des valeurs fixes (pas des formules) dans la nouvelle ligne insérée.


🧠 Comment faire ?

Tu peux parcourir chaque cellule de la ligne insérée, et supprimer uniquement son contenu si :

  • Ce n’est pas une formule (getFormula() renvoie vide),

  • Et ce n’est pas vide (getValue()"").


🔁 Code mis à jour :

javascript function Copier_ligne2()
function Copier_ligne2() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const lastRow = sheet.getRange("E:E").getValues().filter(String).length; // dernière ligne avec données en E const sourceRow = lastRow; const targetRow = lastRow + 1; // Insérer une ligne vide après la dernière ligne sheet.insertRowAfter(sourceRow); // Copier la ligne entière sheet.getRange(sourceRow, 1, 1, sheet.getLastColumn()) .copyTo(sheet.getRange(targetRow, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); // Supprimer toutes les valeurs fixes de la ligne copiée const rowRange = sheet.getRange(targetRow, 1, 1, sheet.getLastColumn()); const formulas = rowRange.getFormulas()[0]; const values = rowRange.getValues()[0]; for (let col = 0; col < values.length; col++) { if (formulas[col] === "" && values[col] !== "") { // Supprimer uniquement les valeurs qui ne sont pas des formules sheet.getRange(targetRow, col + 1).clearContent(); } } }


✅ Ce que fait ce script :

  • 🔍 Détecte la dernière ligne remplie via la colonne E.

  • 📋 Copie toute cette ligne vers la ligne suivante.

  • 🧽 Nettoie automatiquement les cellules contenant uniquement des valeurs (et non des formules).

  • 🎯 Pas besoin de spécifier manuellement les colonnes à effacer.

Solution correcte pour obtenir le nom de la feuille active dans Google Sheets (langue française) :

Tu peux utiliser la fonction Apps Script personnalisée, car Google Sheets n’a pas de fonction intégrée pour obtenir le nom de la feuille active.


🛠️ Étapes à suivre :

  1. Ouvre ton Google Sheets

  2. Clique sur Extensions > Apps Script

  3. Colle ce code :

javascript function NOM_FEUILLE() {
return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName(); }
  1. Enregistre le script (Ctrl + S)

  2. Retourne à ta feuille Google Sheets

  3. Utilise la formule suivante dans une cellule :

excel =NOM_FEUILLE()

Résultat :

Cela affichera le nom de la feuille actuelle, peu importe les espaces, caractères ou accents.


📝 Si tu veux l’écrire avec un petit texte devant :

excel ="Nom : " & NOM_FEUILLE()

🟢 Google Sheets Apps Script : Copier automatiquement une ligne + Remplir avec des valeurs d’en-tête

Dans ce tutoriel, je vous montre comment utiliser Google Apps Script pour :

Copier automatiquement la dernière ligne de données d’un tableau
Ajouter une nouvelle ligne juste en dessous
Nettoyer certaines cellules (vider des champs spécifiques)
Remplir automatiquement cette nouvelle ligne avec les données saisies dans des cellules d’en-tête (par exemple les cellules E2 à E9, G2 à G9, I2 à I3)
Puis vider ces cellules d’en-tête après insertion


🔧 Code complet expliqué

javascript
function Najia_Copier_ligne2() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lastRow = sheet.getRange("D:D").getValues().filter(String).length; // dernière ligne non vide en D var sourceRange = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()); var targetRow = lastRow + 1; // Insérer une ligne vide sheet.insertRowsAfter(lastRow, 1); // Coller la ligne copiée var targetRange = sheet.getRange(targetRow, 1); sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); // Effacer les anciennes valeurs dans des colonnes spécifiques var rangesToClear = [ `E${targetRow}`, `I${targetRow}`, `K${targetRow}`, `S${targetRow}:AF${targetRow}`, `AF${targetRow}` ]; rangesToClear.forEach(function(range) { sheet.getRange(range).clear({contentsOnly: true, skipFilteredRows: true}); }); // Récupérer les valeurs des cellules d’en-tête (E2 à E9, G2 à G9, I2 à I3) var valeurs = { E: sheet.getRange("E2:E9").getValues().flat(), G: sheet.getRange("G2:G9").getValues().flat(), I: sheet.getRange("I2:I3").getValues().flat() }; // Insérer ces valeurs dans la nouvelle ligne sheet.getRange(targetRow, 5).setValue(valeurs.E[0]); // E2 sheet.getRange(targetRow, 9).setValue(valeurs.E[1]); // E3 sheet.getRange(targetRow, 11).setValue(valeurs.E[2]); // E4 sheet.getRange(targetRow, 14).setValue(valeurs.E[3]); // E5 sheet.getRange(targetRow, 19).setValue(valeurs.I[0]); // I2 sheet.getRange(targetRow, 20).setValue(valeurs.I[1]); // I3 sheet.getRange(targetRow, 21).setValue(valeurs.E[4]); // E6 sheet.getRange(targetRow, 22).setValue(valeurs.E[5]); // E7 sheet.getRange(targetRow, 23).setValue(valeurs.E[6]); // E8 sheet.getRange(targetRow, 24).setValue(valeurs.E[7]); // E9 for (var i = 0; i < 8; i++) { sheet.getRange(targetRow, 25 + i).setValue(valeurs.G[i]); // G2 à G9 => colonnes Y à AF } // Effacer les cellules E2 à E9, G2 à G9, I2 à I3 après copie sheet.getRange("E2:E9").clearContent(); sheet.getRange("G2:G9").clearContent(); sheet.getRange("I2:I3").clearContent(); }

Ce que fait ce script :

  • Automatise l’ajout d’une nouvelle ligne

  • Copie le format d’une ligne précédente

  • Injecte automatiquement les données saisies dans un petit formulaire

  • Vide le formulaire pour la saisie suivante

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