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

Autres (RESOLU) Afficher la valeur filtrée dans une cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chaelie2015

XLDnaute Accro
Bonjour Forum
ci rattaché fichier exemple, je souhaite afficher le titre filtré dans une cellule.
exemple :
si je sélectionne dans le filtre de la colonne F que A alors afficher dans G2 = A et ainsi de suite.
Merci par avance
 

Pièces jointes

Solution
Bonjour chaelie2015,

On peut utiliser cette fonction VBA :
VB:
Function ListeFiltre(r As Range) As String
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each r In r
    If Not r.Rows.Hidden And CStr(r) <> "" Then d(r.Value) = ""
Next
ListeFiltre = Join(d.keys, " - ") 'concaténation
End Function
A placer dans un module standard.

A+
Bonjour Forum
en fin j'ai pu trouver la formule, mais j'ai un autre souci si je sélectionne plus que 1 ????
je souhaite ne rien afficher si je sélectionne plus que 1
VB:
=INDEX(E5:E100;EQUIV(1;(SOUS.TOTAL(3;INDIRECT("E"&LIGNE(5:100))));0))
 

Pièces jointes

Dernière édition:
Bonjour chaelie2015,

On peut utiliser cette fonction VBA :
VB:
Function ListeFiltre(r As Range) As String
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each r In r
    If Not r.Rows.Hidden And CStr(r) <> "" Then d(r.Value) = ""
Next
ListeFiltre = Join(d.keys, " - ") 'concaténation
End Function
A placer dans un module standard.

A+
 

Pièces jointes

Bonjour,
Désolé de reveiller ce post, j'espère que je ne commets pas d'infraction. Merci pour cette fonction limpide qui fonctionne très bien. Est-il possible d'être un peu gourmand. Dans ce contexte, comment pourrait-on tester si aucun filtre n'est effectué, c'est à dire si on est dans le cas "Sélectionner tout". Ceci pour éviter des concaténations un peu longues.
Merci d'avance.
Bien cordialement.
 
Bonjour Kostrovit,

On peut faire commencer la fonction par :
VB:
If Application.Subtotal(103, r) = Application.CountA(r) Then ListeFiltre = "Tout est affiché": Exit Function
A+
Bonjour Job75,
Ca marche presque bien. Je m'avance peut-être mais il me semble que cela peut être dû à la position de la nouvelle ligne de code. Quand on a plusieurs colonnes avec filtre auto et la fonction ListeFiltre, quand on modifie le filtre sur l'une des colonnes alors le résultat "Tout est affiché" est remplacé par la concaténation dans les autres colonnes. En fait, toute modification du filtre sur une colonne modifie le résultat de la fonction Listefiltre() sur les autres colonnes.
Une autre remarque : n'y a t-il pas un moyen de limiter la concaténation ? Pour une colonne de dates par exemples quand il y a pas mal de lignes, la fonction renvoie une concaténation très longue.
En te remerciant par avance.
Bien à toi
K
 
Dernière édition:
Bonsoir, autant pour moi, ce fonctionnement est logique. Si on a 2 colonnes et que l'on filtre la première, forcément même si le filtre de la seconde est resté sur "sélectionner tout", cette colonne est réduite au lignes définies par le filtre de la première colonne. Et la fonction s'adapte superbement en affichant que les items restant affichés. Chapeau bas donc ! Mais je maintiens ma deuxième remarque pour accentuer encore l'élégance de cette fonction.
Merci
bien à toi.
K
 
Bonjour,
Une autre remarque : n'y a t-il pas un moyen de limiter la concaténation ?
Il suffit de sortir de la boucle quand le nombre d'éléments du Dictionary atteint une limite :
VB:
For Each r In r
    If Not r.Rows.Hidden And CStr(r) <> "" Then d(r.Value) = "": If d.Count = limite Then Exit For
Next
A+
 

Pièces jointes

Bonjour,
Génial, ça marche vraiment très bien. C'est exactement ce que je cherchais depuis longtemps. Et en si peu de lignes... Mes utilisateurs qui ne font pas toujours attention à l'icone de sélection dans l'en-tête de colonne pourront voir tout de suite qu'un filtre a été appliqué ou non. Est-il possible d'en demander plus. Si je suis trop gourmand n'hésite pas à me le dire.
Pour les champs date, quand il y a de nombreuses lignes, ce n'est pas très clair. Ce sont des dates successives qui s'affichent. La notion de limite a apporté une première réponse. Mais ce serait encore mieux si on pouvait jouer sur le format. Par exemple, si un mois entier est sélectionné, c'est ce mois qui s'afficherait avec listefiltre (ou plusieurs selon la limite). Si c'est l'année entière qui est sélectionnée, ce serait l'année qui s'afficherait (ou plusieurs selon la limite). Est-ce que ce serait faisable à l'intérieur de la fonction ?
Quoi qu'il en soit, merci encore !
Bien à toi.
K
 
Dernière édition:
Bonjour Kostrovit,

Vous voulez dire mettre la limite dans la formule en G2 ?

C'est possible mais la formule sera très lourde.

Il est beaucoup plus simple de mettre la limite dans le VBA, par exemple avec un 2ème argument dans la fonction.
 

Pièces jointes

Bonjour Kostrovit,

Vous voulez dire mettre la limite dans la formule en G2 ?

C'est possible mais la formule sera très lourde.

Il est beaucoup plus simple de mettre la limite dans le VBA, par exemple avec un 2ème argument dans la fonction.
Re-bonjour Job75,
C'est encore plus élégant avec la limite en argument, on peut ainsi choisir une limite différente pour chaque colonne. Mais dans votre exemple, la date est en format [mois]. Mon cas est différent, je le mets en pièce jointe. J'ai repris votre dernière version en rajoutant la ligne "tout est affiché". Il s'agit d'un ficher de saisie des statistiques d’événements (saisie par toute une équipe), la date pour chaque ligne est en format JJ/mm/aaaa. Donc la fonction renvoie une concaténation de jours, sous ce forrmat, selon la limite choisie. Ce que je voudrais :
  1. Dans le cas où la case 2025 est cochée, c'est à dire tous les mois de 2025 existants sont cochés : la fonction ne renvoie pas une concaténation de jours comme c'est le cas actuellement, mais tout simplement l'année sélectionnée "2025"
  2. Dans le cas où seuls certains mois sont cochés, par exemple janvier, mars et avril : la fonction renvoie les mois sélectionnés "janvier - mars - avril".
Ce serait un traitement à part de la fonction pour les dates et une conversion de format, je suppose que cela ne doit pas être facile.

En vous remerciant par avance.
Bien à vous
K
 

Pièces jointes

Je suis à court d'idée.
Bonjour Job75,
Je n'ai pas les compétences pour compléter votre formule, mais j'ai trouvé une astuce qui me permet d'obtenir ce que je cherchais. J'ai ajouté une colonne à droite de mon tableau, en O, où je demande de reproduire les saisies de la colonne de date en A, avec la formule suivante :
VB:
=SI($A5="";"";CHOISIR(MOIS($A5);"Jan.";"Fév.";"Mars";
"Avr.";"Mai";"Juin";
"Juil.";"Août";"Sept.";
"Oct.";"Nov.";"Déc."))
J'applique votre formule à la colonne O au-dessus de ma colonne A et même si les dates sont saisies en jj/mm/aaaa, j'obtiens une sélection jan - fév. - mars - etc.

Encore merci
Bien à vous
K
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
110
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…