[VBA]Alimentation d'une combobox ou d'une listbox

FAQ XLD

XLDnaute Nouveau
Pour alimenter une combobox ou une listbox dans un userform, il existe différentes méthodes

Tous les codes mentionnés ici doivent se situer dans le code de l'userform concerné


1 - METHODE ADDITEM :
Description de l'aide :Ajoute un élément à la liste d'une zone de liste ou d'une liste modifiable à colonne unique. Ajoute une ligne à la liste d'une zone de liste ou d'une liste modifiable multicolonnes.

Exemple concret :
Code:
Private Sub UserForm_Initialize()
'si la dernière ligne est supérieure à 256 déclarer i et x en Integer
Dim i As Byte, x As Byte
i = Sheets("Database").Range("A65536").End(xlUp).Row
For x = 1 To i
    With ComboBox1
        .AddItem Sheets("Database").Range("A" & x)
    End With
Next x
End Sub
2 -METHODE ROWSOURCE : (attention Combobox de UserForm SEULEMENT) (Attention ne fonctionne pas sous MAC)
Description de l'aide : Spécifie la source de données fournissant une liste à un contrôle ComboBox ou ListBox.

Exemple concret :
Code:
Private Sub UserForm_Initialize()
Dim Plage As String
With Sheets("Database")
    Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Address
End With
ComboBox1.RowSource = "Database!" & Plage
End Sub
NB : la méthode "RowSource" ci-dessus ne supporte pas des noms de feuille (onglet) avec des espaces et certains caractères spéciaux.
La méthode RowSource, est donnée à titre indicatif. Bien qu'elle soit disponible pour les comboBox et ListBox dans le cadre d'UserForm, elle peut générer des bug dans le déroulement des programmes. En particulier lorsqu'on rend dynamique les plages de cellules concernées par la liste.


3 - METHODE LIST :

Description de l'aide : Renvoie ou définit la liste des entrées d'un contrôle ListBox ou ComboBox.

Exemple concret :
Code:
Private Sub UserForm_Initialize()
Dim Plage As Range
Dim Tab1() As String
With Sheets("Database")
    Set Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
ReDim Tab1(1 To Plage.Count)
For Each Cell In Plage
    i = i + 1
    Tab1(i) = Cell
Next
ComboBox1.List = Tab1
End Sub
Code:
Private Sub UserForm_Initialize()
Dim Plage As Range

With Sheets("Database")
    Set Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

ComboBox1.List = Plage.Value
End Sub
Code:
Private Sub UserForm_Initialize()
Dim Tab1() As Variant

With Sheets("Database")
    Tab1 = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
End With

ComboBox1.List = Tab1

End Sub
Code:
Private Sub UserForm_Initialize()

With Sheets("Database")
    ComboBox1.List = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
End With

End Sub
Voilà, ces trois méthodes feront le même résultat (à l'oeil nu) dans la l'initialisation du UserForm pour l'incrémentation de données dans ComboBox1.

Les méthodes et exemples donnés fonctionnent également pour les listbox.

__________________________________________________________________

Tous ces exemples et ces explications proviennent de _Thierry et de Spitnolan08
 
Dernière modification par un modérateur:

Dranreb

XLDnaute Barbatruc
Pourquoi vous accrochez vous à votre idée complètement dépourvue de sens au lieu de structurer convenablement votre base Article ?
… et ne répondez vous pas aux discussions entamées avant d'en entamer une autre …
 

terrier

XLDnaute Junior
Bonsoir, c'est bien que vous êtes la, je pense que j'ai le travaille d'hier mais trop avancer car je suis complètement pommé
 

Pièces jointes

  • Gérance1.xlsm
    73.5 KB · Affichages: 306

Dranreb

XLDnaute Barbatruc
Oui mais moi je vous dis de ne pas faire comme ça, mais de constituer une vraie base Article avec colonnes Famille, Code article, Désignation, Prix unitaire, Conditionnement, Stock, que sais-je encore …
 

terrier

XLDnaute Junior
je ne sais pas si je me suis bien exprimé, mais dans le dernier fichier que j'ai mis, dans le formulaire "ajouter article" j'ai besoin d'ajouter des articles sous la famille sélectionné dans le cbx "famille".
et dans le formulaire facture j'ai besoin de trouver que la sommes des articles dans les défirent plage sans avoir le vide.
est ce que je suis obligé de faire 2 colonnes différente famille et article pour avoir ces résultat ?
 

Discussions similaires

Réponses
6
Affichages
121
Réponses
6
Affichages
227