Filtrer avec 3 conditions pouvant changer

Bonjour,

Dans le fichier excel joint, je cherche à filtrer la colonne D pour ne faire apparaître que les lignes comportant les codes commençant par 216/217/218.

J'ai déjà des filtres pour 1 critère, ex pour , n'afficher que ceux qui commence par 121

ActiveSheet.Outline.ShowLevels RowLevels:=0, columnlevels:=1
ActiveSheet.Range("$A$4:$KT$2000").AutoFilter Field:=1, Criteria1:="<>"
ActiveSheet.Range("$A$4:$KT$2000").AutoFilter Field:=4, Criteria1:="=121*", _
Operator:=xlAnd

J'ai également ceux pour 2 critères , par exemple 202 et 203

' ActiveSheet.Outline.ShowLevels RowLevels:=0, columnlevels:=1
ActiveSheet.Range("$A$4:$KT$2000").AutoFilter Field:=1, Criteria1:="<>"
ActiveSheet.Range("$A$4:$KT$2000").AutoFilter Field:=4, Criteria1:="=202*" _
, Operator:=xlOr, Criteria2:="=203*"

J'avais pensé à la commande Array mais il faut sélectionner la totalité des codes or le fichier est amené à évoluer régulièrement. La seule constante est que cela commencera toujours par 216/217/218.

J'ai également tenté de le critère "=21*" mais cela inclut les 211 et 215 qui ne doivent pas apparaître et si on fait exclure par exemple les 5, si le code est 217A5 cela n'apparaît pas.

J'avais pensé à faire un premier filtre triant 2 critères et un autre avec le 3ème critère et essayer de les "coller" avec Call mais cela ne doit pas être le but de la fonction.

J'avais aussi pensé à un filtre à la couleur, en imaginant que les lignes soient de la même couleur mais les lignes blanches doivent le rester et apparaître.

Si vous avez des idées je suis preneuse, j'ai l'impression en regardant le net que ce n'est pas possible mais je me trompe peut être.

Merci!

9exemple.zip (599.88 Ko)

Bonjour PetiteStef,

Voici un code qui devrait convenir

Option Explicit
Option Base 1

Sub Filtrer216_217_218()
  Dim dLig As Long, Ind As Long, Lig As Long
  Dim TabVal() As String
  With Sheets("2018")
    dLig = .Range("D" & Rows.Count).End(xlUp).Row
    For Lig = 5 To dLig
      If .Range("D" & Lig) Like "216*" Or _
        .Range("D" & Lig) Like "217*" Or .Range("D" & Lig) Like "218*" Then
        Ind = Ind + 1
        ReDim Preserve TabVal(Ind)
        TabVal(Ind) = .Range("D" & Lig)
      End If
    Next Lig
    .Range("$A$4:$M$1304").AutoFilter Field:=4, Criteria1:=Array(TabVal), Operator:=xlFilterValues
  End With
End Sub

A+

Hello,

Edit : Salut Bruno

Tu ne peux pas utiliser + de 2 critères dans les filtres classiques :

ActiveSheet.Range("$A$4:$M$1304").AutoFilter Field:=4, Criteria1:="=216*", Criteria2:="=217*", Operator:=xlOr

Donc à partir de là, tu peux utiliser la bonne vieille méthode de la boucle qui ne déçoit jamais, voici un exemple :

Sub MultiFilter()

    Dim rng As Range, r As Range
    Set rng = Worksheets(1).Range("D5:D1304")

    For Each r In rng
        v = Left(r.Value, 3)
        If v = "216" Or v = "217" Or v = "218" Then
            r.EntireRow.Hidden = False
        Else
            r.EntireRow.Hidden = True
        End If
    Next r
End Sub

Mais ce n'est pas la + performante.

Ensuite tu as les filtres avancés, mais avec tes cellules fusionnées je doute que ça fasse bon ménage ...

Ensuite, tu pourrais faire un tri sur ta colonne D, puis récupérer la première ligne et dernière ligne selon tes critères et masquer tout ce qui est avant et après ces lignes, Par contre si tu as d'autres critères sur d'autres colonne ça risque d'être compliqué

Tu peux le faire avec une instruction SQL aussi.

Et je pense que c'est tout

Salut Rag02700

Oula ... ou t'en vas-tu

Regarde mon fichier et tu verras que ça peut être tout simple

A+

En effet, je n'ai pas pensé du tout à ça

Je suis pas trop du matin

++

Rechercher des sujets similaires à "filtrer conditions pouvant changer"