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.
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.
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