Script pour créer un filtre sur google sheet

Bonjour A tous,

Je cherche comment générer automatiquement un filtre sur ma feuille google sheet. J'ai essayé d'utiliser la fonction getfilter () de javascript mais ça ne marche pas

function filtre() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A1:AE46').activate();
  var crit = spreadsheet.getRange('AF2').getValue
  var criteria = SpreadsheetApp.newFilterCriteria()
    .whenTextContains('crit')
    .build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(1, criteria);
};

Je voudrais rechercher dans la colonne 1 le critère que j'ai consigné dans la cellule AF2.

Quelqu'un aurais une idée de comment procéder svp ?

Merci par avance,

Bonjour

function filtre() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var plageDonnees = feuille.getDataRange();
  var filtre = feuille.getFilter();
  var criteres = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(feuille.getRange("AF2").getValue()).build();
  plageDonnees.createFilter().setColumnFilterCriteria(1, criteres);

  var range = feuille.getRange("A:A");
  var hiddenValues = [];
  for (var i = 2; i <= range.getLastRow(); i++) {
    var cellValue = range.getCell(i, 1).getValue();
    if (cellValue !== feuille.getRange("AF2").getValue()) {
      hiddenValues.push(i);
    }
  }
  plageDonnees.getFilter().setHiddenValues(1, hiddenValues);
}

Avec cette macro, cela va masquer toutes les lignes dont la colonne 1 ne correspond pas à AF2 mais comme ta cellule AF2 est dans la même feuille, ca peut également la masquer. Je ne me rends pas compte si c'est applicable sur ton fichier

Merci evolm,

en exécutant ton code j'ai cet erreur

ErreurTypeError: plageDonnees.getFilter(...).setHiddenValues is not a function.

Et quand je regarde dans le feuille, il y'a bien un filtre qui a été appliqué sur la colonne "A", mais le critère appliqué n'est pas la valeur de la cellule "AF2" comme demandé dans le code.

Sur une bdd vierge ca marche très bien chez moi.

Mais n'ayant pas votre fichier original, c'est difficile de distinguer l'anomalie. C'est du à la gestion du filtre

Voici une macro modifiée qui supprime le filtre existant avant de le réactiver

function filtre() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var plageDonnees = feuille.getDataRange();
  var filtreActuel = plageDonnees.getFilter();

  if (filtreActuel != null) {
    filtreActuel.remove();
  }

  var criteres = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(feuille.getRange("AF2").getValue()).build();
  plageDonnees.createFilter().setColumnFilterCriteria(1, criteres);

  var filtreNouveau = plageDonnees.getFilter();
  var range = feuille.getRange("A:A");
  var hiddenValues = [];
  for (var i = 2; i <= range.getLastRow(); i++) {
    var cellValue = range.getCell(i, 1).getValue();
    if (cellValue !== feuille.getRange("AF2").getValue()) {
      hiddenValues.push(i);
    }
  }
  filtreNouveau.setHiddenValues(1, hiddenValues);
}

Bonjour evolm,

je viens d'essayer les deux codes sur un google Sheets vierge, mais toujours la même erreur.

j'ai fait une extraction du tableau de mon google Sheets original sur le fichier excel en pj.

Peux-tu partir de ce tableau pour regarder si ça marche toujours chez toi stp ?

Merci,

La macro ne marche pas car tu es en date. Je n'avais fait le test qu'en nombre.

C'est envisageable de convertir ces données en nombre ou l'affichage visuel doit obligatoirement être en date?

Bonjour evolm,

ça m’arrangerais si l'affichage visuel restait en date.

si on pourrait créer nouvelle une colonne avec les même dates qui sont convertis en nombre ?

Et c'est sur cette colonne qu'on afficherait les filtres

Merci,

C'est très compliqué de gérer une macro avec des dates.

Oui s'il est possible de créer des colonnes en nombre sans que cela perturbe ton fichier ou l'affichage que tu souhaites, il sera facile d'adapter la macro

En tout cas, je ne trouve pas de solution en une seule macro pour les dates

Bonjour Evolm, Doofy59,

Si je peux aider, quel est votre besoin sur les dates ?

Bonjour à tous,

J'ai jeté un oeil au fichier et je vois que tes dates contiennent aussi des heures d'où peut-être les problèmes de comparaisons (car ici c'est comme comparer des nombres, mais certains sont entiers et d'autres pas)

Je me demande aussi quel est l'intérêt ici de la macro ... Si le but est seulement d'actualiser le filtre chaque jour, elle n'est peut-être pas indispensable :

=ARRONDI.INF(A2)=AF$2

Ou (pour t'éviter d'avoir une colonne AF) :

=ARRONDI.INF(A2)=AUJOURDHUI()
image

Si tu as besoin de la macro, tu peux t'inspirer de cette condition :

.whenFormulaSatisfied('=ROUNDDOWN(A2)=AF$2')

Ou :

.whenFormulaSatisfied('=ROUNDDOWN(A2)=TODAY()')

Cordialement,

Voila quand même une macro qui crée ou mets à jour le filtre existant en fonction du critère de mon dernier message :

function filtrer() {
  const f = SpreadsheetApp.getActiveSheet();
  const filtre = f.getFilter() ?? f.getRange('A:AE').createFilter();
  filtre.setColumnFilterCriteria(1, SpreadsheetApp.newFilterCriteria()
    .whenFormulaSatisfied('=ROUNDDOWN(A2)=TODAY()')
    .build()
  );
}

Bonjour,

Merci pour toute vos réponses.

Le projet sur lequel je travail est plus complexe, le besoin de filtrer est une partie du cahier de charge :).

A l'aide de vos réponses et de quelques recherches supplémentaires, j'ai trouvé un critère de filtre propre aux dates, c'est le critère .whenDateEqualTo(date).

Appliqué à mon contexte ça donne ceci:

function filtre() {
  const ss = SpreadsheetApp.getActiveSheet();
  var lastRow = ss.getLastRow();
  var lastColumn = ss.getLastColumn();
  var lastCell = ss.getRange(lastRow, lastColumn);
  var firstCell = ss.getRange("A1");
let range = ss.getRange(1,1,lastRow,lastColumn);
let filter = range.getFilter();
let date = new Date();
let criteria = SpreadsheetApp.newFilterCriteria()
                             .whenDateEqualTo(date)
                             .build();
 range.createFilter().setColumnFilterCriteria(1, criteria);
}

mon problème est résolue :)

merci,

Rechercher des sujets similaires à "script creer filtre google sheet"