List/rowsource

Résolu/Fermé
chrisdemontigny Messages postés 64 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 17 mars 2015 - 24 déc. 2012 à 18:48
chrisdemontigny Messages postés 64 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 17 mars 2015 - 27 déc. 2012 à 16:41
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
24 déc. 2012 à 19:18
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 mercredi 19 septembre 2012 Statut Membre Dernière intervention 17 mars 2015
24 déc. 2012 à 19:52
Je me suis trompé, remplace me par client

As tu une autre idée avec ce changement?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
24 déc. 2012 à 20:17
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
24 déc. 2012 à 20:23
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
24 déc. 2012 à 20:49
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
24 déc. 2012 à 20:55
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
24 déc. 2012 à 22:34
Bonsoir Patrice33740,

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

Joyeuses fêtes,
Heliotte.
0
chrisdemontigny Messages postés 64 Date d'inscription mercredi 19 septembre 2012 Statut Membre Dernière intervention 17 mars 2015
27 déc. 2012 à 12:58
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
27 déc. 2012 à 13:16
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 mercredi 19 septembre 2012 Statut Membre Dernière intervention 17 mars 2015
27 déc. 2012 à 16:41
Il est clair que j'avais laissé quelques erreurs sur mon code précédent.
Cela fonctionne maintenant.

Merci beaucoup.
0