[VBA] Problème de filtr
Résolu
Kodie31
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Kodie31 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Kodie31 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je vous explique le context.
Je recois des rapports d'analyses qui sont sous la forme de fichiers Excel avec un nom du genre : "VOS 140796-IMP.xls" qui renferme des feuilles avec des numéros de lot du genre : "Lot I00450" qui sont toutes les mêmes.
Ce que j'ai fait :
- J'ai fait un bouton pour extraire les données de ces fichiers pour remplir ma BDD,
- Un autre bouton qui colorie les champs en fonction de certains criteres (BREF...)
- un bouton qui analyse et note une "X" dans la colone 20 de la BDD
Je dois maintenant faire un bouton qui envoie ce qu'on veut par mail via outlook... ca aussi j'y arrive.
Par contre : pour ce dernier bouton, j'ai un principal probleme. En fait j'utilise un useform composé de 2 ComboBox, 2 boutons de commande associés, 1 ListBox et un bouton de commande en bas qui valide tout.
Ce que je veux faire :
- 2 facons de remplir la ListBox :
- le premier combobox dans lequel on choisit les rapports par fichiers ("VOS 140796-IMP.xls") et qui remplit la ListBox avec les feuilles ("Lot I00450") qui se trouvent dans la colonne à coté.
- Le deuxième combobox dans lequel on choisit directement les feuilles ("Lot I00450")
- Après avoir permi la selection de plusieurs Items de la ListBox en même temps, je veux appliquer un filtre à ma BDD pour obtenir seulement les lignes correspondant à mes numéros de Lot ("Lot I00450"). Le but étant d'obtenir un mini-tableau que je pourrai envoyer par mail à mes fournisseurs.
C'est ICI que je bloque. En effet, je n'arrive pas à filtrer la colone à partir du premier ITEM de la ListBox, puis en fonction des suivants, MAIS tout en gardant les premiers. Autrement dit, c'est comme si à la main, je ne cochait que les cases correspondant aux items de ma ListBox, pour obtenir un tableau constitués seulement des lignes voulues. Ca ne me filtre que 1 à la fois, comme si quand je coche, l'autre se décoche.
Ai-je été clair ?
Voici le code de mon filtre : (je n'ai pas trouvé comment le baliser)
_____________________
Private Sub CommandButton4_Click()
fiats = Application.WorksheetFunction.CountA(Feuil1.Range("$D:$D"))
For tric = 1 To fiats
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
If Sheets("Feuil1").Cells(tric, 4) = ListBox1.List(i) Then
Sheets("Feuil1").Range("A1").AutoFilter Field:=4, Criteria1:=ListBox1.List(i)
End If
End If
Next i
Next tric
End Sub
______________________
Dites moi si vous voulez tous le code
Merci d'avance
Kodie
EDIT : voilà un lien pour télécharger mon fichier... les boutons qui posent problème ont un nom explicite ^^ https://www.cjoint.com/?DGbs2fpHA93
Je recois des rapports d'analyses qui sont sous la forme de fichiers Excel avec un nom du genre : "VOS 140796-IMP.xls" qui renferme des feuilles avec des numéros de lot du genre : "Lot I00450" qui sont toutes les mêmes.
Ce que j'ai fait :
- J'ai fait un bouton pour extraire les données de ces fichiers pour remplir ma BDD,
- Un autre bouton qui colorie les champs en fonction de certains criteres (BREF...)
- un bouton qui analyse et note une "X" dans la colone 20 de la BDD
Je dois maintenant faire un bouton qui envoie ce qu'on veut par mail via outlook... ca aussi j'y arrive.
Par contre : pour ce dernier bouton, j'ai un principal probleme. En fait j'utilise un useform composé de 2 ComboBox, 2 boutons de commande associés, 1 ListBox et un bouton de commande en bas qui valide tout.
Ce que je veux faire :
- 2 facons de remplir la ListBox :
- le premier combobox dans lequel on choisit les rapports par fichiers ("VOS 140796-IMP.xls") et qui remplit la ListBox avec les feuilles ("Lot I00450") qui se trouvent dans la colonne à coté.
- Le deuxième combobox dans lequel on choisit directement les feuilles ("Lot I00450")
- Après avoir permi la selection de plusieurs Items de la ListBox en même temps, je veux appliquer un filtre à ma BDD pour obtenir seulement les lignes correspondant à mes numéros de Lot ("Lot I00450"). Le but étant d'obtenir un mini-tableau que je pourrai envoyer par mail à mes fournisseurs.
C'est ICI que je bloque. En effet, je n'arrive pas à filtrer la colone à partir du premier ITEM de la ListBox, puis en fonction des suivants, MAIS tout en gardant les premiers. Autrement dit, c'est comme si à la main, je ne cochait que les cases correspondant aux items de ma ListBox, pour obtenir un tableau constitués seulement des lignes voulues. Ca ne me filtre que 1 à la fois, comme si quand je coche, l'autre se décoche.
Ai-je été clair ?
Voici le code de mon filtre : (je n'ai pas trouvé comment le baliser)
_____________________
Private Sub CommandButton4_Click()
fiats = Application.WorksheetFunction.CountA(Feuil1.Range("$D:$D"))
For tric = 1 To fiats
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
If Sheets("Feuil1").Cells(tric, 4) = ListBox1.List(i) Then
Sheets("Feuil1").Range("A1").AutoFilter Field:=4, Criteria1:=ListBox1.List(i)
End If
End If
Next i
Next tric
End Sub
______________________
Dites moi si vous voulez tous le code
Merci d'avance
Kodie
EDIT : voilà un lien pour télécharger mon fichier... les boutons qui posent problème ont un nom explicite ^^ https://www.cjoint.com/?DGbs2fpHA93
1 réponse
c'est bon un ami a trouvé mon problème
ce sujet est donc résolu !
solution :
____________________
Dim u As String
Dim v(20) As String
fiats = Application.WorksheetFunction.CountA(Feuil1.Range("$D:$D"))
For tric = 2 To fiats
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
If Sheets("Feuil1").Cells(tric, 4) = ListBox1.List(i) Then
v(i) = ListBox1.List(i)
Sheets("Feuil1").Range("A1").AutoFilter Field:=4, Criteria1:=v, Operator:=xlFilterValues
End If
End If
Next i
Next tric
___________________
Trop lents les gars :p (je déconne)
ce sujet est donc résolu !
solution :
____________________
Dim u As String
Dim v(20) As String
fiats = Application.WorksheetFunction.CountA(Feuil1.Range("$D:$D"))
For tric = 2 To fiats
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
If Sheets("Feuil1").Cells(tric, 4) = ListBox1.List(i) Then
v(i) = ListBox1.List(i)
Sheets("Feuil1").Range("A1").AutoFilter Field:=4, Criteria1:=v, Operator:=xlFilterValues
End If
End If
Next i
Next tric
___________________
Trop lents les gars :p (je déconne)