web-dev-qa-db-fra.com

Utilisation d'un tableau de chaînes comme critère dans le filtre automatique VBA

J'ai recherché d'autres messages et trouvé des problèmes similaires, mais rien qui pourrait m'aider spécifiquement. J'essaie de prendre un tableau de chaînes et de l'utiliser comme critère de filtre. C'est délicat car le tableau est créé par une fonction et a un nombre variable d'éléments et de contenu. J'ai besoin du filtre automatique pour le prendre et vérifier colonne E pour chacun de ses éléments.

Je l'ai essayé de deux manières

1)

With Sheet17

 .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr)

End With

Résultat: applique un filtre à la colonne E mais ne parvient à sélectionner aucune des options

2)

For i = 0 To counter - 1

  With Sheet17

    .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i))
End With

Next

Remarque: Le compteur est un entier représentant le nombre d'éléments dans le tableau Résultat: celui-ci boucle correctement dans le tableau mais ne sélectionne que la dernière option sur le filtre - probablement parce que chaque fois qu'il revient en boucle, il recommence et décoche toutes les autres options afin à la fin, seule l'option la plus récente reste cochée.

7
slzar

Vous n'avez pas besoin de transposer un seul élément d'un tableau et vous ne pouvez pas mettre de critères dans le 5e si vous ne faites référence qu'à la colonne E.

Dim i As Long, arr As Variant
arr = Array(1, 3)

With Sheet17
    'to filter each value in the array one at a time
    For i = 0 To UBound(arr)
        .Columns("E").AutoFilter Field:=1, Criteria1:=arr(i)
    Next i

    'my values were numbers - AutoFilter likes strings in its array
    For i = LBound(arr) To UBound(arr)
        arr(i) = CStr(arr(i))
    Next i

    'to filter all values in the array at once specify xlFilterValues
    .Columns("E").AutoFilter Field:=1, Criteria1:=arr, _
                             Operator:=xlFilterValues
End With

Spécifie le Operator:=xlFilterValues lors du passage d'un tableau et la méthode Range.AutoFilter aime les chaînes comme valeurs dans un tableau.

10
user4039065

La documentation Excel pour Filtre automatique fournit quelques conseils. Le paramètre Operator prend un XlAutoFilterOperator qui spécifie comment Criteria1 est interprété. Dans votre cas, si vous spécifiez une valeur de xlFilterValues, Criteria1 à interpréter correctement comme un tableau de valeurs de filtre.

L'exemple suivant le démontre:

Dim arr As Variant
arr = Array("Alpha", "Bravo", "Charlie")

Sheet17.Range("E1").AutoFilter _
    Field:=5, _
    Criteria1:=arr, _
    Operator:=xlFilterValues
6
Brett Wolfington