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
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.
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
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
Bon bah merci These cela fonctionne
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
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à