Filtrer automatiquement une liste d’écoles dans Google Sheets avec Apps Script

 



🎯 Filtrer automatiquement une liste d’écoles dans Google Sheets avec Apps Script

📝 Objectif

Dans un tableau de Google Sheets listant des écoles, je souhaite permettre à l'utilisateur de filtrer dynamiquement les lignes du tableau en saisissant une partie du nom (ou autre critère) dans une cellule de recherche (H1). Le filtre s'applique sur la colonne "RECHERCHE DIVERS", sans avoir à utiliser manuellement le menu de filtre de Google Sheets.


📋 Contexte du tableau

  • Le tableau commence à la ligne 10 (c'est que se trouvent les en-têtes).

  • La colonne H1 contient le texte à rechercher (saisi par l'utilisateur).

  • La colonne cible du filtre s’appelle "RECHERCHE DIVERS".

  • Le tableau peut s’allonger avec de nouvelles écoles ajoutées.


Solution fiable avec pause et sécurité

Voici la version du script, suivie d’une explication ligne par ligne :

javascript

function FiltrerRechercheEcole() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Liste ECOLE"); const searchValue = sheet.getRange("H1").getValue().toString().trim(); const headerRow = 10; const lastRow = sheet.getLastRow(); const lastCol = sheet.getLastColumn(); // Protection contre plage vide if (lastRow < headerRow) return; const tableRange = sheet.getRange(headerRow, 1, lastRow - headerRow + 1, lastCol); // Supprimer le filtre s'il existe if (tableRange.getFilter()) { tableRange.getFilter().remove(); Utilities.sleep(200); // Pause de 200 ms pour laisser le temps au système } // Recréer un filtre vide tableRange.createFilter(); Utilities.sleep(100); // Pause avant d’appliquer le critère const filter = tableRange.getFilter(); // Trouver l'index de la colonne "RECHERCHE DIVERS" const headers = sheet.getRange(headerRow, 1, 1, lastCol).getValues()[0]; const colIndex = headers.indexOf("RECHERCHE DIVERS"); if (colIndex === -1) { SpreadsheetApp.getUi().alert("Colonne 'RECHERCHE DIVERS' introuvable !"); return; } // Si rien n'est saisi, laisser le filtre sans critère if (searchValue === "") return; // Appliquer le filtre avec le texte saisi dans H1 filter.setColumnFilterCriteria( colIndex + 1, SpreadsheetApp.newFilterCriteria() .whenTextContains(searchValue) .build() ); }

🧩 Explication détaillée

🔹 Lecture de la valeur à rechercher

javascript

const searchValue = sheet.getRange("H1").getValue().toString().trim();

On lit la valeur dans la cellule H1, en la convertissant en texte, puis en retirant les espaces inutiles.


🔹 Détection des limites du tableau

javascript

const headerRow = 10; const lastRow = sheet.getLastRow(); const lastCol = sheet.getLastColumn();

On identifie commence le tableau (ligne 10) et jusqu’où il s’étend (pour inclure toutes les lignes/colonnes).


🔹 Suppression propre de l’ancien filtre

javascript

if (tableRange.getFilter()) { tableRange.getFilter().remove(); Utilities.sleep(200); }

On supprime l’ancien filtre en ajoutant une pause pour éviter les conflits de synchronisation dans Google Sheets.


🔹 Recréation du filtre

javascript

tableRange.createFilter(); Utilities.sleep(100);

On recrée un filtre vide sur la plage, puis on attend encore un peu avant d’appliquer un critère.


🔹 Détection dynamique de la colonne à filtrer

javascript

const headers = sheet.getRange(headerRow, 1, 1, lastCol).getValues()[0]; const colIndex = headers.indexOf("RECHERCHE DIVERS");

Plutôt que de coder le numéro de colonne, on cherche dynamiquement la position de la colonne "RECHERCHE DIVERS". Cela rend le code plus robuste si l’ordre des colonnes change.


🔹 Application du critère de filtre

javascript

filter.setColumnFilterCriteria( colIndex + 1, SpreadsheetApp.newFilterCriteria() .whenTextContains(searchValue) .build() );

On applique un filtre qui garde seulement les lignes le texte de la colonne contient ce qui a été saisi dans H1.


🎁 Résultat

  • L’utilisateur saisit un mot-clé dans la cellule H1.

  • Le tableau se filtre automatiquement en ne gardant que les lignes correspondantes.

  • Si H1 est vide, le tableau reste entier, mais filtrable manuellement.


🧪 Astuce : lancer le script via un bouton

Tu peux créer un bouton dans Google Sheets (Insertion > Dessin > Bouton) et lui associer cette fonction FiltrerRechercheEcole pour une expérience plus fluide.


Conclusion

Ce script permet un filtrage dynamique d’un tableau dans Google Sheets, de manière fluide et professionnelle. En ajoutant de courtes pauses (Utilities.sleep), on évite les erreurs dues à la vitesse de traitement de Google Apps Script.

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