Sub ListeFiltreTest()
' LireValeursFiltre
Dim ws As Worksheet
Dim f As AutoFilter
Dim filtre As Filter
Dim arr As Variant
'
Set ws = ActiveSheet
'
' Le choix de la colonne de La Matrice (Le tableau = La Plage)
' Ici Choix de la colonne 1
Dim Colonne As Integer ' Choix de la colonne ici la colonne 1
Colonne = 1
'
Dim Critére As Range
Set Critére = ws.Cells(1, 1)
Critére.Select
'
' Activer le filtre si ce n'est pas déjà fait
If ws.AutoFilterMode = True Then
' --- SendKeys_DecocherPremierItem (du Filtre) ---
SendKeys_DecocherPremierItem
' --- Argument = strictement Différent de l'argument.
StockTableau ws, f, filtre, arr, Colonne
arr(UBound(arr)) = "Vide"
ReDim Preserve arr(1 To UBound(arr) + 1)
' --- SendKeys_DecocherTout_CocherPremier (du Filtre) ---
SendKeys_DecocherTout_CocherPremier
StockTableau ws, f, filtre, arr, Colonne
' --- Désactiver le filtre si nécessaire ---
'ws.AutoFilterMode = False
End If
' Transformer en chaîne, supprimer "=", puis recréer le tableau
arr = Split(Replace(Join(arr, "|"), "=", ""), "|")
MsgBox Join(arr, vbCrLf), vbInformation, "Contenu du tableau"
End Sub
'
' ==================================================================================================
'
Private Sub StockTableau(ByVal ws As Worksheet, ByVal f As AutoFilter, ByVal filtre As Filter, ByRef arr As Variant, ByRef Colonne As Integer)
Set f = ws.AutoFilter
If Not f Is Nothing Then
Set filtre = f.Filters(Colonne) ' Exemple : première colonne filtrée : f.Filters(1)
If filtre.On Then
' Criteria1
'Debug.Print "Critère appliqué : " & "filtre.Criteria1"
' --- Charger dans un tableau ---
If IsArray(arr) Then
If UBound(arr) > 0 Then
'x = True
arr(UBound(arr)) = filtre.Criteria1
Else
'x = False
End If
Else
'MsgBox "Tableau vide"
arr = filtre.Criteria1
End If
' Criteria2
If filtre.Operator = xlOr Then
'Debug.Print "OU Critère2 : " & filtre.Criteria2
End If
End If
End If
End Sub
'
' ==================================================================================================
'
' SendKeys – décocher seulement le premier item après “Sélectionner tout”
Sub SendKeys_DecocherPremierItem()
' Si le filtre est actif, le désactive pour repartir propre
If ActiveSheet.AutoFilterMode Then
On Error Resume Next ' en cas où aucun filtre appliqué
ActiveSheet.ShowAllData
On Error GoTo 0
End If
[A1].Select ' A modifier par la suite = Critére.Select
If Not ActiveCell Is Nothing Then
Dim sh As Object
Set sh = CreateObject("WScript.Shell")
' Ouvre le menu AutoFilter
sh.SendKeys "%{DOWN}", True
' Descend sur le premier item après "Sélectionner tout"
sh.SendKeys "{DOWN 9}", True ' premier item
sh.SendKeys " ", True ' décocher le premier item
' Valide et ferme le menu
sh.SendKeys "{ENTER}", True
End If
End Sub
' SendKeys – décocher tout et cocher le premier item
Sub SendKeys_DecocherTout_CocherPremier()
' Si le filtre est actif, le désactive pour repartir propre
If ActiveSheet.AutoFilterMode Then
On Error Resume Next ' en cas où aucun filtre appliqué
ActiveSheet.ShowAllData
On Error GoTo 0
End If
[A1].Select ' A modifier par la suite = Critére.Select
If Not ActiveCell Is Nothing Then
Dim sh As Object
Set sh = CreateObject("WScript.Shell")
' Ouvre le menu AutoFilter
sh.SendKeys "%{DOWN}", True
' Descend sur "Sélectionner tout" et décoche
sh.SendKeys "{DOWN 8}", True
sh.SendKeys " ", True ' décocher tout
' Descend sur le premier item et coche
sh.SendKeys "{DOWN}", True ' premier item
sh.SendKeys " ", True ' coche
' Valide et ferme le menu
sh.SendKeys "{ENTER}", True
End If
End Sub