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#
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
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
Dernière édition: