OVH Cloud OVH Cloud

durée de vie d'une constante

6 réponses
Avatar
Olgga
Bonjour à tous,

J'ai déclaré 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 !)

6 réponses

Avatar
Quetzalcoatl
Bonsoir,

exemple avec une constante TOTO de valeur "toto" :
Public Const TOTO as String = "toto"

"Olgga" a écrit dans le message de news:
%23FN5nF$
Bonjour à tous,

J'ai déclaré 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
Olgga
Merci mais il y a une erreur de compilation entre Public et Const !


"Quetzalcoatl" a écrit dans le message
de news:449073b1$0$990$
Bonsoir,

exemple avec une constante TOTO de valeur "toto" :
Public Const TOTO as String = "toto"

"Olgga" a écrit dans le message de news:
%23FN5nF$
Bonjour à tous,

J'ai déclaré 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
Pierre Fauconnier
Bonsoir

Attention, une constante n'est pas une variable... car une variable
constante ne varie pas beaucoup, et une constante variabe est
...inconstante...

Pour solutionner ton problème, deux solutions, selon l'utilisation que tu as
de tes procédures.

1. Déclarer ta variable en début de module, après les éventuelles lignes
"option...". Dans ce cas, la variable est disponible pour toutes les
procédures et fonctions du module, voire pour tous les modules du projet

dim MaVariable as boolean
ou
private MaVariable as boolean
pour une variable privée dont la portée est limitée au module dans lequel tu
la déclares

Public MaVariable as boolean
pour la rendre disponible pour tous les modules et modules de classe.
ATTENTION: cela n'est pas vrai pour une variable déclarée dans un module de
classe, de userform, de feuille ou de classeur. Dans ce cas, la variable
devient une "pseudo propriété" de l'objet...
( Simple, non ??? ;-) )

Exemple

Option Explicit
Dim MaVariable as boolean

Sub Proc1()
MaVariable = true
end sub

sub Proc2()
msgbox MaVariable
end sub

2. Passer ta variable de procédure proc1 à ta proc2. Cela peut être utilisé
lorsque ta proc1 appelle ta proc2 ( Ici Londres, les radis appellent les
carottes, je répète...)

Sub Proc1()
Dim MaVariable as boolean
MaVariable = true
Proc2 MaVariable
end sub

Sub Proc2(Valeur as boolean)
msgbox Valeur
end sub

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"Olgga" a écrit dans le message de news:
%23FN5nF$
Bonjour à tous,

J'ai déclaré 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
Pierre Fauconnier
J'ajoute que tu as intérêt à forcer la déclaration des variables en
commençant tous tes modules par
Option Explicit

Tu peux, dans Outils/options du VBE, cocher "Déclaration des variables
obligatoires", cela te forcera à déclarer toutes tes variables ( et donc à
te faire réfléchir sur la portée de celles-ci) et t'évitera des erreurs qui
représentent un casse-tête de débogage...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Olgga" a écrit dans le message de news:
%23FN5nF$
Bonjour à tous,

J'ai déclaré 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
Olgga
Super Cool !
Vraiment merci pour cette explication détaillée et pédagogique... et
humoristique !

ça fonctionne au poil maintenant.
bien cordialement.


"Pierre Fauconnier" a écrit dans le
message de news:uMBWGR$
Bonsoir

Attention, une constante n'est pas une variable... car une variable
constante ne varie pas beaucoup, et une constante variabe est
...inconstante...

Pour solutionner ton problème, deux solutions, selon l'utilisation que tu
as

de tes procédures.

1. Déclarer ta variable en début de module, après les éventuelles lignes
"option...". Dans ce cas, la variable est disponible pour toutes les
procédures et fonctions du module, voire pour tous les modules du projet

dim MaVariable as boolean
ou
private MaVariable as boolean
pour une variable privée dont la portée est limitée au module dans lequel
tu

la déclares

Public MaVariable as boolean
pour la rendre disponible pour tous les modules et modules de classe.
ATTENTION: cela n'est pas vrai pour une variable déclarée dans un module
de

classe, de userform, de feuille ou de classeur. Dans ce cas, la variable
devient une "pseudo propriété" de l'objet...
( Simple, non ??? ;-) )

Exemple

Option Explicit
Dim MaVariable as boolean

Sub Proc1()
MaVariable = true
end sub

sub Proc2()
msgbox MaVariable
end sub

2. Passer ta variable de procédure proc1 à ta proc2. Cela peut être
utilisé

lorsque ta proc1 appelle ta proc2 ( Ici Londres, les radis appellent les
carottes, je répète...)

Sub Proc1()
Dim MaVariable as boolean
MaVariable = true
Proc2 MaVariable
end sub

Sub Proc2(Valeur as boolean)
msgbox Valeur
end sub

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe

zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"Olgga" a écrit dans le message de news:
%23FN5nF$
Bonjour à tous,

J'ai déclaré 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
AV
Alternative, si tu veux que ta "constante dure autant que ton fichier" : créer
un nom (éventuellement caché)

Exemple de création :
x = False
Names.Add "maConstante", x, False 'le dernier argument (False) est pour cacher
le nom

Pour "l'interroger" :
MsgBox [maConstante]

Pour modifier sa valeur :
Names("maConstante").RefersTo = True

AV