ComboBox1.RowSource = ActiveSheet

Bonsoir, comme la feuil n’es jamais la même, j’ai essayé de mettre la « ActiveSheet » comme Rowsource, mais ça ne marche pas, qui peux m’aider svp

Private Sub ComboBox2_Click()

Worksheets(ComboBox2.Value).Select

DerLigne = ActiveSheet.Range("A65536").End(xlUp).Row

PlageList = ActiveSheet.Range("A5:A" & DerLigne).Address

ComboBox1.RowSource = ActiveSheet & PlageList ----------ERREUR SUR CETTE LIGNE

End Sub

Bonsoir,

1) Il serait bien de définir tes variables

2) Activesheet est l'objet conteneur, il faut donc écrire

ComboBox1.RowSource = ActiveSheet.Name & "!" & PlageList

A+

Bonjour,

Question bête, pourquoi remonter depuis A65536 ? et si tu as aucune valeur en A5 ? cela ne te donnera pas ce que tu veux ? et si un jour où tu as plus de 65536 ligne ?

Au pire tu as aussi un :

DerLigne = ActiveSheet.Range("A5").End(xlDown).Row

Idem dans notre cas avec un xldown cela peut poser des soucis si on a 1 ou 0 valeurs, dans ton cas d’un Xlup, vérifie que DerLigne ne vaut pas 4 ou moins, cela voudras dire que tu n’as pas de valeur donc affiche rien dans ta combobox ou une msgbox d’erreur

Après vu que ton Worksheets(ComboBox2.Value).Select séléctionne la bonne sheet, tu seras déjà dessus, par défaut Excel le prend en compte, donc tu peux juste faire :

Worksheets(ComboBox2.Value).Select
DerLigne = Range("A65536").End(xlUp).Row

De la même manière, on pourrait dire que comme tu connais la sheet ou aller, tu fais une opération en trop la, tu pourrais directement passer en paramètre :

DerLigne = sheets(combobox2.value).Range("A65536").End(xlUp).Row

Pour ta combobox1 je préfère passer par un .list que .rowsource, j’avais lu y a des années sur un forum que c’était plus simple et ça m’est resté mais chacun sa manière

Du coup Idem si tu active la sheet avec Worksheets().select avant pas besoin de l’activesheet et tu peux encore une fois le passer en paramètres

Je ferais directement au final si tu veux ou pas conserver ton code :

Worksheets(ComboBox2.Value).Select
DerLigne = .Range("A65536").End(xlUp).Row
ComboBox1.List = Range("A5:A" & DerLigne).Value

Ou

DerLigne = Worksheets(ComboBox2.Value).Range("A65536").End(xlUp).Row
ComboBox1.List = Worksheets(ComboBox2.Value).Range("A5:A" & DerLigne).Value

Voir carrément pour les pros de l’optimisation de place dans le code et de mémoire en termes de variables bien que j’aime perso passer par des variables qui ont des noms explicit

ComboBox1.List = Worksheets(ComboBox2.Value).Range("A5:A" & Worksheets(ComboBox2.Value).Range("A65536").End(xlUp).Row).Value

N’oublie pas de bien controller les valeur dans ton combobox2 sans quoi tout va planter du genre :

Dim MES_FEUILLES() As Variant 

ReDim MES_FEUILLES(Worksheets.Count - 1) 

‘on peut une boucle for I =1 to worksheets.count ou surement d’autre solution auxquelles je ne pense pas, ici je préfère passer par un for each personnellement

i = 0

For Each sh In Worksheets
    MES_FEUILLES(i) = sh.Name
    i = i + 1
Next

‘on mets dans la combobox
ComboBox2.List = MES_FEUILLES

Enfin fait attention si tu n’affiche pas ton userform en Modal ou si tu permets de revenir sous excel avec un .hide, si l’on supprime les valeurs de ta Feuil1, cela ne sera pas répercuter tant qu’on ne touche pas à la combox2 vu que le code est dans ton ComboBox2.click, donc si tu as une deuxième macro qui tourne en reprenant la valeur de ta combobox1… il se peut que la valeur n’existe plus ! il faut rafraichir entre deux mais c’est dans un cas précis…

De la même façon… on peut rajouter des Feuil donc vérifie bien où et comment tu remplies ta combobox2 pour prendre en compte ces changements !

Et enfin, on peut supprimer les feuilles donc cela fera tout planter dans les macros ou ton worksheet().select

A méditer selon ton utilisation du fichier ^^, si tu créés des feuilles, modifies les valeurs ou ajoutes de feuilles dans une macro actuelle ou futur que tu auras besoin de faire, il faudra retoucher ton code si tu ne le prend pas en compte maintenant. Sinon le plus simple ici, en mode modal (comme tu dois surement le faire, je m'inquiète surement pour rien mais vaut mieux prévenir que guérir)

ECG

Rechercher des sujets similaires à "combobox1 rowsource activesheet"