Filtrer une colonne avec une listbox [Résolu]

Signaler
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
-
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
-
Bonjour le forum,

Donc voilà, je reviens vers vous avec un nouveau problème, je vous explique :

J'ai une feuille nommé bilan, sur ce bilan se trouve plusieurs colonne dont une nommée semaine, de là, j'ai créé un USF avec une ListBox, 2 boutons

1 pour lancer le filtre, et un pour annulé mais mon code ne fonctionne pas, j'ai voulu me débrouiller, mais pas bon...

Le but est de filtrer la colonne semaine, a savoir que le multiselect est utilisé, c'est peut être là mon problème...

Voici le code :

Private Sub CommandButton1_Click()
'code du filtre à mettre en place
Dim lbVal As Long

If ListBox2.ListIndex = -1 Then Exit Sub
'Not sure that I need the next line. Listbox is a SingleSelect.
For i = ListBox2.ListCount - 1 To 0 Step -1
If ListBox2.Selected(i) = True Then
lbVal = ListBox2.Selected(i)
Range("B3:B").AutoFilter Field:=lbVal, Criteria1:=lbVal
End If
Next i
End Sub

Je ne vous cache pas que ça ne fonctionne pas...

Auriez vous une solution ?

Merci à tous et bonne journée

Christian

--

4 réponses

Messages postés
32518
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2021
348
Bonjour,

Je constate plusieurs erreurs dans ton code.
La première étant sur la ligne :
 Range("B3:B").AutoFilter Field:=lbVal, Criteria1:=lbVal

Tu n'aurais pas oublié quelque chose dans le RANGE ?

Ensuite .. FIELD : C'est le Numéro de la colonne où appliquer le filtre

Criteria(1,2,3,..) : on lui passe une "string"

Et enfin.. si ta liste est en multiselect... il y donc plusieurs FILTRES à appliquer (plusieurs critères) sur la même colonne.
Il ne faut pas appliquer CHAQUE filtre les UNS après les autres... mais tous en même temps.

Si tu utilises ton enregistreur de macros, tu verras que le code à utiliser ressemble à :
'activation du filtre sur la ligne où je me trouve
Range("A1").Select
 Selection.AutoFilter
'j'ai mis deux critères : 
    ActiveSheet.Range("$A$1:$D$8").AutoFilter Field:=2, Criteria1:="=dfs", _
        Operator:=xlOr, Criteria2:="=dfsdfsg"


Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
Salut jordan45

En effet, il y a des erreurs... les joies de l'autodidacte... j'ai voulu me débrouiller... mais y a encore du boulot...lol.

Donc voici ce que j'ai corrigé, y a du résultat mais pas celui désiré... comme tu dois t'en douter :)

Voici le code (je te met également le UserForm_Initialise...

Private Sub UserForm_Initialize()


'Affiche les éléments la ListBox
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("B65536").End(xlUp).Row

On Error Resume Next
'boucle sur les cellules de la colonne A
For Each Cell In Range("B3:B" & i)
'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.ListBox2.AddItem Valeur
Next Valeur
End Sub

Private Sub CommandButton1_Click()
'code du filtre à mettre en place
Dim lbVal As String

If ListBox2.ListIndex = -1 Then Exit Sub
'Not sure that I need the next line. Listbox is a SingleSelect.
'n'y aurait il pas un soucis ici aussi ?
For i = ListBox2.ListCount - 1 To 0 Step -1
If ListBox2.Selected(i) = True Then
Range("B3").Select
Selection.AutoFilter
lbVal = ListBox2.Selected(i)
'Je n'ai pas tout compris a ce niveau
ActiveSheet.Range("B:B").AutoFilter Field:=2, Criteria1:=lbVal
End If
Next i
End Sub


Cependant je me suis surement mal expliqué :

Mon souhait est que lorsque je clique sur mon bouton "Lancer le filtre", il me filtre ma colonne voulu, c'est dire la B a partir de B3, cette colonne contiendra au final plusieurs n° de semaine, donc dans ma listbox si je selectionne 31,32,33 il me fait apparaitre dans mon tableau ma sélection...

En attendant, merci de te pencher à nouveau sur mon problème ;)

Christian
Messages postés
32518
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2021
348
Bonjour,

Il faut stocker les valeurs à filtrer dans un ARRAY
Ensuite... tu l'utilises pour filtrer

Private Sub CommandButton1_Click()
'code du filtre à mettre en place
    Dim lbVal As String
    Dim arrCriteres()
    If ListBox2.ListIndex = -1 Then Exit Sub
     'Not sure that I need the next line.  Listbox is a SingleSelect.
    For i = 0 To ListBox2.ListCount - 1
        If ListBox2.Selected(i) = True Then
            lbVal = ListBox2.List(i)
            ReDim Preserve arrCriteres(i)
            arrCriteres(i) = lbVal
        End If
    Next i
    Range("A2:C10").AutoFilter Field:=1, _
                      Criteria1:=arrCriteres, _
                      Operator:=xlFilterValues
    
End Sub


Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
Re,

Merci Jordane45, ça fonctionne nickel, je classe donc en résolu ;)

A bientôt pour de nouvelles aventures...mdr


Christian

--