Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1804 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ma variable publique est désinitialisée par mon UserForm

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ma variable publique est désinitialisée par mon UserForm

n°1856708
Luis Maria​no
qui valait mieux que Mexico
Posté le 02-03-2009 à 13:08:12  profilanswer
 

Bonjour à tous ...
 
Je travaille sur des fichier Excel 2003 et VBA ,  mais bloque actuellement devant un problème auquel je ne comprend rien :
la fermeture d'une UserForm provoque la désinitialisation de mes variables publiques ...  
J'ai essayé de cerner au plus près le problème , alors plutôt qu'une longue description , je vous propose le test suivant ... ce sera bref , et ça me paraît très très étrange ..
 
Dans un fichier Excel tout neuf et vierge :
vous  insèrez 1seul UserForm avec 1 seul CommandButton dont le code est le suivant :
 

Code :
  1. OptionExplicit
  2. PrivateSub CommandButton1_Click()
  3.     Unload Me
  4. EndSub


 
ensuite , vous insèrez un seul module standard dont l'intégralité du code est le suivant :
 

Code :
  1. OptionExplicit
  2. Public Plage As Range
  3. Sub A()
  4. Set Plage = Range("A1:A10" )
  5.         UserForm1.Show
  6. EndSub


 
Après execution de cette macro , vous testez : ? Plage.Address dans la fenètre "Execution" .... et si c'est comme chez moi , vous obtenez l'erreur 91 ...
Première anomalie , je crois ...
 
et plus étrange encore : si on modifie la macro en rajoutant simplement un msgbox , autrement dit , la macro devient ça
 

Code :
  1. Sub A()
  2. Set Plage = Range("A1:A10" )
  3.         UserForm1.Show
  4.         MsgBox Plage.Address
  5. EndSub


 
et alors , l'éxécution de la macro ne provoque plus d'erreur et la variable "Plage" est stabilisée ... seconde étrangeté ...
 
et pour finir : 3iè mystère :  vous mettez en commentaire la ligne MsgBox Plage.Address , autrement dit on revient à la macro d'origine ... et bien l'éxécution de cette macro ne provoque plus l'erreur 91 , alors qu'elle la provoquait au début de ce test , ce qui , du coup me rend complètement dingue ...
 
Voilà , très probablement il y a une explication logique mais personellement , je sèche complétement ...
 
Merci beaucooup

mood
Publicité
Posté le 02-03-2009 à 13:08:12  profilanswer
 

n°1857003
olivthill
Posté le 03-03-2009 à 09:26:12  profilanswer
 

Personnellement, pour les variables globales, je ne les déclare pas dans lesforms ni dans les feuilles (worksheet). Je les déclare dans les modules. Ca a toujours bien marché, donc c'est une méthode que je recommande.

n°1857008
kao98
...
Posté le 03-03-2009 à 09:40:02  profilanswer
 

C'est normal comme comportement. Après exécution de la macro, tu n'es plus en mode exécution, puisque justement, la macro que tu as exécutée est terminée. Donc tes variables sont désallouée, et tout et tout !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1857048
Luis Maria​no
qui valait mieux que Mexico
Posté le 03-03-2009 à 12:17:24  profilanswer
 

olivthill a écrit :

Personnellement, pour les variables globales, je ne les déclare pas dans lesforms ni dans les feuilles (worksheet). Je les déclare dans les modules. Ca a toujours bien marché, donc c'est une méthode que je recommande.


Bin oui , mais c'est ce que j'ai fait , non ? ... puisque

Code :
  1. Public Plage as Range

est en tête de mon module standard ...

n°1857051
Luis Maria​no
qui valait mieux que Mexico
Posté le 03-03-2009 à 12:27:00  profilanswer
 

kao98 a écrit :

C'est normal comme comportement. Après exécution de la macro, tu n'es plus en mode exécution, puisque justement, la macro que tu as exécutée est terminée. Donc tes variables sont désallouée, et tout et tout !


Peut être bien qu'en effet c'est normal comme comportement mais dans ce cas : uniquement dans l'étape 1 de mon test car dans les étapes 2 et 3 de mon test , j'interroge a nouveau "? Plage.address" après l'éxécution de la macro , et dans ce cas , conformément à ton explication , ma variable devrait être desallouée , alors que ça me renvois correctement l'adresse de Plage ....
 
C'est bien ça ce qui me trouble , c'est l'incohérence des 3 étapes du test ....  
 
A plus tard et merci RV

n°1857186
tegu
Posté le 03-03-2009 à 16:49:54  profilanswer
 

Ta syntaxe "Range("A1:A10" )" veut en fait dire "ActiveWorkBook.ActiveSheet.Range("A1:A10" )"
Et aussi bien ActiveWorkBook que ActiveSheet peuvent varier en cours d'exécution du code en fonction de l'activation de certaines fenêtres Excel.
Si tu ajoutes à ça que la fenêtre d'exécution ne travaille pas tout à fait dans le même contexte que ton code (même en mode debug ; voir la commande With par exemple), tu as quelques pistes pour expliquer ton problème.
 
Conseil : il ne faut JAMAIS écrire ton code comme ça.
Il faut toujours référencer tes plages complètement par rapport à une variable WorkSheet au minimum.
Sinon tu vas au devant de grosses galères de debogage.
Même quand tu n'as qu'un classeur et qu'une feuille dans ce classeur.
Même quand tu as la flemme.

n°1857195
Luis Maria​no
qui valait mieux que Mexico
Posté le 03-03-2009 à 17:15:39  profilanswer
 

Bonjour Tegu
 
Oui , ok , je vois ce que ce genre d'imprécisions peut entrainer comme emmerdes dans un fichier "normal" et en utilisation "normale" , et je retiens le conseil ... promis/juré , dorénavant j'applique à la lettre tes recommandations ....  
Mais le code que j'exposais est dans un fichier "test" vide de tout , et créé uniquement pour exposer mon problème ...
 
En fait , et au dela des incohérences entre les 3 étapes de mon test , il y a peut être un truc que je n'ai pas compris dans l'utilisation des variables publiques :  
J'espérais qu'une fois ma variable déclarée publique puis définie dans une macro A , je pouvais, tant que mon fichier était ouvert, récupérer cette définition dans toutes les autres macros de ce fichier , à n'importe quel moment , …
Apparemment c'est pas le cas , alors je vais retourner bricoler du coté des variables statiques , a moins que ça se termine avec la méthode paléolithique d'une cellule "gardienne" où je dépose l'information …
 
en tous cas , merci et peut être à plus tard RV


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ma variable publique est désinitialisée par mon UserForm

 

Sujets relatifs
[Shell] : récupération de variable via awkprobleme variable flash =>php
[RESOLU] Envoi de variable indéfinie en url[PHP] Destruction d'une variable dans une boucle
[Javascript] calcul de prix avec multiplicateur variable !!! * Intégrer une variable PHP dans une variable javascript
Variable définie dans php.iniErreur dans une variable
Nom de variable avec concaténationVBA + userform
Plus de sujets relatifs à : Ma variable publique est désinitialisée par mon UserForm


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR