cco86260
Messages postés166Date d'inscriptiondimanche 22 janvier 2012StatutMembreDernière intervention30 juillet 2015
-
25 sept. 2014 à 08:26
cco86260
Messages postés166Date d'inscriptiondimanche 22 janvier 2012StatutMembreDernière intervention30 juillet 2015
-
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
jordane45
Messages postés37727Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention28 septembre 2023342 25 sept. 2014 à 10:14
Bonjour,
Je constate plusieurs erreurs dans ton code.
La première étant sur la ligne :
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"
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 ;)
jordane45
Messages postés37727Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention28 septembre 2023342 25 sept. 2014 à 14:01
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