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

Résolu
_samy_ Messages postés 14 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 23 janvier 2008 - 25 oct. 2006 à 17:49
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 26 oct. 2006 à 11:06
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

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
25 oct. 2006 à 23:25
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
3
_samy_ Messages postés 14 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 23 janvier 2008
25 oct. 2006 à 18:09
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.
0
_samy_ Messages postés 14 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 23 janvier 2008
26 oct. 2006 à 10:06
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
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 oct. 2006 à 11:06
Les modules sont effectivement là pour ça... et on ne le répétera jamais assez...

Bonne prog

MPi
0
Rejoignez-nous