XL 2016 VBA - Filtrer une colonne sur différentes valeurs

Dudu2

XLDnaute Barbatruc
Bonjour,
Comment puis-je construire l'instruction de filtrage dynamiquement et l'exécuter ?
VB:
'Cas 1 seule couleur choisie
ActiveSheet.ListObjects("TableauMacro2").Range.AutoFilter Field:=7, _
        Criteria1:="Jaune"

'Cas 2 (ou plusieurs) couleurs
ActiveSheet.ListObjects("TableauMacro2").Range.AutoFilter Field:=7, _
        Criteria1:="=Jaune", Operator:=xlOr, Criteria2:="=Rose"

Suis-je obligé de prévoir 1 instruction par nombre de couleurs choisies ou puis-je construire 1 seule instruction dans une variable String dynamiquement et l'exécuter ?
Merci par avance
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dudu,
J'ai testé ça et ça a l'air de marcher, avec ce simple test :
VB:
Chaine = Array("Jaune", "Rose")
ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:="=" & Chaine(0), _
    Operator:=xlOr, Criteria2:="=" & Chaine(1)
Si un paramètre n'est pas désiré il faut mettre "" mais il doit être présent dans l'array.
Pour tout défiltrer :
Code:
ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1
En espérant avoir tout compris.
 

Dudu2

XLDnaute Barbatruc
J'ai une autre question sur une sujet qui me pose problème.
Comment tester si un colonne d'un tableau structuré a un filtre actif ?
Avec une feuille c'est:
ActiveSheet.AutoFilter.Filters(7).On
Avec un tableau structuré:
ActiveSheet.ListObjects("TableauMacro2").Range.AutoFilter.Filters(7).On part en erreur Variable objet ou variable de bloc With non définie
 

fanch55

XLDnaute Barbatruc
Pas bon ma main levée , cela indique en fait que le tableau est filtré, pas quelle colonne .
Pour dé filtrer une colonne précise, je ferai plutôt ainsi :
Code:
    Mytab = "Tableau1"
    Mycol = "Colonne2"
    With Range(Mytab).ListObject
        If Not .AutoFilter Is Nothing Then
           .Range.AutoFilter .ListColumns(Mycol).Index ' <- pour 1 colonne
          ' .AutoFilter.ShowAllData                    ' <- pour toute la table
        End If
    End With
 

fanch55

XLDnaute Barbatruc
Sinon, pour le filtrage de couleur, criteria1 suffit :
VB:
Sub Filtre()
    Mytab = "Tableau1"
    Mycol = "Colonne1"
    Col = Array("orange", "rose", "vert")
    With Range(Mytab).ListObject
        .AutoFilter.ShowAllData
        .Range.AutoFilter _
            Field:=.ListColumns(Mycol).Index, _
            Criteria1:=Array("orange", "rose", "vert")
        ' ou
        .Range.AutoFilter _
            Field:=.ListColumns(Mycol).Index, _
            Criteria1:=Col
    End With
End Sub
 

Discussions similaires

Réponses
1
Affichages
2 K
Compte Supprimé 979
C
Réponses
2
Affichages
655