Récupérer le nom d'un classeur d'un userform non modal [Résolu]

Signaler
Messages postés
14
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour à tous !

J'ai une question qui pourrait ressembler à une autre que j'avais posée auparavant ( ici ).

Le contexte :
Je suis sous Excel 2003, XP.
J'ai un classeur avec un userform modal (showmodal=true) qui peut lire et écrire dans "son" classeur.
Cependant, je peux avoir besoin d'aller chercher manuellement une valeur dans un autre classeur Excel.
Pour cela, je "hide" ce userform pour en afficher un autre (non modal) tout petit, avec juste un bouton qui le ferme et réaffiche le premier (c'est une "sorte" de Minimize en fait).

Le problème :
Lorsque je réaffiche le userform initial, et que je l'utilise pour lire ou écrire une donnée dans "son" classeur, il plante quand j'ai activé un autre classeur pour aller chercher manuellement une donnée.

Ce que j'ai essayé de faire, c'est de déclarer une variable publique (Wbk) qui, à l'initalisation du userform principal, prend le nom du classeur.
Le soucis, c'est que même déclarée publique, la variable est vide lorsque je veux m'en servir dans l'autre petit userfom (dans la sub click du bouton). Donc je ne peux pas réactiver mon classeur original par workbooks(Wbk).activate  ...

J'arrive à me débrouiller en général en VBA, mais c'est vrai que je pèche beaucoup lorsqu'il s'agit de ce genre de problème.

Dites-moi si vous voulez d'autres infos.
Et un grand merci par avance !
Samy.

4 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Lorsque tu démarres ton premier classeur, tu peux donner le nom de ton
classeur à une variable Workbook. C'est probablement ce que tu fais...
(?)

Public Wbk as workbook  ' déclaré dans un module
Set Wbk = ActiveWorkbook  ' appelé à l'ouverture ou ailleurs


Lorsque tu Hide ton Userform principal pour aller dans un autre
classeur, tu le réaffiches  en utilisant ton "UserFormMinimize"
(si j'ai bien compris...).

Il faudrait que dans ce petit UserForm, dans le code du bouton qui active le classeur principal, tu mettes Wbk.Activate ( et non pas <strike>Workbooks</strike>(Wbk).activate)

En principe, ça devrait fonctionner.

MPi
Messages postés
14
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2008

Je me rends compte j'ai qques infos en plus à rajouter, mais je n'ai pas trouvé le bouton éditer (il doit être trop gros )...

J'ai oublié de vous dire, dans le contexte, que je hide mon userform principal et affiche le petit avec un bouton.

De plus, ma demande serait plus simple si je demandais juste comment récupérer le nom du classeur d'un userform en fait. J'ai pensé à truc du style :
userform.parent.name


mais cette propriété (parent) n'est pas reconnue.

Avez-vous des indices ?

Merci et à +
Samy.
Messages postés
14
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2008

Merci MPi !
Ca fonctionne parfaitement !

Donc, pour déclarer des vars publiques et pour qu'elles soient accessibles partout (userform, subs....), il faut les mettre absolument dans un module.
Je crois que je vais désormais moins me prendre la tête. J'ai souvent été bloqué par ce type de problème, et souvent, j'était obligé de "ruser" pour y pallier.

Encore merci !

A+
Samy
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Les modules sont effectivement là pour ça... et on ne le répétera jamais assez...

Bonne prog

MPi