OVH Cloud OVH Cloud

portée d'un procédure

12 réponses
Avatar
lolo
Bonjour =E0 toutes et =E0 tous,

J'ai une proc=E9dure que j'ai d=E9fini comme "public" dans un=20
formulaire. Ce formulaire contient un bouton qui ouvre un=20
autre formualire lorsqu'on l'active. Dans cet autre=20
formulaire je fais appel =E0 la proc=E9dure publique que=20
j'avais pr=E9c=E9demment d=E9fini...et l=E0 le programme ne=20
reconnait pas le nom de la proc=E9dure en question. Je=20
croyais pourtant que les proc=E9dures d=E9finies=20
comme "public" pouvaient =EAtre appel=E9es de n'importe o=F9=20
dans un projet ?

Merci d'avance =E0 ceux qui m'=E9claireront.

lolo

2 réponses

1 2
Avatar
papou
Bonjour Denis
Nous sommes d'accord sur cette syntaxe :-)
Ceci étant, je vois difficilement l'intérêt de devoir effectuer une
qualification complète pour une variable devant être publique !
Pour ce qui me concerne, les déclarations et procédures devant être
utilisées sur l'ensemble d'un projet s'inscrivent systématiquement dans un
module à part.
J'estime avoir une meilleure visibilité en utilisant cette méthode.
Mais cela ne reste qu'un point de vue personnel :-)
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:
Bonjour Papou,

Ta procédure ne fonctionne pas parce que tu n'as pas utilisé la bonne
syntaxe.


Essaie comme ceci :


Sub EssaisLe()
MsgBox Userform1.LaVariable
Unload UserForm1
End Sub


Salutations!




"papou" <nspm> a écrit dans le message de
news:

Bonjour Denis
Je vais répondre avec méfiance : Oui mais peut-être pas complètement :-))
Voilà ce que je teste et qui ne me renvoie rien :
Dans le code d'un Userform
Public LaVariable As String
Private Sub UserForm_Initialize()
LaVariable = "Testons"
End Sub
Private Sub CommandButton1_Click()
Call EssaisLe
End Sub
Dans un module
Sub EssaisLe()
MsgBox LaVariable
Unload UserForm1
End Sub

Cordialement
Pascal


"Denis Michon" a écrit dans le message de
news:v64vb.41930$
Bonjour Papou,


As-tu réellement testé ?

;-)


Salutations!


"papou" <nspm> a écrit dans le message de
news:

Bonjour lolo
Tout ce que tu déclares dans un UserForm ou une Feuille reste Private
Pour rendre accessible une procédure ou une variable à l'ensemble des
objets, il faut la placer dans un module et la faire précéder de Public
Cordialement
Pascal


"lolo" a écrit dans le message de
news:099f01c3af66$086dbb80$
Bonjour à toutes et à tous,

J'ai une procédure que j'ai défini comme "public" dans un
formulaire. Ce formulaire contient un bouton qui ouvre un
autre formualire lorsqu'on l'active. Dans cet autre
formulaire je fais appel à la procédure publique que
j'avais précédemment défini...et là le programme ne
reconnait pas le nom de la procédure en question. Je
croyais pourtant que les procédures définies
comme "public" pouvaient être appelées de n'importe où
dans un projet ?

Merci d'avance à ceux qui m'éclaireront.

lolo










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

Bonjour Papou,

Tout à fait d'accor avec toi. ;-))

J'ai déjà participé à un échange sur ce thème récemment (ficelle Passage
d'une variable entre deux userform).

Voici ce que j'y disais :


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 Denis
Nous sommes d'accord sur cette syntaxe :-)
Ceci étant, je vois difficilement l'intérêt de devoir effectuer une
qualification complète pour une variable devant être publique !
Pour ce qui me concerne, les déclarations et procédures devant être
utilisées sur l'ensemble d'un projet s'inscrivent systématiquement dans un
module à part.
J'estime avoir une meilleure visibilité en utilisant cette méthode.
Mais cela ne reste qu'un point de vue personnel :-)
Cordialement
Pascal

"michdenis" a écrit dans le message de
news:
Bonjour Papou,

Ta procédure ne fonctionne pas parce que tu n'as pas utilisé la bonne
syntaxe.


Essaie comme ceci :


Sub EssaisLe()
MsgBox Userform1.LaVariable
Unload UserForm1
End Sub


Salutations!




"papou" <nspm> a écrit dans le message de
news:

Bonjour Denis
Je vais répondre avec méfiance : Oui mais peut-être pas complètement :-))
Voilà ce que je teste et qui ne me renvoie rien :
Dans le code d'un Userform
Public LaVariable As String
Private Sub UserForm_Initialize()
LaVariable = "Testons"
End Sub
Private Sub CommandButton1_Click()
Call EssaisLe
End Sub
Dans un module
Sub EssaisLe()
MsgBox LaVariable
Unload UserForm1
End Sub

Cordialement
Pascal


"Denis Michon" a écrit dans le message de
news:v64vb.41930$
Bonjour Papou,


As-tu réellement testé ?

;-)


Salutations!


"papou" <nspm> a écrit dans le message de
news:

Bonjour lolo
Tout ce que tu déclares dans un UserForm ou une Feuille reste Private
Pour rendre accessible une procédure ou une variable à l'ensemble des
objets, il faut la placer dans un module et la faire précéder de Public
Cordialement
Pascal


"lolo" a écrit dans le message de
news:099f01c3af66$086dbb80$
Bonjour à toutes et à tous,

J'ai une procédure que j'ai défini comme "public" dans un
formulaire. Ce formulaire contient un bouton qui ouvre un
autre formualire lorsqu'on l'active. Dans cet autre
formulaire je fais appel à la procédure publique que
j'avais précédemment défini...et là le programme ne
reconnait pas le nom de la procédure en question. Je
croyais pourtant que les procédures définies
comme "public" pouvaient être appelées de n'importe où
dans un projet ?

Merci d'avance à ceux qui m'éclaireront.

lolo










--
Cordialement,

Michel Gaboly
http://www.gaboly.com


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

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Bonjour Papou,
<p>Tout &agrave; fait d'accor avec toi. ;-))
<p>J'ai d&eacute;j&agrave; particip&eacute; &agrave; un &eacute;change
sur ce th&egrave;me r&eacute;cemment (ficelle Passage
<br>d'une variable entre deux userform).
<p>Voici ce que j'y disais :
<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 ;-(((</blockquote>

<blockquote TYPE=CITE>Bonjour Denis
<br>Nous sommes d'accord sur cette syntaxe :-)
<br>Ceci &eacute;tant, je vois difficilement l'int&eacute;r&ecirc;t de
devoir effectuer une
<br>qualification compl&egrave;te pour une variable devant &ecirc;tre publique
!
<br>Pour ce qui me concerne, les d&eacute;clarations et proc&eacute;dures
devant &ecirc;tre
<br>utilis&eacute;es sur l'ensemble d'un projet s'inscrivent syst&eacute;matiquement
dans un
<br>module &agrave; part.
<br>J'estime avoir une meilleure visibilit&eacute; en utilisant cette m&eacute;thode.
<br>Mais cela ne reste qu'un point de vue personnel :-)
<br>Cordialement
<br>Pascal
<p>"michdenis" &lt; a &eacute;crit dans le message
de
<br><a href="news:">news:</a>...
<br>> Bonjour Papou,
<br>>
<br>> Ta proc&eacute;dure ne fonctionne pas parce que tu n'as pas utilis&eacute;
la bonne
<br>syntaxe.
<br>>
<br>> Essaie comme ceci :
<br>>
<br>>
<br>> Sub EssaisLe()
<br>> MsgBox Userform1.LaVariable
<br>> Unload UserForm1
<br>> End Sub
<br>>
<br>>
<br>> Salutations!
<br>>
<br>>
<br>>
<br>>
<br>> "papou" &lt;nspm> a &eacute;crit dans le message de
<br><a href="news:">news:</a>...
<br>> Bonjour Denis
<br>> Je vais r&eacute;pondre avec m&eacute;fiance : Oui mais peut-&ecirc;tre
pas compl&egrave;tement :-))
<br>> Voil&agrave; ce que je teste et qui ne me renvoie rien :
<br>> Dans le code d'un Userform
<br>> Public LaVariable As String
<br>> Private Sub UserForm_Initialize()
<br>> LaVariable = "Testons"
<br>> End Sub
<br>> Private Sub CommandButton1_Click()
<br>> Call EssaisLe
<br>> End Sub
<br>> Dans un module
<br>> Sub EssaisLe()
<br>> MsgBox LaVariable
<br>> Unload UserForm1
<br>> End Sub
<br>>
<br>> Cordialement
<br>> Pascal
<br>>
<br>>
<br>> "Denis Michon" &lt; a &eacute;crit dans
le message de
<br>> <a href="news:v64vb.41930$">news:v64vb.41930$</a>...
<br>> > Bonjour Papou,
<br>> >
<br>> >
<br>> > As-tu r&eacute;ellement test&eacute; ?
<br>> >
<br>> > ;-)
<br>> >
<br>> >
<br>> > Salutations!
<br>> >
<br>> >
<br>> > "papou" &lt;nspm> a &eacute;crit dans le message de
<br>> <a href="news:">news:</a>...
<br>> > Bonjour lolo
<br>> > Tout ce que tu d&eacute;clares dans un UserForm ou une Feuille
reste Private
<br>> > Pour rendre accessible une proc&eacute;dure ou une variable &agrave;
l'ensemble des
<br>> > objets, il faut la placer dans un module et la faire pr&eacute;c&eacute;der
de Public
<br>> > Cordialement
<br>> > Pascal
<br>> >
<br>> >
<br>> > "lolo" &lt; a &eacute;crit
dans le message de
<br>> > <a href="news:099f01c3af66$086dbb80$">news:099f01c3af66$086dbb80$</a>...
<br>> > Bonjour &agrave; toutes et &agrave; tous,
<br>> >
<br>> > J'ai une proc&eacute;dure que j'ai d&eacute;fini comme "public"
dans un
<br>> > formulaire. Ce formulaire contient un bouton qui ouvre un
<br>> > autre formualire lorsqu'on l'active. Dans cet autre
<br>> > formulaire je fais appel &agrave; la proc&eacute;dure publique
que
<br>> > j'avais pr&eacute;c&eacute;demment d&eacute;fini...et l&agrave;
le programme ne
<br>> > reconnait pas le nom de la proc&eacute;dure en question. Je
<br>> > croyais pourtant que les proc&eacute;dures d&eacute;finies
<br>> > comme "public" pouvaient &ecirc;tre appel&eacute;es de n'importe
o&ugrave;
<br>> > dans un projet ?
<br>> >
<br>> > Merci d'avance &agrave; ceux qui m'&eacute;claireront.
<br>> >
<br>> > lolo
<br>> >
<br>> >
<br>> >
<br>>
<br>>
<br>></blockquote>

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

--------------166B52F330B331D85A6AC10A--



1 2