VBA - Filtrer sur une liste de valeurs dynamiques

jeremie78420

XLDnaute Nouveau
Bonjour,
J'ai une base de données. Je voudrais filtrer cette base de données pour qu'elle n'affiche que les colonnes contenant au moins des chaines de caractères définies dans une autre feuille.


Par exemple, si ma colonne x est :
ABCDABCD
BCDEBCDE
CDEFCDEF
MEFTGUIOO

et l'ensemble de mes valeurs pour lesquelles je veux trouver les cellules de la colonne x est :
ABC
DEF

Alors, la colonne x filtrée sera :
ABCDABCD
CDEFCDEF​


Jusqu'ici, pas de soucis, je peux utiliser par exemple code suivant :
Code:
  ActiveSheet.Range("$A$1:$DB$10000").AutoFilter Field:=4, Criteria1:=Array( _
"=*ABC*", "=*DEF*"), Operator:=xlFilterValues

Mais, voici deux raisons qui font que je ne peux pas employer ce code :
- Premièrement dans ma base de données cette liste est assez longue (100 entrées minimum)
- Deuxièmement elle est amenée à être modifiée régulièrement

Ce dont j'ai besoin :
- Cette liste sera enregistrée dans une feuille à part. Il faudrait qu'au lieu d'avoir
Code:
Array( _
"=*ABC*", "=*DEF*", "=*EFT*")
, les valeurs à regarder renvoient vers cette feuille

J'espère que je suis assez clair, si ce n'est pas dites le moi et j'essaierai d'être le plus précis possible à nouveau
Merci en avance
Jeremie
 

MichD

XLDnaute Impliqué
Re : VBA - Filtrer sur une liste de valeurs dynamiques

Bonjour,

Ce qui suit s'applique seulement à partir de la version Excel 2007.

Supposons que tu as une plage nommée "PlgCritere" où sont compris tous les éléments : ABC, DEF, EFT à raison
d'un élément par formule. Tu peux utiliser la fonction "Decaler" pour définir la plage "PlgCritere".

Tu peux faire construire ton tableau (array) avant d'appliquer le filtre.

Le hic, c'est que je n'ai aucune idée du nombre limite d'items que peut contenir le tableau
pour effectuer un filtre! Le sais-tu? Si oui, peux-tu nous le communiquer?


VB:
Sub Test()
Dim Arr()

 With .Range("PlgCritere")
      ReDim Arr(1 To .Rows.Count)
      For Each c In .Cells
          a = a + 1
          'Tu construit le tableau
          Arr(a) = "=*" & c.Value & "*"
      Next
 End With
With ActiveSheet
    .Range("$A$1:$DB$10000").AutoFilter Field:=4, Criteria1:=Arr, Operator:=xlFilterValues   
End With
End Sub

Tu as une approche similaire là + un fichier exemple que tu peux télécharger.
Excel AutoFilter With Criteria in a Range « Contextures Blog

Il semble que si tu utilises les "WildCard" avec plus de 2 critères, le filtre éprouve des problèmes.
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
351

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote