IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Remplir une listbox à 3 colonnes par code VBA


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut Remplir une listbox à 3 colonnes par code VBA
    Bonjour à tous.
    Je viens de passer de Windows 10 à Windows 11 et de Office 2010 à 2021, je ne sais pas si mes difficultés viennent de là (mais en tous cas, je galère !!!!!)

    Dans une feuille Excel, j'ai créé une "form" dans laquelle j'ai créé une listbox à 3 colonnes. Je dois sans doute être un programmeur "différent", mais je ne cherche pas à remplir cette liste avec des valeurs présentes dans la feuille, mais uniquement avec des données provenant du code VBA, et je n'y arrive pas, et mon ami Google ne m'aide pas...

    Voici le code (déclenché à l'ouverture du classeur) censé remplir la liste :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Private Sub Workbook_Open()
    Dim labels(11) As String
    labels(0) = "A"
    labels(1) = "B"
    labels(2) = "C"
    labels(3) = "D"
    labels(4) = "E"
    labels(5) = "F"
    labels(6) = "G"
    labels(7) = "H"
    labels(8) = "I"
    labels(9) = "J"
    labels(10) = "K"
    labels(11) = "L"
    With UserForm1.LISTE
        .List(0, 0) = "L"
        .List(0, 1) = "V"
        .List(0, 2) = "Contenu"
        For I = 0 To 11
            .List(.ListIndex + 1, 0) = Format(I)
            .List(.ListIndex + 1, 1) = labels(I)
            .List(.ListIndex + 1, 2) = ActiveSheet.Rows(0).Cells(I).Value
        Next
    End With
    UserForm1.Show
    End Sub
    Le message sur la ligne 17 est : Erreur d'exécution '381' : Impossible de définir la propriété List. Index de table de propriétés non valide.

    Ce que je crois comprendre, c'est que la table "List" n'existe pas, puisqu'il n'y a rien dans ma listbox. Mais comme il y a trois colonnes, je n'ai pas droit, à "additem". On dirait une "deadlock"...

    Mais j'ai sûrement mal compris.

    Merci à qui me débloquera.

    AMIcalement

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 253
    Par défaut
    Hello,
    ce n'est pas facile de remplir les colonnes d'entête d'une ListBox sans utiliser la propriété RowSource. Il serait peut-être préférable d'utiliser une ListView qui permet de le faire par code VBA et qui a plus de propriétes.
    Ami calmant, J.P

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Enfin une piste. Merci, j'essaie ça tout de suite.

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Eh bien ce n'est pas facile d'utiliser les objets de Microsoft...

    La listview marche... un tout petit peu mieux, mains quand-même... pas !

    Je suis allé chercher "listview" dans les compléments, et il m'est venu une "listview4 version 6" (pourquoi pas ?)

    J'ai donc mon projet avec une feuille excel, une page "form" et un module de code. Dans le "ThisWorkbook" j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private Sub WorkBook_Open()
     UserForm1.Show
    End Sub
    Pour la feuille UserForm1, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub OK_Click()
        Me.Hide
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim labels(11) As String
        labels(0) = "A"
        labels(1) = "B"
        labels(2) = "C"
        labels(3) = "D"
        labels(4) = "E"
        labels(5) = "F"
        labels(6) = "G"
        labels(7) = "H"
        labels(8) = "I"
        labels(9) = "J"
        labels(10) = "K"
        labels(11) = "L"
        With LISTE
            With .ColumnHeaders
                .Clear
                .Add , , "L", 20
                .Add , , "V", 40
                .Add , , "Contenu"
            End With
            With .ListItems
                For I = 0 To 11
                    .Add , , labels(I)
                Next
            End With
            For I = 0 To 11
                .ListItems(I + 1).ListSubItems.Add , , Format(I)
                .ListItems(I + 1).ListSubItems.Add , , ActiveSheet.Rows(1).Cells(I + 1).Value
            Next
            .View = lvwList
        End With
        Me.Show
    End Sub
    Le résultat est simplement la liste des labels, collée à gauche, c'est à dire qu'il n'y a pas les en-têtes de colonnes, et il n'y a pas les colonnes "supplémentaires".

    Je n'ai jamais essayé de programmer un contrôle ActiveX, mais franchement, chez Microsoft, ils ont l'air de se prendre la tête...

    Mais j'espère encore un peu d'aide, car tout seul, je suis largué...

    AMIcalement.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 253
    Par défaut
    Hello,
    voici un exemple de remplissage de listview. Il faut bien prendre le ListView de Microsoft Windows Common Controls 6.0 SP6 (à cocher dans les références)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub UserForm_Activate()
        'Set a reference to Microsoft Windows Common Controls by
        'using Tools > References in the Visual Basic Editor (Alt+F11)
        'Set some of the properties for the ListView
        With Me.LISTE
            .Gridlines = True
            .HideColumnHeaders = False
            .View = lvwReport
        End With
        'Call the sub to fill the ListView
        Call LoadListView    
    End Sub
     
     
    Private Sub LoadListView()
    Dim wksSource As Worksheet
    Dim LstItem As ListItem
    Dim i As Long
    Dim labels()
        labels = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
        Set wksSource = Worksheets("Feuil1")  
        Me.LISTE.ColumnHeaders.Add Text:="L", Width:=90, Alignment:=lvwColumnLeft
        Me.LISTE.ColumnHeaders.Add Text:="V", Width:=90, Alignment:=lvwColumnCenter
        Me.LISTE.ColumnHeaders.Add Text:="Contenu", Width:=90, Alignment:=lvwColumnCenter
        'Fill the ListView
        For i = 0 To 11
            Set LstItem = Me.LISTE.ListItems.Add(Text:=Format(i))
                LstItem.ListSubItems.Add Text:=labels(i)
                LstItem.ListSubItems.Add Text:=CStr(wksSource.Range("A1").Offset(0, i))
        Next i  
    End Sub
    Nom : ListView.png
Affichages : 136
Taille : 19,0 Ko


    Ami calmant, J.P

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut [RESOLU] Remplir une listbox à 3 colonnes par code VBA
    Formidable !

    Ce qu'il me manquait, c'était les trois lignes après "With Me.Liste"

    Mais est-ce qu'on peut expliquer facilement que je n'aie trouvé nulle part ces informations ? Bien sûr, je ne sais sans doute pas "bien" chercher, mais quand même...

    Bon, je suis débloqué : MERCI.

    En route pour de nouvelles aventures.

    Et à la prochaine.

    AMIcalement.

Discussions similaires

  1. Remplir une table par Code VBA
    Par Om Lebnet dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/11/2018, 14h43
  2. lier une macro a une liste en cascade par code vba
    Par pygargue784 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/06/2016, 16h58
  3. [XL-2010] Installer une macro complémentaire .xlma par code VBA
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/04/2012, 17h52
  4. Remplir une listbox par vba/access2000
    Par zibi7 dans le forum IHM
    Réponses: 6
    Dernier message: 25/05/2008, 04h43
  5. Réponses: 2
    Dernier message: 11/05/2006, 23h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo