List Box VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
k
kent2206
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 24 novembre 2013
Version d'Excel : 2019

Message par kent2206 » 20 septembre 2019, 22:24

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
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'136
Appréciations reçues : 638
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR

Message par Steelson » 20 septembre 2019, 23:42

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

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'445
Appréciations reçues : 205
Inscrit le : 13 juin 2016
Version d'Excel : 2013 FR 64 bits

Message par thev » 21 septembre 2019, 10:37

bonjour,
kent2206 a écrit :
20 septembre 2019, 22:24
'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
1 membre du forum aime ce message.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message
  • VBA Text Box / List Box
    par Ahah » 11 janvier 2018, 09:28 » dans Excel - VBA
    10 Réponses
    487 Vues
    Dernier message par Ahah
    16 janvier 2018, 14:17
  • Problème list box et check box
    par muratime » 17 janvier 2016, 21:06 » dans Excel - VBA
    21 Réponses
    1105 Vues
    Dernier message par stepaustras
    19 janvier 2016, 12:22
  • List Box multiselection
    par hugo.c » 31 mai 2016, 06:04 » dans Excel - VBA
    2 Réponses
    286 Vues
    Dernier message par hugo.c
    1 juin 2016, 10:12
  • List box, remplir
    par batoine » 21 avril 2015, 11:55 » dans Excel - VBA
    1 Réponses
    276 Vues
    Dernier message par batoine
    29 avril 2015, 11:19
  • List box question
    par oly111 » 31 octobre 2017, 00:05 » dans Excel - VBA
    3 Réponses
    182 Vues
    Dernier message par oly111
    31 octobre 2017, 15:51
  • list box dynamique
    par oly111 » 3 novembre 2017, 21:22 » dans Excel - VBA
    4 Réponses
    540 Vues
    Dernier message par eriiic
    3 novembre 2017, 23:17