Alimenter la listebox d'un Userform

Bonjour forum,

Etant novice, j'ai récupéré une macro trouver après quelques temps de recherche pour alimenter la listebox multicolonne de mon userform.

Celle ci fonctionne parfaitement mais malgré l'appel de la fonction with sur la feuille sélectionnée (pour ensuite définir la plage du RowSource), la listebox n'est alimenté que en fonction de la feuille active et non celle mentionné dans le with.

Ci-dessous le code :

Private Sub UserForm_Initialize()

    Dim Plage As Range

    'la plage est définie de A2 à Bx (A1 et B1 étant les entêtes)
    With Feuil9: Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 4).End(xlUp)): End With

    With listeconso

        '2 colonnes
        .ColumnCount = 4

        'ici, moitié-moitié. 1 point-virgule sépare les dimensions si il y en a plusieurs colonnes il doit y avoir plusieurs ";"
        .ColumnWidths = .Width / 4

        'on souhaite les entêtes de colonnes
        .ColumnHeads = True

        'on passe l'adresse de la plage à la propriété RowSource
        'attention, imposible de supprimer un élément avec RowSource
        .RowSource = Plage.Address

    End With

End Sub

L'objectif étant que la listebox soit toujours alimenté par les données de la feuil9.

Merci d'avance

Bonjour,

De mémoire toutes les feuilles doivent être de la forme Worksheets("nom de la feuille") (exemple With Worksheets("Feuil9")). Tu ne peux pas juste donner le nom de la feuille sans spécifier qu'il s'agit d'une feuille, sinon comment faire le lien avec l'objet ?

Bonne journée.

Bonjour Ergotamine,

Merci pour ta réponse

J'avais déjà essayé de cette manière au préalable :

    With Worksheets("Consommation récurrente") : Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 4).End(xlUp)): End With

Mais ça ne fonctionnait pas non plus :/

Bonjour,

Ca sera plus simple et rapide !

Oui effectivement

Merci d'avance pour votre temps !

8classeur1.xlsm (23.80 Ko)

Bonjour,

Et voilà

Private Sub UserForm_Initialize()
Dim Plage As Range
'la plage est définie de A2 à Bx (A1 et B1 étant les entêtes)
With Worksheets("Consommation récurrente")
    Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
With listeconso
    '2 colonnes
    .ColumnCount = 4
    'ici, moitié-moitié. 1 point-virgule sépare les dimensions si il y en a plusieurs colonnes il doit y avoir plusieurs ";"
    .ColumnWidths = .Width / 4
    'on souhaite les entêtes de colonnes
    .ColumnHeads = True
    'on passe l'adresse de la plage à la propriété RowSource
    'attention, imposible de supprimer un élément avec RowSource
    .RowSource = Plage.Address
End With
End Sub

Bonne journée !

Ergotamine,

merci

Comme cité précédemment, j'ai déjà essayé en mettant "Worksheets("Consommation récurrente")" à la place de feuil9.

J'ai tout de même par curiosité recopié votre code au cas ou mais c'est la même chose, lorsque je lance l'userform sur une autre feuille que celle ci, la listbox charge la plage de la feuille active et non la feuille "Consommation récurrente".

Bonjour,

Chez moi le code fonctionne bien sur ce fichier.
Que se passe-t-il chez vous ? Un message d'erreur ? Pas de chargement de la listbox ?

Bon dimanche

11test.xlsm (23.08 Ko)

Le code fonctionne très bien et la listbox charge très bien aussi mais la listbox n'affiche pas la feuille "Consommation récurrente" mais seulement la feuille active sur le fichier.

Pour que vous compreniez bien, mettez vous sur la feuille "liste ordinateur" et faite charger l'userform, vous verrez que les informations affichées dans la listbox ne sont pas celle de la feuille "Consommation récurrente" mais bien celle de la feuille active, soit le feuille "liste ordinateur".

L'objectif étant de charger cette userform depuis une autre feuille de calcul et donc pouvoir accéder aux informations de la feuille "Consommation récurrente" en lançant l'userform depuis n'importe quelle autre feuille

Bonjour,

Je comprend mieux quand on a la chronologie.

Dans ce cas il est nécessaire d'avoir ce code :

Private Sub UserForm_Initialize()
Dim Plage As Range
'la plage est définie de A2 à Bx (A1 et B1 étant les entêtes)
With Worksheets("Consommation récurrente")
    Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
With listeconso
    '2 colonnes
    .ColumnCount = 4
    'ici, moitié-moitié. 1 point-virgule sépare les dimensions si il y en a plusieurs colonnes il doit y avoir plusieurs ";"
    .ColumnWidths = .Width / 4
    'on souhaite les entêtes de colonnes
    .ColumnHeads = True
    'on passe l'adresse de la plage à la propriété RowSource
    'attention, imposible de supprimer un élément avec RowSource
    .RowSource = "'Consommation récurrente'!" & Plage.Address
End With
End Sub

En effet la listbox charge en .rowsource la plage de la feuille active. On lui spécifie donc sur quelle feuille et plage aller chercher les données à charger.

En espérant que celà vous aide.

Bonne journée

Je viens d'essayer et en effet c'est parfaitement ça !

Merci Ergotamine !

Rechercher des sujets similaires à "alimenter listebox userform"