Filtre multi colonnes et multi critères
Bonjour à tous !
Je souhaite choisir une donnée de ma base de données Feuille(« DB ») en réalisant plusieurs filtres graces à des combobox. J’ai récupérer le programme de Jacques Boisgontier ( Filtre Multi Colonnes avec 3 conditions) et je n’arrive pas a l’adapter.
Je ne peux meme pas regarder d’où viens mon problème car lorsque j’éxécute, le programme me surligne la partie de code qui affiche le UserForm…
Voici le code de mon UserForm :
Dim DaTas_DB(), ColVisu(), Ncol
Private Sub UserForm_Initialize()
Set f = Sheets("DB")
DaTas_DB = f.Range("A5:H" & f.[A65000].End(xlUp).Row).Value
Ncol = UBound(DaTas_DB, 2)
'--- combobox Types de données trié
Set d = CreateObject("Scripting.Dictionary")
d("*") = ""
For i = LBound(DaTas_DB) To UBound(DaTas_DB)
d(DaTas_DB(i, 6)) = ""
Next i
temp = d.keys
Tri temp, LBound(temp), UBound(temp)
Me.ComboBox_TyPe.List = temp
Me.ComboBox_TyPe.ListIndex = 0
'--- combobox profession trié
Set d = CreateObject("Scripting.Dictionary")
d("*") = ""
For i = LBound(DaTas_DB) To UBound(DaTas_DB)
d(DaTas_DB(i, 7)) = ""
Next i
temp = d.keys
Me.ComboBox_Géo.List = temp
Me.ComboBox_Géo.ListIndex = 0
'--- combobox année
Set d = CreateObject("Scripting.Dictionary")
d("*") = ""
TriMult DaTas_DB, LBound(DaTas_DB), UBound(DaTas_DB), 3
For i = LBound(DaTas_DB) To UBound(DaTas_DB)
d(DaTas_DB(DaTas_DB(i, 8))) = ""
Next i
temp = d.keys
Me.ComboBoxRech.List = temp
Me.ComboBoxRech.ListIndex = 0
Affiche
End Sub
Private Sub ComboBox_TyPe_click()
Affiche
End Sub
Private Sub ComboBox_Géo_click()
Affiche
End Sub
Private Sub ComboboxRech_Change()
Affiche
End Sub
Sub Affiche()
Dim Tbl()
ville = Me.ComboBox_TyPe
profession = Me.ComboBox_Géo
an = Me.ComboBoxRech
n = 0
For i = 1 To UBound(DaTas_DB)
If DaTas_DB(i, 6) Like ville And DaTas_DB(i, 7) Like profession And (Year(DaTas_DB(i, 3)) = Val(an) Or an = "*") Then
n = n + 1: ReDim Preserve Tbl(1 To Ncol, 1 To n)
For k = 1 To Ncol: Tbl(k, n) = DaTas_DB(i, k): Next k
End If
Next i
If n > 0 Then
Me.ListBox_DaTas.Column = Tbl
Me.Label3.Caption = Me.ListBox_DaTas.ListCount & " Ligne(s)"
Else
Me.ListBox_DaTas.Clear
Me.Label3.Caption = ""
End If
End Sub
Private Sub B_Raz_Click()
Me.ComboBox1 = "*"
Me.ComboBox2 = "*"
Me.ComboBox3 = "*"
End Sub
Sub TriMult(a, gauc, droi, ColTri) ' Quick sort
Ref = a((gauc + droi) \ 2, ColTri)
g = gauc: d = droi
Do
Do While a(g, ColTri) < Ref: g = g + 1: Loop
Do While Ref < a(d, ColTri): d = d - 1: Loop
If g <= d Then
For c = LBound(a, 2) To UBound(a, 2)
temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
Next
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call TriMult(a, g, droi, ColTri)
If gauc < d Then Call TriMult(a, gauc, d, ColTri)
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
Ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < Ref: g = g + 1: Loop
Do While Ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
Unload USF_Choix
End SubJe vous joint aussi mon fichier excel (feuille extraction ) :
J’espère que j’ai été assez clair et que ce problème n’est pas trop complexe.
Bonne journée a tous et merci d’avance
Bonjour,
J’espère que j’ai été assez clair.
Pas du tout, afin d'obtenir des réponses, plutôt que d'afficher du code, il serait préférable que vous décriviez les actions que vous vous voulez faire.
Cdlt
Bonjour à tous,
Pour un filtre multicritères, il y a un code de Jacques Boisgontier (merci à lui !
https://forum.excel-pratique.com/excel/filtrer-tableau-excel-a-partir-d-un-textbox-154376
Il fonctionne avec une seule textbox...
Cdlt,
Bonjour et merci pour vos réponses.
Alors pour le code de Jacques Boisgontier, j'ai regarder sur son site et j'ai choisi celui qui était le plus pertinent pour moi (c'est a dire le filtre multicolonnes avec 3 conditions) Je l'ai récupérer et adapter.
Je vais essayer d'être plus clair :
J'ai une donnée qui se trouve dans ma feuille DB, cette donnée est dans un tableau avec 8 colonnes.
Cette donnée a un nom (colonne 8) une origine géographique (colonne 6) et un type (colonne 4). Etant donnée que la base de donnée est trop volumineuse (20.000 lignes) je souhaite faciliter le choix de la donnée avec un "tri" --> On choisit le type de données (matière ou process etc..) cela va afficher que les matières de la DB. Puis on choisit l'origine géographique (Europe ou USA etc...) et cela est le deuxième critère pour réduire encore plus la liste. Pour finir il faut afficher dans la dernière listbox les données qui sont des matières européennes. L'utilisateur n'a plus qu'a cliquer sur la donnée qu'il souhaite pour l'insérer dans un tableau du excel (cela serviras par la suite mais chaque chose en son temps).
J'ai réaliser des modifs et cela a l'air de fonctionner (plus qu'a faire quelques réglages) :
--> Dans la listbox d'affichage il faut que j'affiche toute la ligne du tableau avec des labels pour chaque colonnes.
--> Maintenant il faut que la DB soit sur un autre fichier (externe et ouvert)....
Je ne clore pas encore le sujet si jamais vous avez des solutions pour les deux nouvelles problématiques.
Encore merci pour votre temps.