Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.



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.





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


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

Affichage des colonnes - méthode 1 - statique




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
    2.1 KB · Affichages: 6
  • FILTRE_COLONNE_TITRE_DYNAM_.xlsx
    110.8 KB · Affichages: 2
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…