Ajouter un client dans la feuille "BDD" avec mise à jour automatique du contrat

 



📅 Ajouter un client dans la feuille "BDD" via Google Apps Script

Dans cet article, nous allons voir comment automatiser l'ajout d'un client dans la feuille "BDD" d'un Google Sheets, en récupérant des données saisies dans une feuille de préparation appelée "Liste ECOLE", tout en assurant :

  • le remplissage automatique selon les en-têtes,

  • la copie de formules spécifiques,

  • l'enregistrement dans une autre feuille à des fins de suivi ("Ren-Contrat"),

  • et le nettoyage des champs de saisie pour la prochaine utilisation.


✅ Fonction complète : Ajouter_Client_dans_BDD()

function Ajouter_Client_dans_BDD() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName("Liste ECOLE");
  const targetSheet = ss.getSheetByName("BDD");

  const marque = sourceSheet.getRange("A1").getValue();
  const nomvef = sourceSheet.getRange("G2").getValue();
  if (marque !== "P" || nomvef === "") {
    SpreadsheetApp.getUi().alert("Opération bloquée : il faut préparer et écrire le nom avant d'ajouter un client.");
    return;
  }

  const headers = targetSheet.getRange(10, 1, 1, targetSheet.getLastColumn()).getValues()[0];
  const data = targetSheet.getDataRange().getValues();
  let lastRow = data.length;
  while (lastRow > 10 && data[lastRow - 1].join("") === "") lastRow--;
  const newRow = lastRow + 1;

  const fixedPairs = [
    ["U2", "N°"],
    ["U3", "ID  Ecole"]
  ];
  for (let [cellRef, colName] of fixedPairs) {
    const value = sourceSheet.getRange(cellRef).getValue();
    const colIndex = headers.indexOf(colName);
    if (value !== "" && colIndex !== -1) {
      targetSheet.getRange(newRow, colIndex + 1).setValue(value);
    }
  }

  const blocks = [
    { keys: "F", values: "G", from: 2, to: 8 },
    { keys: "I", values: "J", from: 2, to: 8 },
    { keys: "K", values: "L", from: 2, to: 8 },
    { keys: "M", values: "N", from: 2, to: 8 },
    { keys: "O", values: "P", from: 2, to: 8 },
    { keys: "Q", values: "R", from: 2, to: 8 }
  ];
  for (let block of blocks) {
    for (let i = block.from; i <= block.to; i++) {
      const colName = sourceSheet.getRange(block.keys + i).getValue();
      const value = sourceSheet.getRange(block.values + i).getValue();
      if (colName && value) {
        const colIndex = headers.indexOf(colName);
        if (colIndex !== -1) {
          targetSheet.getRange(newRow, colIndex + 1).setValue(value);
        }
      }
    }
  }

  const colRechercheDivers = headers.indexOf("RECHERCHE DIVERS");
  if (colRechercheDivers !== -1) {
    const formule = targetSheet.getRange(lastRow, colRechercheDivers + 1).getFormulaR1C1();
    if (formule) {
      targetSheet.getRange(newRow, colRechercheDivers + 1).setFormulaR1C1(formule);
    }
  }

  const feuilleContrat = ss.getSheetByName("Ren-Contrat");
  const idEcole = sourceSheet.getRange("U3").getValue();

  if (idEcole) {
    const contratData = feuilleContrat.getDataRange().getValues();
    let contratRow = contratData.length;
    while (contratRow > 2 && contratData[contratRow - 1].join("") === "") contratRow--;
    const nouvelleLigne = contratRow + 1;

    const ligneModele = feuilleContrat.getRange(contratRow, 1, 1, feuilleContrat.getLastColumn());
    const formules = ligneModele.getFormulasR1C1();
    feuilleContrat.getRange(nouvelleLigne, 1, 1, feuilleContrat.getLastColumn()).setFormulasR1C1(formules);

    const contratHeaders = feuilleContrat.getRange(2, 1, 1, feuilleContrat.getLastColumn()).getValues()[0];
    const idEcoleCol = contratHeaders.indexOf("ID  Ecole");
    if (idEcoleCol !== -1) {
      feuilleContrat.getRange(nouvelleLigne, idEcoleCol + 1).setValue(idEcole);
    }
  }

  const zones = ["G2:G8", "J2:J8", "L2:L8", "N2:N8", "P2:P8", "R2:R8", "F1"];
  zones.forEach(range => sourceSheet.getRange(range).clearContent());

  targetSheet.activate();
  targetSheet.setActiveRange(targetSheet.getRange(newRow, 1));
  SpreadsheetApp.getUi().alert("Client ajouté avec succès dans la BDD !");
}

🔄 Explication des étapes principales

  • ✅ Vérification initiale : on vérifie que le bouton est prêt (A1 = "P") et que le nom est rempli (G2).

  • 📄 Lecture des en-têtes dans la feuille "BDD" pour affecter les valeurs dynamiquement.

  • ➕ Insertion ligne vide : on détecte la prochaine ligne disponible après la ligne 10.

  • 🔹 Ajout des valeurs fixes : numéro et ID école.

  • 🔄 Boucle sur les blocs : récupération des noms d'en-têtes + valeurs à insérer.

  • ⚛️ Copie de formule : on duplique la formule présente dans "RECHERCHE DIVERS".

  • 📅 Enregistrement dans Ren-Contrat avec copie de formule et ajout ID école.

  • 🚮 Nettoyage des champs : on efface les zones utilisées pour la saisie.

  • 🔍 Focus visuel sur la ligne ajoutée avec message de confirmation.


N'hésite pas à personnaliser ce script pour l'adapter à ton propre modèle de données ou à ton style d'organisation !

📥 Ajouter un client dans la feuille "BDD" avec mise à jour automatique du contrat

Ce script Google Apps Script permet d’automatiser l’ajout d’un client à partir des données préparées dans la feuille "Liste ECOLE", tout en :

  • copiant dynamiquement les informations dans la feuille "BDD",

  • ajoutant l’ID École dans la feuille "Ren-Contrat",

  • recopiant les formules utiles,

  • et nettoyant la zone de saisie.


✳️ 1. Vérification des conditions initiales

javascript

const marque = sourceSheet.getRange("A1").getValue(); const nomvef = sourceSheet.getRange("G2").getValue();

Avant d’exécuter quoi que ce soit, le script vérifie que la cellule A1 contient "P" et que le nom du client (G2) n’est pas vide. Sinon, une alerte s'affiche.


📌 2. Récupération des en-têtes dans "BDD"

javascript

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

Les en-têtes du tableau sont sur la ligne 10, et ils servent à placer les bonnes données dans les bonnes colonnes.


➕ 3. Détection de la prochaine ligne vide

javascript

let lastRow = data.length; while (lastRow > 10 && data[lastRow - 1].join("") === "") { lastRow--; } const newRow = lastRow + 1;

On trouve la première ligne vide après la ligne 10 pour y insérer les nouvelles données.


📤 4. Insertion des données fixes

javascript

const fixedPairs = [ ["U2", "N°"], ["U3", "ID Ecole"] ];

Ces paires (cellule, nom d'en-tête) permettent de placer des valeurs spécifiques, comme le numéro et l’ID de l’école.


🔁 5. Transfert dynamique des données

javascript

const blocks = [ { keys: "F", values: "G", from: 2, to: 8 }, ... ];

Chaque bloc contient une colonne de noms d’en-têtes (F2:F8, I2:I8, ...) et une colonne associée de valeurs (G2:G8, J2:J8, ...). Le script copie chaque valeur au bon endroit dans "BDD" selon l'en-tête.


🔄 6. Copie automatique d'une formule spéciale

javascript

const formule = targetSheet.getRange(lastRow, colRechercheDivers + 1).getFormulaR1C1();

La formule de la colonne "RECHERCHE DIVERS", si elle existe, est copiée dans la nouvelle ligne.


📝 7. Ajout du client dans la feuille "Ren-Contrat"

javascript

const feuilleContrat = ss.getSheetByName("Ren-Contrat"); const idEcole = sourceSheet.getRange("U3").getValue();

Si un ID école est fourni, le script :

  • cherche la prochaine ligne vide dans "Ren-Contrat",

  • copie les formules de la ligne précédente,

  • insère l’ID école dans la bonne colonne grâce aux en-têtes.


🧽 8. Nettoyage de la feuille de saisie

javascript

const zones = ["G2:G8", "J2:J8", ...];

Les champs utilisés sont vidés automatiquement pour préparer la prochaine saisie.


✅ 9. Confirmation visuelle

javascript

targetSheet.activate(); targetSheet.setActiveRange(targetSheet.getRange(newRow, 1));

La nouvelle ligne du client est automatiquement sélectionnée dans la feuille "BDD" et une alerte confirme l’ajout.


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