FILTRE :: Affichage dynamique des colonnes paramétrable avec la fonction FILTRE

oguruma

XLDnaute Occasionnel
Bonjour, ça faisait un moment "que je tournais autour".
L'idée : Effectuer un affichage filtré avec la fonction FILTRE tout en paramétrant dans une table paramètres les colonnes que l'on souhaite afficher.

La source de données dans l'exemple est publique.
Liste des établissements scolaires.

1700850417638.png


A travers cette table dans un onglet Params déterminer les champs que l'on souhaite afficher : =TRANSPOSE(TB_ETABLISSEMENTS[#En-têtes]) --> on récupère les nom des colonnes que l'on affiche en colonne pour des questions de lisibilité. D'où l'application de la fonction TRANSPOSE.

1700850487768.png




Déjà on va poser des conditions booléennes de manières à ce qu'elles puissent être récupérées par la fonction FILTRE afin de gérer l'affichage des colonnes désirées comme ceci
1700850570618.png


La colonne
1700850585645.png
tout simplement =SI(B2="O";VRAI;FAUX)

Affichage des colonnes - méthode 1 - statique


1700850681848.png


On remarque la formule que l'on récupère automatiquement les titres des colonnes via l'adresse étendu d'Excel Params!A2# (# --> adressage étendu)
L'affichage des titres est géré par cette formule : =FILTRE(TRANSPOSE(Params!A2#);TRANSPOSE(Params!C2:C41)=VRAI;"")
Les colonnes retenues sont repérées via cette formule : TRANSPOSE(Params!C2:C41)=VRAI
On doit de nouveau les transposer pour être fidèle à la disposition des données.
Puis le contenu est affiché via cette formule : =FILTRE(FILTRE(TB_ETABLISSEMENTS;TB_ETABLISSEMENTS[LOCALISATION]<>"");TRANSPOSE(Params!C2:C41))
Là ici le filtre est très simple à titre d'exemple TB_ETABLISSEMENTS[LOCALISATION]<>""
L'inconvénient majeur de cette solution est que les plages sont "mises en dur" et donc fixes.


Affichage des colonnes - méthode 2 - dynamique

La méthode 2 va palier au problème des plages d'adresses fixes en passant par la fonction puissante DECALER

Titre

=FILTRE(TRANSPOSE(Params!A2#);TRANSPOSE(DECALER(Params!C2;0;0;NBVAL(Params!A2#);1))=VRAI;"")

Contenu
=FILTRE(FILTRE(TB_ETABLISSEMENTS;TB_ETABLISSEMENTS[LOCALISATION]
<>"");TRANSPOSE(DECALER(Params!C2;0;0;NBVAL(Params!A2#);1)))

Avec cette fonction on va calculer dynamiquement la profondeur du champs par le nombre de nom de champs renvoyé par Params!A2#
 

Pièces jointes

  • 1700850853008.png
    1700850853008.png
    2.1 KB · Affichages: 5
  • FILTRE_COLONNE_TITRE_DYNAM_.xlsx
    110.8 KB · Affichages: 2
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 314
Membres
103 176
dernier inscrit
jean.yvesjean.yves