List/rowsource

Résolu
chrisdemontigny Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   -  
chrisdemontigny Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voici le code suivant:

private sub me_initialize()
with worksheets("bddclients")
me.combobox1.list=.range("c1:c"& .range(c65365).end(xlup).row).value
end sub

le combobox devrait normalement aller chercher une liste de clients dans la feuille bddclients. Seulement, là, je n'ai rien: je fais EXECUTION et l'userform s'affiche correctement, mais rien dans le combobox.
La syntaxe de rowsource ou List me semble toujours très compliquée à partir du moment où on a une plage de source variable.

Quelqu'un peut-il m'aider?
Bonnes fêtes!


A voir également:

8 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Le nom de ta procédure semble ambigü, "me" est un mot réserve au langage, il ne faut pas nomme un objet "me"
0
chrisdemontigny Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 
Je me suis trompé, remplace me par client

As tu une autre idée avec ce changement?
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Essaies (avec un UserForm nommé Client):

Private Sub UserForm_Initialize()
With ThisWorkbook.Worksheets("bddclients")
Client.ComboBox1.List = .Range("C1:C" & .Range("C65536").End(xlUp).Row).Value
End With
End Sub
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
PS : 2^16 = 65536 (et pas 65356) mais à partir de xl 2007 il vaut mieux écrire :
Client.ComboBox1.List =.Range("C1:C" & .Range("C"&.Rows.Count).End(xlUp).Row).Value
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Bonsoir chrisdemontigny,

    Dim i As Integer, iMin As Integer, iMax As Integer
    '
    iMin = 14: iMax = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    For i = iMin To iMax
        ComboBox1.AddItem (Cells(i, 1).Value)
    Next i

Joyeux Noël,
Heliotte.
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Tu peux remplacer :
For i = iMin To iMax
ComboBox1.AddItem (Cells(i, 1).Value)
Next i

Par :
ComboBox1.List = Range(Cells(iMin, 1), Cells(iMax, 1)).Value
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Bonsoir Patrice33740,

Merci pour cet exemple .. rapide, net, sans bavure.

Joyeuses fêtes,
Heliotte.
0
chrisdemontigny Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour et merci pour vos réponses.

Ce code a fonctionné dans un nouveau fichier où j'ai rajouté des données dans une colonne pour avoir des données qui apparaissent.
En revanche, j'ai un fichier dans lequel j'ai plusieurs feuilles et plusieurs userform et là, ca reste toujours sans rien.
J'ai fait un copier-coller du code de patrice33740 pour être sur que je n'oubliais rien, mais rien n'y fait.
Voici le code que j'ai donc changé en fonction de vos lumières:

Private Sub smclient_initialize()
Dim i As Integer, iMin As Integer, iMax As Integer
iMin = 1: iMax = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
smclient.ComboBox1.List = ThisWorkbook.Sheets("bddclients").Range(Cells(iMin, 3), Cells(iMax, 3)).Value
smclient.ComboBox2.List = ThisWorkbook.Sheets("bddclients").Range(Cells(iMin, 2), Cells(iMax, 2)).Value
End Sub

Merci de votre aide par avance.
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Bonjour,

iMax = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

Explications :
- Ce code, signifie qu'il va rechercher la dernière ligne non-vide de la colonne "Columns(1)" ~~ signifie "Colonne A"

Or, tu as besoin de rechercher la dernière ligne non-vide des colonne "B" et "C".

Veux-tu essayer ceci:
Private Sub smclient_initialize()
	Dim i As Integer, iMin As Integer, iMax As Integer
	'
	iMin = 1: iMax = Columns(3).Find("*", , , , xlByColumns, xlPrevious).Row
	smclient.ComboBox1.List = ThisWorkbook.Sheets("bddclients").Range(Cells(iMin, 3), Cells(iMax, 3)).Value
	iMax = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
	smclient.ComboBox2.List = ThisWorkbook.Sheets("bddclients").Range(Cells(iMin, 2), Cells(iMax, 2)).Value
End Sub
0
chrisdemontigny Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 
Il est clair que j'avais laissé quelques erreurs sur mon code précédent.
Cela fonctionne maintenant.

Merci beaucoup.
0