List Box VBA
Bonsoir,
Avez vous une idée pour ce code
La ligne non commentée [UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 10) = Cells(x, 11)
M'indique une erreur 380 impossible de définir la propriété List je n'arrive pas à trouver pourquoi
En petit bonus :
Comment récupérer une valeur saisie dans une textbox à la place de S1 ?
Private Sub CommandButton1_Click()
'Décalaration des variables
Dim Critere
Dim DerniereLigne As Integer, x As Integer
lstRegion.Clear
'Affectation des variables
Critere = Range("S1")
'TextBox1.Text = Critere
'On récupère la dernière ligne de la source de données
If Cells(Rows.Count, 1).End(xlUp).Row = 1 Then
DerniereLigne = 2
Else
DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
End If
lstRegion.ColumnWidths = "60;200;25;25;25;25;75;0;0;0;100"
'On parcours la source de données de la ligne à la dernière ligne
For x = 1 To DerniereLigne
'On teste le critère, ici le contenu de S1 avec la source de données.
If Cells(x, 1) = Critere Then
'On ecrit dans la listbox
UserForm1.lstRegion.AddItem Cells(x, 1)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 1) = Cells(x, 2)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 2) = Cells(x, 3)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 3) = Cells(x, 4)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 4) = Cells(x, 5)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 5) = Cells(x, 6)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 6) = Cells(x, 7)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 7) = Cells(x, 8)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 8) = Cells(x, 9)
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 9) = Cells(x, 10)
'UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 10) = Cells(x, 11)
End If
Next x
End Sub
En vous remerciant par avance pour votre aide
Bonjour,
sans fichier difficile de répondre.
UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, x)
au lieu de mettre x de 1 à 10, essaie de mettre de 0 à 9
- Messages
- 4'094
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
bonjour,
'UserForm1.lstRegion.List(UserForm1.lstRegion.ListCount - 1, 10) = Cells(x, 11)
C'est une limitation connue du remplissage d'une Listbox par la propriété List. L'index de colonne ne peut pas aller au delà de 10.
La seule solution, c'est de passer par un Array ou un Dictionary intermédaire et de charger avec, la Listbox globalement avec un .List
ci-dessous exemple
Private Sub CommandButton1_Click()
'Déclaration des variables
Dim Critere
Dim DerniereLigne As Integer, x As Integer
Dim dico_régions As Object
lstRegion.Clear
'Affectation des variables
Critere = Range("S1")
'TextBox1.Text = Critere
'On récupère la dernière ligne de la source de données
If Cells(Rows.Count, 1).End(xlUp).Row = 1 Then
DerniereLigne = 2
Else
DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
End If
lstRegion.ColumnWidths = "60;200;25;25;25;25;75;0;0;0;100"
'On parcourt la source de données de la ligne 1 à la dernière ligne
Set dico_régions = CreateObject("Scripting.dictionary")
For x = 1 To DerniereLigne
'On teste le critère, ici le contenu de S1 avec la source de données.
If Cells(x, 1) = Critere Then
'On ecrit dans le dictionnaire régions
dico_régions(x) = Array(Cells(x, 1), Cells(x, 2), Cells(x, 3), Cells(x, 4), Cells(x, 5), Cells(x, 6), Cells(x, 7), Cells(x, 8), Cells(x, 9), Cells(x, 10), Cells(x, 11))
End If
Next x
'on charge la listbox
If dico_régions.Count = 1 Then UserForm1.lstRegion.Column = Application.Transpose(Application.Transpose(dico_régions.items))
If dico_régions.Count > 1 Then UserForm1.lstRegion.List = Application.Transpose(Application.Transpose(dico_régions.items))
End Sub