OVH Cloud OVH Cloud

Porté de variable

3 réponses
Avatar
olivier
Bonjours =E0 tous

Je n'arrive pas a faire passer la valeur d'une variable=20
d'une userform a une userform.

Je m'explique:

Dans ma Userform1 je declare "public MaVar as string"
Je lui donne la valeur "bonjours"

Lorsque je load Userform2 MaVar devient vide !

il doit y avoir une solution simple ?

Merci de votre aide

3 réponses

Avatar
Michel Gaboly
--------------E35E338FA36B88AFAA70A77A
Content-Type: text/plain; charset=iso-8859-1; x-mac-type="54455854"; x-mac-creator="4D4F5353"
Content-Transfer-Encoding: 8bit

Bonjour,

Il n'est pas possible de définir comme Public une variable
ailleurs que dans un module standard.

Plus exactement, on peut le faire, mais cela ne marche pas
ailleurs que dans un module standard.

Transfère simplement "Public MaVar as string" dans un
module adapté.


Il y a plusieurs messages ici récemment sur ce thème,
voici une réponse détaillée que j'ai faite :


Bonsoir,

Tu joues sur les mots ;-))

Si pour employer la variable, tu es obligé de la qualifier avec le nom du
UserForm où elle a été définie, ce n'est pas réellement une variable publique.

Pour ce faire, tu n'as d'ailleurs pas besoin de variable : tu peux utiliser un
contrôle quelconque du UserForm avec la propriété Visible ou Enabled à False.

D'autre part, cela ne marche pas :

1 - Crée un nouveau classeur

2 - Bascule dans l'environnement VBA

3 - Insère un module standard, avec ce code :

Option Explicit
Public VeritableVarPublique

Sub Test()
UserForm1.Show
MsgBox "Num : " & UserForm1.Num
MsgBox "VeritableVarPublique : " & VeritableVarPublique
End Sub

4 - Insère un UserForm avec un CommandButton et ce code :

Option Explicit
Public Num As Integer

Private Sub UserForm_Initialize()
Num = 1
End Sub

Private Sub CommandButton1_Click()
Num = 2
VeritableVarPublique = 2
Unload Me
End Sub

5 - Exécute ensuite la Sub "Test" du module. Le UserForm est affiché,
puis 2 messages apparaissent successivement :

Num : 1

puis

VeritableVarPublique : 2


Alors qu'après le clic sur le CommandButton, ces 2 lignes ont été exécutées :

Num = 2
VeritableVarPublique = 2

Pourtant Num est égal à 1 et non à 2

En fait, la dernière valeur de Num (2) n'est plus accessible après le
"Unload".

Pour afficher Num, la procédure recharge en mémoire le UserForm
(méthode Load et Non Show). Le code associé à l'événement Initialize est
exécuté, ce qui explique la valeur obtenue, 1.

Par contre, même après le Unload du UserForm, VeritableVarPublique
est toujours égale à 2.

La définition d'une variable Public dans un module standard fonctionne, ce
n'est pas le cas avec le module associé à un UserForm : le mot-clef Public
est accepté, mais c'est un leurre ;-(((



Bonjour

Il est tout à fait possible de déclarer une variable publique dans un module
de classe, et donc de userform. Cette variable devient alors une propriété
en lecture-écriture du le userform et on peut l'appeler d'un code externe
via l'objet userform qui la contient. Cela évite les variables public dans
un module standard

Dans le code du userform ( par exemple nommé UserForm1 ), on écrit, en tête
de module et après les éventuelles lignes Option ...
Public MaVariablePublique as Range ( pour reprendre l'exemple de
l'initiateur de la ficelle )

Dans le code externe au userform, on pourra utiliser cette variable via
UserForm1.MaVariablePublique = Cells(Ligne,Colonne)

--



Bonjours à tous

Je n'arrive pas a faire passer la valeur d'une variable
d'une userform a une userform.

Je m'explique:

Dans ma Userform1 je declare "public MaVar as string"
Je lui donne la valeur "bonjours"

Lorsque je load Userform2 MaVar devient vide !

il doit y avoir une solution simple ?

Merci de votre aide


--
Cordialement,

Michel Gaboly
http://www.gaboly.com


--------------E35E338FA36B88AFAA70A77A
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Bonjour,
<p>Il n'est pas possible de d&eacute;finir comme Public une variable
<br>ailleurs que dans un module standard.
<p>Plus exactement, on peut le faire, mais cela ne marche pas
<br>ailleurs que dans un module standard.
<p>Transf&egrave;re simplement "Public MaVar as string" dans un
<br>module adapt&eacute;.
<br>&nbsp;
<p>Il y a plusieurs messages ici r&eacute;cemment sur ce th&egrave;me,
<br>voici une&nbsp; r&eacute;ponse d&eacute;taill&eacute;e que j'ai faite
:
<br>&nbsp;
<blockquote>Bonsoir,
<p>Tu joues sur les mots ;-))
<p>Si pour employer la variable, tu es oblig&eacute; de la qualifier avec
le nom du
<br>UserForm o&ugrave; elle a &eacute;t&eacute; d&eacute;finie, ce n'est
pas r&eacute;ellement une variable publique.
<p>Pour ce faire, tu n'as d'ailleurs pas besoin de variable : tu peux utiliser
un
<br>contr&ocirc;le quelconque du UserForm avec la propri&eacute;t&eacute;
Visible ou Enabled &agrave; False.
<p>D'autre part, cela ne marche pas :
<p>1 - Cr&eacute;e un nouveau classeur
<p>2 - Bascule dans l'environnement VBA
<p>3 - Ins&egrave;re un module standard, avec ce code :
<p>&nbsp;&nbsp;&nbsp; Option Explicit
<br>&nbsp;&nbsp;&nbsp; Public VeritableVarPublique
<p>&nbsp;&nbsp;&nbsp; Sub Test()
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserForm1.Show
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "Num : " &amp; UserForm1.Num
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "VeritableVarPublique
: " &amp; VeritableVarPublique
<br>&nbsp;&nbsp;&nbsp; End Sub
<p>4 - Ins&egrave;re un UserForm avec un CommandButton et ce code :
<p>&nbsp;&nbsp;&nbsp; Option Explicit
<br>&nbsp;&nbsp;&nbsp; Public Num As Integer
<p>&nbsp;&nbsp;&nbsp; Private Sub UserForm_Initialize()
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Num = 1
<br>&nbsp;&nbsp;&nbsp; End Sub
<p>&nbsp;&nbsp;&nbsp; Private Sub CommandButton1_Click()
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Num = 2
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VeritableVarPublique = 2
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unload Me
<br>&nbsp;&nbsp;&nbsp; End Sub
<p>5 - Ex&eacute;cute ensuite la Sub "Test" du module. Le UserForm est
affich&eacute;,
<br>puis 2 messages apparaissent successivement :
<p>&nbsp;&nbsp;&nbsp; Num : 1
<p>puis
<p>&nbsp;&nbsp;&nbsp; VeritableVarPublique : 2
<br>&nbsp;
<p>Alors qu'apr&egrave;s le clic sur le CommandButton, ces 2 lignes ont
&eacute;t&eacute; ex&eacute;cut&eacute;es :
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Num = 2
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VeritableVarPublique = 2
<p>Pourtant Num est &eacute;gal &agrave; 1 et non &agrave; 2
<p>En fait, la derni&egrave;re valeur de Num (2) n'est plus accessible
apr&egrave;s le
<br>"Unload".
<p>Pour afficher Num, la proc&eacute;dure recharge en m&eacute;moire le
UserForm
<br>(m&eacute;thode Load et Non Show). Le code associ&eacute; &agrave;
l'&eacute;v&eacute;nement Initialize est
<br>ex&eacute;cut&eacute;, ce qui explique la valeur obtenue, 1.
<p>Par contre, m&ecirc;me apr&egrave;s le Unload du UserForm, VeritableVarPublique
<br>est toujours &eacute;gale &agrave; 2.
<p>La d&eacute;finition d'une variable Public dans un module standard fonctionne,
ce
<br>n'est pas le cas avec le module associ&eacute; &agrave; un UserForm
: le mot-clef Public
<br>est accept&eacute;, mais c'est un leurre ;-(((
<br>&nbsp;
<p>> Bonjour
<br>>
<br>> Il est tout &agrave; fait possible de d&eacute;clarer une variable
publique dans un module
<br>> de classe, et donc de userform. Cette variable devient alors une
propri&eacute;t&eacute;
<br>> en lecture-&eacute;criture du le userform et on peut l'appeler d'un
code externe
<br>> via l'objet userform qui la contient. Cela &eacute;vite les variables
public dans
<br>> un module standard
<br>>
<br>> Dans le code du userform ( par exemple nomm&eacute; UserForm1 ),
on &eacute;crit, en t&ecirc;te
<br>> de module et apr&egrave;s les &eacute;ventuelles lignes Option ...
<br>> Public MaVariablePublique as Range ( pour reprendre l'exemple de
<br>> l'initiateur de la ficelle )
<br>>
<br>> Dans le code externe au userform, on pourra utiliser cette variable
via
<br>>&nbsp;&nbsp;&nbsp;&nbsp; UserForm1.MaVariablePublique = Cells(Ligne,Colonne)
<br>>
<br>> --</blockquote>

<blockquote TYPE=CITE>Bonjours &agrave; tous
<p>Je n'arrive pas a faire passer la valeur d'une variable
<br>d'une userform a une userform.
<p>Je m'explique:
<p>Dans ma Userform1 je declare "public MaVar as string"
<br>Je lui donne la valeur "bonjours"
<p>Lorsque je load Userform2 MaVar devient vide !
<p>il doit y avoir une solution simple ?
<p>Merci de votre aide</blockquote>

<p>--
<br>Cordialement,
<p>Michel Gaboly
<br><A HREF="http://www.gaboly.com">http://www.gaboly.com</A>
<br>&nbsp;</html>

--------------E35E338FA36B88AFAA70A77A--

Avatar
exact, j'ai créé un module, déclaré la variable, et ça
fonctionne nickel.

merci michel
Avatar
Michel Gaboly
Le principal est que cela marche ;-))



exact, j'ai créé un module, déclaré la variable, et ça
fonctionne nickel.

merci michel


--
Cordialement,

Michel Gaboly
http://www.gaboly.com