Userform et renvoi de la sélection d'un combobox
bonjour,
mon programme ouvre un userform (FrmEncoder) sur lequel se trouve un bouton de commande "Imprimer"
L'appui sur ce bouton ouvre un autre userform (FrmImprimer) comprenant deux contrôles:
- un listbox (ListImprime) permettant de sélectionner une année.
- un bouton de commande (CmdOkAnnee).
lorsque je sélectionne une année à imprimer dans le listbox, celle-ci est bien prise en compte (Su avec la ligne 3 ) mais n'est pas reconnue dans la feuille (FrmEncoder) ayant ouvert l'userform (Su avec la ligne 5 ) .
A noter : j'ai déclaré la variable "vAnnee" tantôt dans la feuille appelante, tantot dans la feuille appelé et cela ne change rien.
dans la littérature on lit toujours que la portée d'une variable est de niveau module si elle a été déclarée avec Dim) au début du module et de niveau projet si elle à été déclarée avec Public).
Mais la feuille VBA (également Thisworkbook) est elle considérée par VBA comme un module ?
J'espère avoir clairement formulé mon problème.
Merci à tous.
Code:
1 2 3 4 5
| Private Sub CmdImprimer_click()
i = 6
Worksheets("Opérations").Activate
FrmImprime.Show
Cells(2, 1) = vAnnee |
Code:
1 2 3 4 5
| Sub cmdOkAnnee_click()
vAnnee = FrmImprime.ListImprime
Cells(2, 1) = vAnnee
Unload FrmImprime
End Sub |
userform et renvoi de la selection listbox
Bonjour Daniel,
merci de ta réponse.
Le rajout "option explicit" sur les feuilles et modules ou elle ne figurait pas ne change rien au problème.
j'ai de plus introduit la vérification du type de donnée qui est tant à la saisie sur listbox de la feuille "FrmImprime" qu'au retour sur la feuille "FrmEncoder" de type Integer.
j'ai, de même, rendu public la procedure "private sub cmdImprimer " sans plus de résultat.
enfin, j'ai tenté un déplacement de la procédure cmdOkAnnee_click de la feuille FrmImprime sur la feuille FrmEncoder mais il ne la reconnait pas. Sans doute est-il impératif que le code des procédures "****_click" se trouve sur la feuille de l'userform pour être reconnu.
la règle des portées concerne-t-elle également les feuilles et thisworkbook ? Je n'ai pas trouvé de réponse dans mes lectures. En d'autres termes: Sont elles considérées comme des modules même si dans l'explorateur projet ce terme ne figure pas ?
cordialement.
userform et renvoi de la selection listbox
bonjour Docmarti,
Ce que tu écris est tout à fait exact. C'est la conclusion à laquelle je suis parvenu après plusieurs heures d'essais divers effectués avant de lire ton message.
Cela n'est toutefois, selon moi, pas cohérent : Il semble logique de déclarer une variable dans la procédure, la feuille ou le module ou elle est créée est affectée d'une valeur.
Dans mon cas elle est créée et affectée par la listbox dans une feuille VBA.
j'ai donc était obligé, à contre cœur, d'enlever sur cette feuille l'option explicit et la déclaration pour les reporter sur le module créé.
Autre constat troublant : si je laisse l'option explicit et la déclaration 'public' dans la feuille VBA, l'appel de la procédure logée dans le module fonctionne à condition qu'il soit lancé avec passage de la variable en argument. Dans ce cas, il n'est pas nécessaire faire une déclaration public dans le module.
dernier constat : Si je laisse la procédure appelée sur la feuille VBA contenant la procédure appelante, il n'y a aucun problème (pas besoin de passer la variable en argument). c'est sans doute la meilleure solution.
toutefois, je ne sais s'il est très logique de loger sur une feuille VBA des procédures autres que des procédures appelées par les contrôles de l'userform (_click, _change, _initialize .....).
en définitif, la grande difficulté pour le débutant est de manipuler les feuilles, les modules à bon escient.
Cordialement.