OVH Cloud OVH Cloud

Meme code ne fonctionne pas partout...

2 réponses
Avatar
Sabian
Salut,=20

J'ai un petit probl=E8me avec une liste d=E9roulante:
J'ai ce code dans un module -->

Public Sub Remplirliste(ByRef frm As UserForm, sh As=20
String, rge As String, cbo As String)
Worksheets(sh).Activate
frm.Controls(cbo).RowSource =3D Worksheets(sh).Range
(rge).Address
End Sub

et ensuite celui-l=E0 sur mon UserForm:

Public Sub UserForm_Activate()
'remplissage de la liste d=E9roulante "cboCDep"
Range("B1").Select
gstrRangeListe =3D "B1:B" & Selection.End(xlDown).Row
Call Remplirliste(Me, "Departement",=20
gstrRangeListe, "cboCDep")

End Sub

Mon probl=E8me est le suivant:
Sur un autre document la liste d=E9roulante reprend les noms=20
jusqu'au dernier nom dans la colonne.

Cependant dans un autre document il me liste aussi=20
jusqu'au dernier nom dans la colonne mais en plus jusqu'=E0=20
la ligne 65536 (m=EAme si les lignes sont vides) ??

Merci =E0 celui qui connait une astuce ou au pire un autre=20
code pour remplir la liste d=E9roulante...

Bon week-end =E0 tous

2 réponses

Avatar
Paul V.
Bonjour,

Je ne vois pas vraiment d'explication.
Une réponse serait peut-être que seul la cellule B1 soit utilisée et pas
d'autres cellules dans la colonne B. Mais cela, il me semble que tu l'aurais
remarqué. :-)
Je suis curieux de lire d'autres avis.

Paul V

Sabian wrote:
Salut,

J'ai un petit problème avec une liste déroulante:
J'ai ce code dans un module -->

Public Sub Remplirliste(ByRef frm As UserForm, sh As
String, rge As String, cbo As String)
Worksheets(sh).Activate
frm.Controls(cbo).RowSource = Worksheets(sh).Range
(rge).Address
End Sub

et ensuite celui-là sur mon UserForm:

Public Sub UserForm_Activate()
'remplissage de la liste déroulante "cboCDep"
Range("B1").Select
gstrRangeListe = "B1:B" & Selection.End(xlDown).Row
Call Remplirliste(Me, "Departement",
gstrRangeListe, "cboCDep")

End Sub

Mon problème est le suivant:
Sur un autre document la liste déroulante reprend les noms
jusqu'au dernier nom dans la colonne.

Cependant dans un autre document il me liste aussi
jusqu'au dernier nom dans la colonne mais en plus jusqu'à
la ligne 65536 (même si les lignes sont vides) ??

Merci à celui qui connait une astuce ou au pire un autre
code pour remplir la liste déroulante...

Bon week-end à tous


Avatar
Michel Gaboly
Bonjour,

C'est cette ligne qui est à la source du problème :

gstrRangeListe = "B1:B" & Selection.End(xlDown).Row

Si toutes les cellules situées plus bas que B1 dans la même colonne
sont vides, Selection.End(xlDown) renvoie le numéro de la dernière ligne de
la feuille soit 65536, ce qui explique le phénomène.

C'est la routine "RemplirListe" qui active la bonne feuille :

Worksheets(sh).Activate

mais

gstrRangeListe = "B1:B" & Selection.End(xlDown).Row

est exécutée AVANT l'appel de "RemplirListe". Par conséquent, si la feuille active à ce moment
ne contient aucune donnée en colonne B à partir de la ligne 2, tu obtiens 65536 comme dernière ligne

Il faut simplement activer la feuille contenant les données avant de chercher à déterminer la dernière
ligne et pas après.

En clair, transfère les 2 lignes

Range("B1").Select
gstrRangeListe = "B1:B" & Selection.End(xlDown).Row


dans la routine "RemplirListe", à laquelle il y aura un argument de moins à passer




Bonjour,

Je ne vois pas vraiment d'explication.
Une réponse serait peut-être que seul la cellule B1 soit utilisée et pas
d'autres cellules dans la colonne B. Mais cela, il me semble que tu l'aurais
remarqué. :-)
Je suis curieux de lire d'autres avis.

Paul V

Sabian wrote:
Salut,

J'ai un petit problème avec une liste déroulante:
J'ai ce code dans un module -->

Public Sub Remplirliste(ByRef frm As UserForm, sh As
String, rge As String, cbo As String)
Worksheets(sh).Activate
frm.Controls(cbo).RowSource = Worksheets(sh).Range
(rge).Address
End Sub

et ensuite celui-là sur mon UserForm:

Public Sub UserForm_Activate()
'remplissage de la liste déroulante "cboCDep"
Range("B1").Select
gstrRangeListe = "B1:B" & Selection.End(xlDown).Row
Call Remplirliste(Me, "Departement",
gstrRangeListe, "cboCDep")

End Sub

Mon problème est le suivant:
Sur un autre document la liste déroulante reprend les noms
jusqu'au dernier nom dans la colonne.

Cependant dans un autre document il me liste aussi
jusqu'au dernier nom dans la colonne mais en plus jusqu'à
la ligne 65536 (même si les lignes sont vides) ??

Merci à celui qui connait une astuce ou au pire un autre
code pour remplir la liste déroulante...

Bon week-end à tous



--
Cordialement,

Michel Gaboly
http://www.gaboly.com