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