Selectionner critère filtre un par un (Autofilter)

Bonjour,

Par macro, je souhaite pouvoir sélectionner les critères d'un filtre un par un .

J'ai donc pris les devant, j'ai essayé d'écrire ma macro mais en vain cette derniere refuse de s'éxécuter.

Voici mon code :

Sub Macro()
    Dim r As Range, c1 As Collection
    Dim msg As String
    Set c1 = New Collection

    Dim LastRow As Integer

    With Worksheets("Deal")
        LastRow = .Range("A" & Worksheets("Deal").Rows.Count).End(xlUp).Row
    End With

    On Error Resume Next
    For Each r In Range("P3:P" & LastRow)
        v = r.Value
        c1.Add v, CStr(v)
        If r.EntireRow.Hidden = False Then
            c2.Add v, CStr(v)
        End If
    Next
    On Error GoTo 0

    For i = 1 To c1.Count
        msg = msg & """" & ", " & """" & c1.Item(i)
    Next i

    msg = Right(msg, Len(msg) - 3)

    hkl = Array(msg)

    For i = 1 To c1.Count
      Range("P3:P134").Select
        Selection.AutoFilter Field:=16, Criteria1:=hkl(i)

    Next i

End Sub

J'ai un erreur au niveau de la ligne hkl = Array(msg)

Quelqu'un peut-il m'aider svp ?

Bonsoir,

Ben ! Ça ressemble pas à grand chose, un bon nombre de variables ne sont pas déclarées, eventuellement pas initialisées non plus, la syntaxe est quelque peu aléatoire...

Si ce code ne s'exécute pas, c'est encore ce qui pouvait lui arriver de mieux !

Tu ferais bien de fournir un fichier en indiquant le résultat que tu veux obtenir...

Cordialement.

Bonjour,

Hello MFerrand

Tu remplis deux collections mais tu n'en n'utilises qu'une (à savoir qu'un dictionnaire est plus rapide qu'une collection), tu définis la plage à filtrer sur la colonne P mais tu indiques que le filtrage doit porter sur le 16 ème champ de cette plage alors qu'il n'y en a qu'un (la colonne P). Cette ligne de code : hkl = Array(msg) ne peut pas te retourner le résultat escompté, utilises plutôt Split() Hkl = Split(msg, ",")

Et après tout ça, j'ai de la peine à saisir le souhait donc, donnes plus d'explications pour y voir plus clair !

Désolé du manque d'information.

Je vais essayé d'être plus clair, je souhaite parcourir les critères un par un d'un Autofilter qui se situe par exemple en B2.

Pour ensuite effectuer une action générique sur de chaque critère sélectionner.

Bonjour,

Donc tu fais d'abords un filtrage, ensuite tu boucle sur les lignes visibles pour récupérer les valeurs filtrées c'est ça ?

Oui c'est ça

Wouah ! Theze ! Avoir traduit que parcourir les critères c'était parcourir les lignes résultant du filtrage, je n'avais pas encore opéré cette traduction !

Bonjour MFerrand,

Depuis que je suis ici, je dois dire que j'ai dû apprendre à déchiffrer les messages des intervenants mais j'ai encore beaucoup de mal avec certains

Par contre (comme quoi je ne suis pas encore au top !) je ne saisis pas trop ceci :

je souhaite parcourir les critères un par un d'un Autofilter qui se situe par exemple en B2

qui se situe par exemple en B2 ça veut dire quoi en B2 ? C'est quoi qu'il y a en B2 ?

Ce que je veux obtenir c'est une macro qui cochera uniquement a, puis uniquement b, puis uniquement c et ainsi de suite lorsqu'on la lancera.

En gros la macro sélectionnera les critères un par un.

Au moment où la macro sera sur un critère, elle doit effectuer une action comme imprimer par exemple

Je pense que mes explications sont plus clair maintenant

Bonjour,

Un code à adapter et tester :

Sub Test()

    Dim Dico As Object
    Dim Plage As Range
    Dim Cel As Range
    Dim Critere As Variant
    Dim I As Long

    Set Dico = CreateObject("Scripting.Dictionary")

    'défini la plage sur la colonne A de la feuille active
    With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    'récupère les critères par dédoublonnage
    For Each Cel In Plage: Dico(Cel.Value) = "": Next Cel

    'récup des clés (les critères)
    Critere = Dico.Keys

    'filtrage
    For Each Critere In Dico.Keys

        Plage.AutoFilter
        Plage.AutoFilter 1, Critere

        'ici la récup du filtrage !

    Next Critere

    Plage.AutoFilter

End Sub
Rechercher des sujets similaires à "selectionner critere filtre autofilter"