Excel vba - filtrer le contenu d'une listview

Soyez le premier à donner votre avis sur cette source.

Vue 29 803 fois - Téléchargée 3 220 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

klhsri
Messages postés
6
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
2 janvier 2009
-
Excellent !
Je me forme à VBA (excel notamment)
Excellent code et directement utile pour toute appli de gestion
Merci
7ric
Messages postés
2
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
13 novembre 2007
-
Excellent code effectivement.
Juste un petit problème:
Dans la feuille Excel, nous avons la dernière commande 11077.
Cette commande n'est pas reprise dans l'historique des commandes et ne pourra donc jamais être reprise.
Avez-vous pu corriger ce petit problème?
Merci d'avance,
Cédric
cs_lesly_lodin
Messages postés
13
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
12 janvier 2010
-
Il suffit de remplacer [Do Until oRng.Offset(1, 0).Value = ""] par [Do Until oRng.Value = ""] dans la partie "Remplissage de la ListView" de la procédure [LVW_Fill].

Cdlt
7ric
Messages postés
2
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
13 novembre 2007
-
OK merci beaucoup
Cédric
cs_card
Messages postés
3
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
29 mai 2008
-
Salut

Super ce petit bout de code !!!

Pouvez vous m'aider ?
J'ai une colonne status et l'image doit changer en fonction du status
Comment faire puisque dans le code initial il ya un random sur les 4 images stockees dans la imagelist1

Merci d'avance

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.