Remplir ListView avec ma ComboBox

Bonjour, forum

J'ai une ListView avec 3 colonnes et une ComboBox pour les dates, j'aimerais remplir la ListView depuis la Combo et je sais pas comment m'y prendre voici le code + le fichier. J'aimerais aussi savoir pourquoi Alignment:=fmAlignmentCenter ne fonctionne pas ça fonctionne que pour droite ou gauche mais pas centré !

Option Explicit

Private Sub ComboBox1_Click()
    Recherche

End Sub

Private Sub CommandButton1_Click()
Unload UserForm1
End Sub

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim O As Worksheet
Dim TV
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim i As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For i = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(i, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 du tableau des valeurs TV
Next i 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste des éléments du dictionnaire D sans doublons

If Me.ComboBox1.ListCount > 0 Then Me.ComboBox1.ListIndex = 0

With ListView1

.Gridlines = True
.View = lvwreport
.FullRowSelect = True
.ColumnHeaders.Add Text:="Nom", Width:=90, Alignment:=fmAlignmentLeft
.ColumnHeaders.Add Text:="Numéro", Width:=70, Alignment:=fmAlignmentRight
.ColumnHeaders.Add Text:="Dept", Width:=30, Alignment:=fmAlignmentLeft ', Alignment:=fmAlignmentCenter

End With
End Sub

Private Sub Recherche()

End Sub

Merci de vôtre aide

143test.zip (11.78 Ko)

bonjour

voila une modife de ta listview

A+

Maurice

217test-4.zip (18.06 Ko)

Ok merci par contre ça ne fonctionne pas, quand je clique sur le bouton ouvrir le UserForm il me dit impossible de charger l'objet car il n'est pas dispo sur cette machine ensuite quand je vais voir le UserForm il n'y a pas de ListView, je met donc une ListView et donc une erreur sur cette ligne

.View = lvwreport

J'ai excel 2003 peu y avoir des problèmes de compatibilité

bonsoir muratime

as tu option explicit en haut du code ce qui explique le bug je pense

car moi c'est a num que j'ai le bug de "variable non définie"

a moins que ce soit 2003 qui cause le bug que tu soulève

Bonsoir,

Oui j'ai option explicit le Num j'ai mis des guillemets car j'avais aussi une erreur.

Les contrôles listview il existe des SP3 ou SP6 moi j'ai juste celui de base sans SP version 6 tout court pour ça surement que déjà au démarrage j'ai pas de listview mais je pense aussi que sur excel 2003 il prend pas en charge ce genre de code, peu être je dis des conneries.

.Add , , Num, 0

.Add , , "Date", 80, lvwColumnCenter

.Add , , "Nom", 100

.Add , , "Numéro", 50

Alors que ceci sur 2003 fonctionne nickel

.ColumnHeaders.Add Text:="Nom", Width:=90, Alignment:=fmAlignmentLeft
.ColumnHeaders.Add Text:="Numéro", Width:=70, Alignment:=fmAlignmentRight
.ColumnHeaders.Add Text:="Dept", Width:=30, Alignment:=fmAlignmentLeft

Bon bah après mainte recherche il y avais des erreurs dans le code, des guillemets en moins sur Num et la variable Sh pas déclaré et replacer une listview adapter avec ceci ça fonctionne. et pour l'ajout des colonnes bah ça fonctionne aussi je disais des conneries

Option Explicit
Private Sub CommandButton1_Click()
Unload UserForm1
End Sub

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim O As Worksheet
Dim TV
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim i As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For i = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(i, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 du tableau des valeurs TV
Next i 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste des éléments du dictionnaire D sans doublons

If Me.ComboBox1.ListCount > 0 Then Me.ComboBox1.ListIndex = 0

With ListView1

       .Gridlines = True
       .View = lvwreport
       .FullRowSelect = True
End With
   With ListView1.ColumnHeaders
   '.Clear 'Supprime les anciens entêtes
     'Ajout des colonnes
       .Add , , "Num", 0
      .Add , , "Date", 80, lvwColumnCenter
      .Add , , "Nom", 100
      .Add , , "Numéro", 50
   End With
'InitList "", 1
End Sub

Private Sub InitList(Choix, C)
Dim L As Long
Dim Sh As Object

Set Sh = Feuil1

   With ListView1
      .ListItems.Clear
         For L = 2 To Sh.Cells(Rows.Count, 1).End(xlUp).Row
            If UCase(Sh.Cells(L, C).Text) Like UCase(Choix) & "*" Then
                  .ListItems.Add , , L ' = numero de ligne
                  .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 1)
                  .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 2)
                  .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 3)
             '  Tot = Tot + Sh.Cells(L, 4)
            End If
         Next
      .ListItems(1).Selected = False
   End With
   Set ListView1.SelectedItem = Nothing
End Sub

Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then Exit Sub
   InitList ComboBox1.Column(0), 1
End Sub

Merci quand même a archer

Maintenant que ma ListView fonctionne je sais qu'on peu mettre des couleurs sur le texte, ma question sur l'exemple de mon fichier si Michelle et du dept 49 alors on met une couleur rouge sur le texte de la ligne, c'est possible ? Mettre plusieurs conditions pour afficher le texte en rouge ?

Bonjour,

J'ai rajouté une Sub "Colorer" mais je te redonne tout le code car il y a fallu faire quelques modifs comme rajouter le champ "Département" :

Option Explicit

Private Sub CommandButton1_Click()
Unload UserForm1
End Sub

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm

    Dim O As Worksheet
    Dim TV
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim I As Integer 'déclare la variable I (Incrément)

    Set O = Worksheets("Feuil1") 'définit l'onglet O
    TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
       D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 du tableau des valeurs TV
    Next I 'prochaine ligne de la boucle
    Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste des éléments du dictionnaire D sans doublons

    If Me.ComboBox1.ListCount > 0 Then Me.ComboBox1.ListIndex = 0

    With ListView1

        .Gridlines = True
        .View = lvwreport
        .FullRowSelect = True

        With .ColumnHeaders

            '.Clear 'Supprime les anciens entêtes
            'Ajout des colonnes
            .Add , , "Num", 0
            .Add , , "Date", 80, lvwColumnCenter
            .Add , , "Nom", 100
            .Add , , "Numéro", 50
            .Add , , "Departement", 80

        End With

    End With

End Sub

Sub Colorer(Nom As String, Dept As String)

    Dim I As Long
    Dim J As Long

    With ListView1

        For I = 1 To .ListItems.Count

            If .ListItems(I).ListSubItems(2) = Nom And .ListItems(I).ListSubItems(4) = Dept Then

                .ListItems(I).ForeColor = &HFF&
                For J = 1 To 4
                    .ListItems(I).ListSubItems(J).ForeColor = &HFF&
                Next J

            End If

        Next I

    End With

End Sub

Private Sub InitList(Choix, C)
Dim L As Long
Dim Sh As Object

Set Sh = Feuil1

   With ListView1
      .ListItems.Clear
         For L = 2 To Sh.Cells(Rows.Count, 1).End(xlUp).Row
            If UCase(Sh.Cells(L, C).Text) Like UCase(Choix) & "*" Then

                .ListItems.Add , , L ' = numero de ligne
                .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 1)
                .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 2)
                .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 3)
                .ListItems(.ListItems.Count).ListSubItems.Add , , Sh.Cells(L, 4)

             '  Tot = Tot + Sh.Cells(L, 4)
           End If
         Next
      .ListItems(1).Selected = False
   End With
   Set ListView1.SelectedItem = Nothing

   Colorer "Michelle", 49 '<--- appel de la proc pour colorer

End Sub

Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then Exit Sub
   InitList ComboBox1.Column(0), 1
End Sub

bonjour

comment tu sélectionne le nom et le département

voila encore des modifes

a toi de jouer

A+

Maurice

239test-4.zip (18.94 Ko)

Bon bah merci These cela fonctionne et a archer qui me pose des colles pour ton fichier Test (4).xls j'ai du rajouter une ListView car j'avais un objet manquant j'ai du aller dans les propriétés de la boite a outils pour le décocher.

Sinon pour archer si tu veux cliquer sur une ligne de la listview il te faudra l'afficher soit dans une textbox ou un label.

Voilà ce qu'il faut mettre pour une TextBox1 pour afficher la colonne 2 (le nom) et j'ai un label2 pour la colonne 4 le département

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
' Recupe du Numero de ligne
   Lig = Val(ListView1.SelectedItem)
   TextBox1 = ListView1.SelectedItem.SubItems(2)
   Label2.Caption = ListView1.SelectedItem.SubItems(4)
End Sub

Et si tu rajoute ça un label 3 par exemple ça permet de compter le nombre de ligne que tu as dans ta listView à placer dans la comboBox change de ton fichier c'est mieux si tu le place dans le Private Sub ListView1_ItemClick tu aura le nombre de ligne que si tu clique sur la ListView par contre j'aime pas trop ton InitList "", 1 je l'ai est tous viré

Label3.Caption = ListView1.ListItems.Count

bonjour

je pense que j'ais pas besoin de leçon de ta par

mes bon voila la dernière

A+

Maurice

188test-4.zip (18.90 Ko)
archer a écrit :

bonjour

comment tu sélectionne le nom et le département

voila encore des modifes

a toi de jouer

A+

Maurice

Je donne jamais de leçon a qui que ce soit je suis là pour apprendre mais tu met ça donc voilà tu demandes, je donne une réponse si je la connais, il n'y avait rien d'ironique Vu comment tu as tourné ça je pensais que tu posais une colle ou une question vu que dans ton avant dernier fichier du même post il n'y avait ni textbox ni label pour le département et le nom vu qu'ils sont dans le dernier fichier Test (4).xls a moins que j'ai un don de clairvoyance

Rechercher des sujets similaires à "remplir listview combobox"