[VBA excel] Récupérer dans une liste box les choix d'un AutoFilter [Résolu]

Signaler
Messages postés
46
Date d'inscription
dimanche 27 février 2005
Statut
Membre
Dernière intervention
28 novembre 2007
-
Messages postés
46
Date d'inscription
dimanche 27 février 2005
Statut
Membre
Dernière intervention
28 novembre 2007
-
bonjour
 
Est-il possible, dans un userform, de récupérer et d'afficher dans une listbox le résultat (sans doublon) d'un filtre automatique ?
 
J'ai un bouton das le userform qui execute les filtres :

<ol><li class="li1">
Selection.AutoFilter Field:=1
</li><li class="li1">
Selection.AutoFilter Field:=8, Criteria1:="="
</li></ol>et donc j'aimerais affichier dans le listbox les choix possible du Field 1
 
 
vous avez une petite idée ?
Merci beaucoup !!

2 réponses

Messages postés
46
Date d'inscription
dimanche 27 février 2005
Statut
Membre
Dernière intervention
28 novembre 2007

Merci.
Ça foncitonne avec le code suivant :

    Dim Cell As Range
    Dim Unique As New Collection
    Dim Valeur As Range
    Dim i As Integer
   
    'Récupère la derniere ligne non vide dans la colonne A
    i = Range("A65536").End(xlUp).Row
   
    On Error Resume Next
    'boucle sur les cellules de la colonne A
    For Each Cell In Range("A8:A" & i)
    If Not Cell.EntireRow.Hidden Then Unique.Add Cell, CStr(Cell)
        'Stocke les données dans une collection
        '(La collection n'accepte que des données uniques et permet donc
        ' de filtrer facilement les doublons).
        'Unique.Add Cell, CStr(Cell)
    Next Cell
    On Error GoTo 0
   
    'Boucle sur le contenu de la collection pour alimenter la ListBox
    For Each Valeur In Unique
        Me.ListBox1.AddItem Valeur
    Next Valeur
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut,


Je ne sais pas si c'est le genre de chose que tu recherches, mais bon,
je te le mets quand même. Il y a peut-être d'autres façons de procéder,
mais c'est celle que j'utiliserais en attendant d'en trouver une
meilleure...


Private Sub CommandButton1_Click()

    Dim Cellule As Range

    Dim nbLignes As Long

   

    'Nombre de lignes à lire

    nbLignes = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row

   

    'Parcourir toutes les cellules laissées visibles par le filtre (ici colonne C)

    For Each Cellule In Range("C1:C" & nbLignes).SpecialCells(xlCellTypeVisible)

        If Not IsInList(Cellule) Then

            ListBox1.AddItem Cellule

        End If

    Next

   

End Sub


'Fonction qui vérifie si la valeur est déjà dans la liste

Function IsInList(Valeur) As Boolean

    Dim I As Integer

   

    For I = 0 To ListBox1.ListCount - 1

        If CStr(Valeur) = ListBox1.List(I) Then

            IsInList = True

            Exit For

        End If

    Next

End Function

MPi