Menu

Lister les critères actifs

Celio - 12 août 2018 à 10:33 - Dernière réponse :  Celio
- 12 août 2018 à 12:52
Bonjour à tous,

Après avoir écumé, sans succès, les forums pour trouver une réponse, je me permets de poster ma requête.

Pour préciser un peu le titre, et donc ma question, j'aimerais trouver l'astuce pour lister, dans une MsgBox, les filtres actifs et les critères correspondants d'un tableau.

Exemple:

Filtre actif sur "Colonne 1", critère filtrant "JAUNE"

Filtre actif sur "Colonne 6", critère filtrant "CAMION".

Etc.

En vous remerciant d'ores et déjà pour votre aide.

Belle journée à tous.
Afficher la suite 

Votre réponse

4 réponses

jordane45 22132 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 août 2018 Dernière intervention - Modifié par jordane45 le 12/08/2018 à 10:58
0
Merci
Bonjour,

Tu dois pouvoir utiliser une fonction de ce genre
' r = plage de cellules à vérifier (si le titre de tes colonnes filtrées se trouve en A1:E1 par exemple)
Function getFilters(r As Range) As String
  Dim Sh as WorkSheet
  Dim strFiltres  as String
  Set Sh = ActiveSheet
  strFiltres = ""

'Si le mode "filtre" est activé sur la feuille
If Sh.FilterMode Then
    'On boucle sur les filtres pour voir ceux qui sont actifs
    For i = 1 To Sh.AutoFilter.Filters.Count
       If Sh.AutoFilter.Filters(i).On Then
          strFiltres = strFiltres & r(i).Value & ", "
       End If
    Next i

    'On supprime la dernière virgule
    strFiltres = Left(strFiltres, Len(strFiltres) - 2) 
End If

'on retourne le resultat
getFilters = strFiltres

End Function


Et pour l'utiliser...
listeFiltres = getFilters(Range("A1:E1"))


Cordialement, 
Jordane                                                                 
Bonjour,

Merci beaucoup pour cette prompte réponse.

Je ne suis malheureusement qu'un bricoleur sur VBA, je n'ai donc sans doute pas toutes les connaissances nécessaires à la bonne application de votre solution. Je vous prie de m'excuser pour cela.

Voilà ce que j'ai fait:

J'ai créé un module pour y coller votre fonction.
Puis j'ai appelé cette fonction dans mon code ainsi:

MsgBox listeFiltres = getFilters(Range("A1:Z1"))

Le message renvoyé est ou "Faux" ou "Vrai, selon que, respectivement, mon tableau est filtré ou non.

Merci encore pour votre aide. Bien à vous.

Celio
jordane45 22132 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 août 2018 Dernière intervention - 12 août 2018 à 12:34
 listeFiltres = getFilters(Range("A1:Z1")) 
MsgBox listeFiltres 
Magnifique! Merci.

Première partie résolue.

Le critère filtrant est-il aussi affichable selon vous?

Si je reprends mon exemple, le résultat renvoyé est actuellement:

Colonne 1, Colonne 6

Peut-on obtenir:

Colonne 1, critère filtrant "JAUNE"
Colonne 6, critère filtrant "CAMION"

(A noter que plusieurs critères peuvent filtrer la Colonne 1 (Exemple: "JAUNE", mais aussi "BLEU")).

Encore merci pour votre aide. C'est la classe, je n'avais rien trouvé jusqu'ici.

Celio
Commenter la réponse de jordane45