List/rowsource

Résolu
chrisdemontigny Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
chrisdemontigny Messages postés 70 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!

8 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
  2. chrisdemontigny Messages postés 70 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
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      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
  4. Heliotte Messages postés 1561 Statut Membre 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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonsoir Patrice33740,

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

    Joyeuses fêtes,
    Heliotte.
    0
  7. chrisdemontigny Messages postés 70 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
  8. Heliotte Messages postés 1561 Statut Membre 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
  9. chrisdemontigny Messages postés 70 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