Voici une petite démo qui vous permettra de filtrer "on the fly" le contenu d'une listview, en sélectionnant au préalable le champ sur lequel le filtre doit être appliqué. Enjoy !
Source / Exemple :
Option Explicit
Private Sub TextBox1_Change()
Call LVW_Fill(Trim$(TextBox1.Text), ComboBox1.ListIndex)
End Sub
Private Sub UserForm_Activate()
Me.Caption = "Historique des commandes"
Set ListView1.Icons = ImageList1
Set ListView1.SmallIcons = ImageList1
Call CBO_Fill
Call LVW_Fill("", 0)
End Sub
Private Sub CBO_Fill()
'Variables locales
Dim iCnt As Integer
Dim oRng As Excel.Range
'Remplit la Combo
Set oRng = Feuil1.Cells(1, 1)
For iCnt = 0 To 13 '-- 14 colonnes
ComboBox1.AddItem oRng.Offset(0, iCnt)
Next iCnt
ComboBox1.ListIndex = 0
End Sub
Private Sub LVW_Fill(ByVal sFilter As String, ByVal iCol As Integer)
'Variables locales
Dim iCnt As Integer
Dim iRnd As Integer
Dim oRng As Excel.Range
Dim oItem As ListItem
'Initialisation de la ListView
ListView1.ColumnHeaders.Clear
ListView1.FullRowSelect = True
ListView1.ListItems.Clear
ListView1.View = lvwReport
'Remplissage de la ListView
Set oRng = Feuil1.Cells(1, 1)
Do Until oRng.Offset(1, 0).Value = ""
'-- En-têtes
If oRng.Row = 1 Then
For iCnt = 0 To 13 '-- 14 colonnes
ListView1.ColumnHeaders.Add , , oRng.Offset(0, iCnt)
Next iCnt
'-- Données
Else
iRnd = Int((4 * Rnd) + 1)
If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then
Set oItem = ListView1.ListItems.Add(, , oRng.Offset(0, 0), "Key" & iRnd, "Key" & iRnd)
For iCnt = 1 To 14 '-- 14 colonnes
oItem.ListSubItems.Add , , oRng.Offset(0, iCnt)
Next iCnt
End If
End If
Set oRng = oRng.Offset(1, 0)
Loop
End Sub
Conclusion :
Vous pouvez modifier cette source à volonté pour pouvoir la personnaliser. Toute question ou suggestion est la bienvenue.
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.