Rapport de message :*
 

Re: Exemple de syntaxe

Titre du sujet : Re: Exemple de syntaxe
par myDearFriend! le 01/11/2008 17:51:26

Bonsoir spookiz, le Forum,

Tout d'abord, personnellement, je te déconseillerais fortement l'utilisation de la propriété RowSource de ta ListBox pour en définir son contenu.

L'utilisation de cette propriété RowSource (très facile à utiliser au premier abord) crée un lien entre la plage source et la ListBox, ce qui implique une dépendance de l'un envers l'autre... Ainsi, tu ne pourras plus supprimer une ligne de l'un ou l'autre sans alerte bloquante de VBA dans tes traitements. Par ailleurs, tu peux aussi rencontrer des problèmes si ta ListBox est affichée dans un Userform et si la plage de cellules source n'est pas comprise dans la feuille active au lancement du Userform...

Non, je te conseillerais plutôt d'utiliser la méthode Additem beaucoup plus souple à l'utilisation. Elle est aussi très simple à utiliser même si elle nécessite la mise en place d'une boucle.

Si la ListBox est contenue dans un Userform, le meilleur endroit pour traiter le chargement de cette ListBox est l'évènement UserForm_Initialize() dans le module de code de l'Userform en question.

Pour charger la ListBox des données contenues dans la plage "A1:A30" de la Feuil1, on peut faire par exemple comme ça :
Private Sub UserForm_Initialize()
Dim C As Range
    For Each C In Sheets("Feuil1").Range("A1:A30")
        ListBox1.AddItem C.Value
    Next C
End Sub

Sinon, il existe une autre façon de faire et qui permet d'éviter la boucle, on peut faire directement comme ça :
Private Sub UserForm_Initialize()
    ListBox1.List = Sheets("Feuil1").Range("A1:A30").Value
End Sub

Ceci est bien sûr valable quelque soit la feuille active au lancement du Userform.

Attention cependant, il n'y plus de lien avec les données sources. La modification de ces dernières directement dans la feuille par exemple, ne sera pas reflété automatiquement dans la ListBox (il te faudra recharger les éléments).

Cordialement,