AUTO FILTRER UNE FEUILLE
Le but est de filtrer la base de données en entrant les noms requis sans avoir à manipuler les conditions manuellement.
Vous avez une feuille de données de ce type :
Pour filtrer, il suffit juste de donner un nom en A1 et/ou en A2Script :
function onEdit(e) {
var col = 1 // colonne où se trouvent les noms
var row = 3 // ligne à partir de laquelle se trouve le tableau (en-têtes)
var sh = e.source.getActiveSheet()
if (sh.getName() != "Sheet1") return;
if (e.range.columnStart > col || e.range.columnEnd < col) return;
if (e.range.rowStart > row - 1) return;
var names = sh.getRange(1, col, row - 1, 1).getValues().flat()
var range = sh.getRange(row, col, sh.getLastRow() - row + 1, sh.getLastColumn() - col + 1);
var filter = sh.getFilter();
if (filter !== null) filter.remove();
if (countNotOccurrences(names, '') == 0) return;
var hiddenNames = range.getValues().slice(1).map(row => row[0]).filter(who => names.indexOf(who) == -1);
range.createFilter();
var criteria = SpreadsheetApp.newFilterCriteria().setHiddenValues([...new Set(hiddenNames)]).build();
sh.getFilter().setColumnFilterCriteria(col, criteria);
}
const countNotOccurrences = (arr, val) => arr.reduce((a, v) => (v !== val ? a + 1 : a), 0);
Commentaires
Enregistrer un commentaire