XL 2021 Filtre Multi Critères Listview VBA

delsart59

XLDnaute Nouveau
Bonjour à tous,

Je viens à vous car j'arrive à la derniere étape de mon projet de fin d'étude qui consiste à créer une Database. J'ai donc créé un Userform et je vous met la capture ci dessous.

1713356854827.png


Pour chaque liste déroulante, j'arrive à filtrer les colonnes associées, (c'est déjà une bonne premiere étape). Maintenant, j'aimerais que ma listview prenne en compte plusieurs combobox et textbox pour affiner les recherches sans ajouter de bouton click. Actuellement ce n'est pas problématique car je n'ai pas beaucoup de lignes mais à l'avenir cela va se remplir.

Voici comment j'ai initialisé mes comboboxs :

''Copie des infos du formulaire dans la base de données

Function copy_from_form()
Dim lastRow As Long
lastRow = ActiveWorkbook.Sheets("Base de données").Range("A1000000").End(xlUp).Row
lastRow = lastRow + 1
With ActiveWorkbook.Sheets("Base de données")
.Range("A" & lastRow).Value = ComboBox6.Value
.Range("B" & lastRow).Value = ComboBox7.Value
.Range("C" & lastRow).Value = ComboBox1.Value
.Range("D" & lastRow).Value = ComboBox3.Value
.Range("E" & lastRow).Value = TextBox9.Value
.Range("G" & lastRow).Value = TextBox8.Value
.Range("F" & lastRow).Value = TextBox11.Value
.Range("H" & lastRow).Value = ComboBox4.Value
.Range("I" & lastRow).Value = ComboBox5.Value
.Range("J" & lastRow).Value = TextBox12.Value
.Range("K" & lastRow).Value = TextBox4.Value
End With
End Function



Voici laProcédure permettant d'afficher l'enregistrement selectionné dans les différents TextBox du formulaire

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
TxtProjet = ListView1.SelectedItem.SubItems(1)
TxtScope = ListView1.SelectedItem.SubItems(2)
TxtPhase = ListView1.SelectedItem.SubItems(3)
TxtGate = ListView1.SelectedItem.SubItems(4)
TxtCommodités = ListView1.SelectedItem.SubItems(5)
TxtProblèmerencontré = ListView1.SelectedItem.SubItems(6)
TxtDatedévènement = ListView1.SelectedItem.SubItems(7)
TxtourceProblème = ListView1.SelectedItem.SubItems(8)
TxtFamilledecause = ListView1.SelectedItem.SubItems(9)
TxtLiendAnalyse = ListView1.SelectedItem.SubItems(10)
TxtTempsperdu = ListView1.SelectedItem.SubItems(11)

' add hyperlink handling
Dim Link As String
Link = ListView1.SelectedItem.ListSubItems(10).Text
If Left(Link, 4) = "http" Then
ActiveWorkbook.FollowHyperlink (Link)
End If
End Sub

Voici ma fonction de recherche avec le combox6 (le premier)


Function FilterDataInListView()
Dim i As Long
Dim searchText As String
Dim j As Long
searchText = LCase(ComboBox6.Text)

ListView1.ListItems.Clear
For i = 1 To Sheets("Base de données").Cells(Rows.Count, 1).End(xlUp).Row
If InStr(1, LCase(Sheets("Base de données").Cells(i, 1).Value), searchText) > 0 Then
With ListView1.ListItems.Add(, , Sheets("Base de données").Cells(i, 1).Value)
For j = 1 To 11
.ListSubItems.Add , , Sheets("Base de données").Cells(i, j).Value
Next j
End With
End If
Next i

End Function

Et pour finir, voici le code permettant de faire appelle à la fonction :

Private Sub ComboBox6_Change()
Call FilterDataInListView
End Sub


S'il vous plait venez moi en aide cela fait deux jours que je cherche sur Internet.

Merci d'avance
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Le principe est d'installer les modules de service nécessaires (dont un seul standard, les autres de classe), de déclarer un Private WithEvents CLs As ComboBoxLiées en tête, dans la Sub UserForm_Initialize de l'initialiser puis de lui confier les ComboBox à gérer par une série de CLs.Add CBx…, "Intitulé". Terminer tout ça par un premier CLs.Actualiser
 

delsart59

XLDnaute Nouveau
Le principe est d'installer les modules de service nécessaires (dont un seul standard, les autres de classe), de déclarer un Private WithEvents CLs As ComboBoxLiées en tête, dans la Sub UserForm_Initialize de l'initialiser puis de lui confier les ComboBox à gérer par une série de CLs.Add CBx…, "Intitulé". Terminer tout ça par un premier CLs.Actualiser
Tu m'as perdu je t'avoue. j'ai bien un userform_initialize pour le reste je ne vois ce que tu veux dire mais en pratique je n'ai aucune idée de comment faire.
 

Dranreb

XLDnaute Barbatruc
Je vous équiperais des modules de services nécessaires un classeur restant à joindre où vous aurez appliqué le reste de ce que j'ai dit (sans comprendre puisque vous ne m'avez pas demandé d'éclaircissement sur ce que vous n'avez pas compris).
Et le "comment faire" on s'en fout puisque ce sont des modules de service qui le font, la seule à savoir étant la façon de leur demander de le faire.
 

Discussions similaires

Statistiques des forums

Discussions
315 116
Messages
2 116 404
Membres
112 742
dernier inscrit
julien.sch