OVH Cloud OVH Cloud

Durée de vie d'une constante

4 réponses
Avatar
Olgga
Bonjour à tous,

J'ai déclaré dans un code Excel une constante booléenne dans une procédure
mais quand je change
de SUB, la constante se vide !
comment faire pour conserver la valeur que j'impose à ma variable ?

merci.
----------------------------------

Private sub MonExemple ()

Dim MaVariable as boolean
MaVariable = 1

...../....

end sub
--------------------------------
Private Sub MaSecondeProcédure ()

Msgbox (MaVariable)

End sub

(la box donne alors une valeur vide au lieu de 1 !)

4 réponses

Avatar
max
1) ce n'est pas une constante, c'est une variable (d'ailleurs, tu l'a même
nommé MaVariable)
2) comme la variable est déclaré dans une fonction, ca duré de vie (ainsi
que sa porté) est limité à la fonction où elle est déclarée. Dans un
environnement de programmation plus strict, il te donnerais une erreur de
compilation dans MaSecondeProcédure "variable MaVariable non définie".

Si tu veux déclarer une constante, fait le en dehors des fonctions/subs en
utilisant le mot clé const.




"Olgga" wrote in message
news:eot8SG$
Bonjour à tous,

J'ai déclaré dans un code Excel une constante booléenne dans une procédure
mais quand je change
de SUB, la constante se vide !
comment faire pour conserver la valeur que j'impose à ma variable ?

merci.
----------------------------------

Private sub MonExemple ()

Dim MaVariable as boolean
MaVariable = 1

...../....

end sub
--------------------------------
Private Sub MaSecondeProcédure ()

Msgbox (MaVariable)

End sub

(la box donne alors une valeur vide au lieu de 1 !)




Avatar
jean-marc
"Olgga" a écrit dans le message de
news:eot8SG$
Bonjour à tous,

J'ai déclaré dans un code Excel une constante booléenne dans une


procédure
mais quand je change
de SUB, la constante se vide !
comment faire pour conserver la valeur que j'impose à ma variable ?

merci.
----------------------------------

Private sub MonExemple ()

Dim MaVariable as boolean
MaVariable = 1

...../....

end sub
--------------------------------
Private Sub MaSecondeProcédure ()

Msgbox (MaVariable)

End sub

(la box donne alors une valeur vide au lieu de 1 !)




Hello,

1. Variable =/= Constante
Ce que tu appelles une "constante" n'est pas une constante,
mais une variable. Une constante, c'est tout à fait autre
chose.

Donc quand tu fais:
Dim toto as Boolean

toto est une variable, de type Booléen.

2. Durée de vie =/= portée
Ce que tu nommes "durée de vie", cela s'appelle
la portée d'une variable.

En VB, si tu déclares une variable au niveau d'une procédure,
ce que tu fais dans Sub MonExemple(), la porté de ta variable
"MaVariable" est limitée à cette procédure. Aucune autre
procédure ne peut voir cette variable.
Accessoirement, la durée de vie de cette variable est la durée
de vie de la procédure: au moment ou tu quittes la procédure,
la variable est détruite et son contenu perdu.

Donc en aucun cas tu ne peux accéder à cette variable dans
"MaSecondeProcédure", à cause de:
- La portée
- La durée de vie

Alors pourquoi peux tu faire dans "MaSecondeProcédure":
msgbox(Mavariable) et pourquoi un zéro?

Parce que VB (et VBA) sont trop laxistes: ils permettent
d'utiliser une variable sans déclaration préalable
(à moins que tu spécifies Option Explicit en tête de ta form,
en tout cas en VB).

Donc, quand tu fais msgbox(Mavariable), il affiche simplement
la valeur d'une nouvelle variable "MaVariable", qui n'a rien
à voir avec celle de la procédure MonExemple. Et par défaut,
il crée une variable de type Entier, et il l'initialise à zéro.

Voila :-)

Je te conseille d'acheter un bon livre de VB, les notions de portée,
de durée de vie, etc. sont absolument vitales en programmation et
ceci est expliqué dans les premiers chapitres de tout bon bouquin;

Si tu veux des références de bons livres, il n'y a qu'à demander :-)


--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Picalausa François
"jean-marc" a écrit dans le message de news:
4491c057$0$5518$
Parce que VB (et VBA) sont trop laxistes: ils permettent
d'utiliser une variable sans déclaration préalable
[...] Et par défaut,
il crée une variable de type Entier, et il l'initialise à zéro.



Hello,

Petite rectification : Si VB créait par défaut un entier, ce serait cool,
mais VB crée par défaut un Variant (horreur... désolé pour le pléonasme) et
l'initialise à Empty. (Ce qui explique la messagebox vide, et CInt(Empty) =
0)

--
François Picalausa
Avatar
jean-marc
"Picalausa François" a écrit dans le message de
news:
"jean-marc" a écrit dans le message de


news:
4491c057$0$5518$
> Parce que VB (et VBA) sont trop laxistes: ils permettent
> d'utiliser une variable sans déclaration préalable
> [...] Et par défaut,
> il crée une variable de type Entier, et il l'initialise à zéro.

Hello,



Hello!

Petite rectification : Si VB créait par défaut un entier, ce serait


cool,
mais VB crée par défaut un Variant (horreur... désolé pour le


pléonasme) et
l'initialise à Empty. (Ce qui explique la messagebox vide, et


CInt(Empty) > 0)

Oups, triple oups !! Bien sur tu as raison, je suis fatigué moi!
Besoin de vacances pour JM...

Merci de la rectification!

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;