Filtrer une colonne avec une listbox [Résolu]

cco86260 166 Messages postés dimanche 22 janvier 2012Date d'inscription 30 juillet 2015 Dernière intervention - 25 sept. 2014 à 08:26 - Dernière réponse : cco86260 166 Messages postés dimanche 22 janvier 2012Date d'inscription 30 juillet 2015 Dernière intervention
- 25 sept. 2014 à 17:10
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

--
Afficher la suite 

4 réponses

Répondre au sujet
jordane45 20561 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention - 25 sept. 2014 à 10:14
0
Utile
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"


Commenter la réponse de jordane45
cco86260 166 Messages postés dimanche 22 janvier 2012Date d'inscription 30 juillet 2015 Dernière intervention - Modifié par cco86260 le 25/09/2014 à 12:59
0
Utile
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
Commenter la réponse de cco86260
jordane45 20561 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 avril 2018 Dernière intervention - 25 sept. 2014 à 14:01
0
Utile
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


Commenter la réponse de jordane45
cco86260 166 Messages postés dimanche 22 janvier 2012Date d'inscription 30 juillet 2015 Dernière intervention - 25 sept. 2014 à 17:10
0
Utile
Re,

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

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


Christian

--
Commenter la réponse de cco86260

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.