XL 2013 Récupérer le critère d'un filtre automatique

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 !

BenHarber

XLDnaute Occasionnel
Bonjour le Forum,
cf. en PJ un exemple de fichier avec des données "formatées tableau" et une macro évènementielle qui se déclenche au recalcul de la feuille : celle-ci détecte si les différents filtres sont activés ou non.
Pour chaque colonne ayant un filtre activé, je souhaiterais savoir s'il est possible de récupérer dans une variable le ou les critères sélectionnés ? Et si oui, comment faire ?
Pour info. le fichier que je traite compte en réalité plus de 100 000 lignes.

Merci d'avance pour vos idées et suggestions qui sont toujours les bienvenue !

BH
 

Pièces jointes

Boisgontier,
Merci pour ta solution : c'est exactement le résultat que je souhaite obtenir.
Seulement, pour pouvoir la mettre en œuvre, c'est une autre paire de manches....car mes connaissances en VBA ne sont pas aussi poussées que les tiennes : je vais regarder tout ça et te poserai peut-être quelques questions complémentaires...
Merci encore !
BH
 
Il faut copier/coller ces fonctions dans un module (Insertion/Module):

Code:
Function ChampActif(c)
  Application.Volatile
  ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On
End Function

Function FiltreCol(Champ As Range, TitreChamp As Range)
  Application.Volatile
  If Not ChampActif(TitreChamp) Then FiltreCol = "": Exit Function

  Set d = CreateObject("scripting.dictionary")
  d.CompareMode = vbTextCompare
  For Each c In Champ
    If Not c.EntireRow.Hidden And c.Value <> "" Then d(c.Value) = c.Value
  Next c
  a = d.items
  If IsDate(Champ(1)) Then
    If d.Count = 1 Then
       FiltreCol = TitreChamp & ":" & Format(a(0), "dd/mm/yyyy")
    Else
      mini = a(0): maxi = a(0)
      For i = LBound(a) To UBound(a)
        If a(i) < mini Then mini = a(i)
        If a(i) > maxi Then maxi = a(i)
      Next i
      FiltreCol = TitreChamp & ":" & "> " & mini & " et < " & maxi
    End If
  Else
    If IsNumeric(Champ(1)) Then
      If d.Count = 1 Then
        FiltreCol = TitreChamp & ":" & a(0): Exit Function
      Else
        mini = a(0): maxi = a(0)
        For i = LBound(a) To UBound(a)
          If a(i) < mini Then mini = a(i)
          If a(i) > maxi Then maxi = a(i)
        Next i
        FiltreCol = TitreChamp & ":" & "> " & mini & " et < " & maxi: Exit Function
      End If
     Else
       FiltreCol = TitreChamp & ": " & Join(a, ",")
      ' FiltreCol = Join(a, " ")
     End If
  End If
End Function

Boisgontier
 
- 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
40
Affichages
3 K
Retour