OVH Cloud OVH Cloud

[XL2002] Variable globale

6 réponses
Avatar
xyzDaniel
Bonjour =E0 tous,

O=F9 placer les deux Array contenant du texte pour qu'ils=20
soient utilis=E9s dans toutes les feuilles d'un VBAProject,=20
sans =EAtre oblig=E9s de les red=E9finir sans cesse ?

Je les ai plac=E9 un peu partout avec l'option PUBLIC sans=20
les voir des autres feuilles, y compris dans Modules de=20
Classe ou Modules.=20
Et je n'ai pas trouv=E9, rrr, de r=E9ponses sur le Newsgroups.
Merci beaucoup pour toutes les interventions.
Daniel

6 réponses

Avatar
Pierre Fauconnier
Bonsoir

Pour qu'une variable soit globale, ou publique, il faut la déclarer PUBLIC
au début ( !! ) d'un module standard, c'est-à-dire AVANT la première
procédure ou fonction de ce module et après les éventuelles lignes OPTION

Déclarer une variable PUBLIC dans un module de feuille, de classeur, de
boîte de dialogue ( d'une façon générale dans un module de classe) revient à
créer une propriété publique en lecture-écriture pour cette classe...


--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les gens arrêtent de se battre
en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi.be pour me répondre. Merci)


---
xyzDaniel wrote:
Bonjour à tous,

Où placer les deux Array contenant du texte pour qu'ils
soient utilisés dans toutes les feuilles d'un VBAProject,
sans être obligés de les redéfinir sans cesse ?

Je les ai placé un peu partout avec l'option PUBLIC sans
les voir des autres feuilles, y compris dans Modules de
Classe ou Modules.
Et je n'ai pas trouvé, rrr, de réponses sur le Newsgroups.
Merci beaucoup pour toutes les interventions.
Daniel


Avatar
Bonjour Pierre,
Et merci pour ta réponse.

Mais, j'ai bien mis en tête de module : Dim Public wshit1.
Et si j'en vois bien une dans les Functions : vide est son
contenu !

==> Comment, et je me suis mal exprimé précedemment, et où
mettre une seule fois le contenu fixe de cette variable
pour que celui-ci soit utilisé partout ?

Ex :
Dim Public wshit1

wshit1 = Array
("Nom_Ongle1","Nom_Ongle2","Nom_Ongle3","Nom_Ongle4")

En cas d'ajout d'un ou plusieurs onglets, je complète
wshit1 et relance le tout.
J'ai mis cette définition un peu partout : sans résultat.
Merci pour ta patience.
Daniel
-----Message d'origine-----
Bonsoir

Pour qu'une variable soit globale, ou publique, il faut
la déclarer PUBLIC

au début ( !! ) d'un module standard, c'est-à-dire AVANT
la première

procédure ou fonction de ce module et après les
éventuelles lignes OPTION


Déclarer une variable PUBLIC dans un module de feuille,
de classeur, de

boîte de dialogue ( d'une façon générale dans un module
de classe) revient à

créer une propriété publique en lecture-écriture pour
cette classe...



--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les gens
arrêtent de se battre

en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi.be pour me répondre. Merci)


---
xyzDaniel wrote:
Bonjour à tous,

Où placer les deux Array contenant du texte pour qu'ils
soient utilisés dans toutes les feuilles d'un
VBAProject,


sans être obligés de les redéfinir sans cesse ?

Je les ai placé un peu partout avec l'option PUBLIC sans
les voir des autres feuilles, y compris dans Modules de
Classe ou Modules.
Et je n'ai pas trouvé, rrr, de réponses sur le
Newsgroups.


Merci beaucoup pour toutes les interventions.
Daniel



.




Avatar
Michel Gaboly
Bonjour,

Une variable fixe, c'est une constante ;-))
Malheureusement, un Array ne peut être défini comme constante ;-((


Au début d'un module standard :

Public Liste


Dans le Workbook_Open (module ThisWorkbook)

Private Sub Workbook_Open()
Liste = Array("Feuil1", "Feuil2")
' Tes autres instructions éventuelles
End Sub


Ailleurs, par exemple dans le module d'un UserForm

Private Sub UserForm_Click()
MsgBox Liste(0)
End Sub




Bonjour Pierre,
Et merci pour ta réponse.

Mais, j'ai bien mis en tête de module : Dim Public wshit1.
Et si j'en vois bien une dans les Functions : vide est son
contenu !

==> Comment, et je me suis mal exprimé précedemment, et où
mettre une seule fois le contenu fixe de cette variable
pour que celui-ci soit utilisé partout ?

Ex :
Dim Public wshit1

wshit1 = Array
("Nom_Ongle1","Nom_Ongle2","Nom_Ongle3","Nom_Ongle4")

En cas d'ajout d'un ou plusieurs onglets, je complète
wshit1 et relance le tout.
J'ai mis cette définition un peu partout : sans résultat.
Merci pour ta patience.
Daniel
-----Message d'origine-----
Bonsoir

Pour qu'une variable soit globale, ou publique, il faut
la déclarer PUBLIC

au début ( !! ) d'un module standard, c'est-à-dire AVANT
la première

procédure ou fonction de ce module et après les
éventuelles lignes OPTION


Déclarer une variable PUBLIC dans un module de feuille,
de classeur, de

boîte de dialogue ( d'une façon générale dans un module
de classe) revient à

créer une propriété publique en lecture-écriture pour
cette classe...



--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les gens
arrêtent de se battre

en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi.be pour me répondre. Merci)


---
xyzDaniel wrote:
Bonjour à tous,

Où placer les deux Array contenant du texte pour qu'ils
soient utilisés dans toutes les feuilles d'un
VBAProject,


sans être obligés de les redéfinir sans cesse ?

Je les ai placé un peu partout avec l'option PUBLIC sans
les voir des autres feuilles, y compris dans Modules de
Classe ou Modules.
Et je n'ai pas trouvé, rrr, de réponses sur le
Newsgroups.


Merci beaucoup pour toutes les interventions.
Daniel



.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
Bonjour,
Ta réponse me conforte dans ce que j'avais mis
initialement en pratique.
Mais rien n'y fait : je n'ai rien dans les autres feuilles
de type Feuilnn.
Je tique sur ta première phrase : peut-être ne l'ai-je pas
bien comprise.

Tu écris : >Au début d'un module standard :

Or, la structure du projet est la suivante :

- VBAProject(nom-projet)
- Microsoft Excel Objets
- Feuil1(nom_onglet1)
- Feuil2(nom_onglet2)
- .....
- Feuil9(nom_onglet9)
- ThisWorkbook

Quel que soit l'endroit où je mets Public var1 et quel que
soit l'endroit unique où je définis son contenu (la
variable Me me permets de le vérifier à chaque étape, je
ne retrouve pas ces définitions, dans aucune Feuilnn ?
Mais encore merci pour ton intervention.
Daniel
-----Message d'origine-----
Bonjour,

Une variable fixe, c'est une constante ;-))
Malheureusement, un Array ne peut être défini comme
constante ;-((



Au début d'un module standard :

Public Liste


Dans le Workbook_Open (module ThisWorkbook)

Private Sub Workbook_Open()
Liste = Array("Feuil1", "Feuil2")
' Tes autres instructions éventuelles
End Sub


Ailleurs, par exemple dans le module d'un UserForm

Private Sub UserForm_Click()
MsgBox Liste(0)
End Sub




Bonjour Pierre,
Et merci pour ta réponse.

Mais, j'ai bien mis en tête de module : Dim Public
wshit1.


Et si j'en vois bien une dans les Functions : vide est
son


contenu !

==> Comment, et je me suis mal exprimé précedemment, et



mettre une seule fois le contenu fixe de cette variable
pour que celui-ci soit utilisé partout ?

Ex :
Dim Public wshit1

wshit1 = Array
("Nom_Ongle1","Nom_Ongle2","Nom_Ongle3","Nom_Ongle4")

En cas d'ajout d'un ou plusieurs onglets, je complète
wshit1 et relance le tout.
J'ai mis cette définition un peu partout : sans
résultat.


Merci pour ta patience.
Daniel
-----Message d'origine-----
Bonsoir

Pour qu'une variable soit globale, ou publique, il faut
la déclarer PUBLIC

au début ( !! ) d'un module standard, c'est-à-dire
AVANT



la première
procédure ou fonction de ce module et après les
éventuelles lignes OPTION


Déclarer une variable PUBLIC dans un module de feuille,
de classeur, de

boîte de dialogue ( d'une façon générale dans un module
de classe) revient à

créer une propriété publique en lecture-écriture pour
cette classe...



--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les gens
arrêtent de se battre

en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi.be pour me répondre. Merci)


---
xyzDaniel wrote:
Bonjour à tous,

Où placer les deux Array contenant du texte pour
qu'ils




soient utilisés dans toutes les feuilles d'un
VBAProject,


sans être obligés de les redéfinir sans cesse ?

Je les ai placé un peu partout avec l'option PUBLIC
sans




les voir des autres feuilles, y compris dans Modules
de




Classe ou Modules.
Et je n'ai pas trouvé, rrr, de réponses sur le
Newsgroups.


Merci beaucoup pour toutes les interventions.
Daniel



.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com


.






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

Bonjour,

Tu as bien fait de tiquer ;-))

Aucun de ces modules (module attaché à une feuille parti-
culière ou au classeur (ThisWorkbook) n'est un module
de standard. Il s'agit dans les 2 cas de variantes de modules
de classe.

Utilise le menu "Insertion" pour ajouter 1 module ("tout
court", pas un module de classe) et, en haut de ce module,
définis ta variable publique :

Public Liste

Et tu verra, que tout d'un coup, cela fonctionnera ;-)))


pour + de précisions, voici une discussion d'octobre der-
nier sur ce forum (le premier message est de moi) :



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)

--
Cela convient-il?
----
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..."
(remplacer NOSPAM par pfi pour me répondre. Merci)

---
Michel Gaboly wrote:
Bonsoir,

Il n'est pas possible de définir une variable Public dans le code
associé à un UserForm.

Il faut donc que la définisses dans un module standard :

Public NumLigne as Long

Dans le UserForm1, quand la recherche a abouti, tu rajoutes

NumLigne = Ligne

Dans le UserForm2, tu fais appel à NumLigne.

Selon les circonstances, il peut y avoir + simple : il n'est
peut-être pas néces- saire d'avoir 2 variables : dans le UserForm1,
tu peux peut-être utiliser la variable Public NumLigne directement,
et te passer de Ligne.







Bonjour,
Ta réponse me conforte dans ce que j'avais mis
initialement en pratique.
Mais rien n'y fait : je n'ai rien dans les autres feuilles
de type Feuilnn.
Je tique sur ta première phrase : peut-être ne l'ai-je pas
bien comprise.

Tu écris : >Au début d'un module standard :

Or, la structure du projet est la suivante :

- VBAProject(nom-projet)
- Microsoft Excel Objets
- Feuil1(nom_onglet1)
- Feuil2(nom_onglet2)
- .....
- Feuil9(nom_onglet9)
- ThisWorkbook

Quel que soit l'endroit où je mets Public var1 et quel que
soit l'endroit unique où je définis son contenu (la
variable Me me permets de le vérifier à chaque étape, je
ne retrouve pas ces définitions, dans aucune Feuilnn ?
Mais encore merci pour ton intervention.
Daniel
-----Message d'origine-----
Bonjour,

Une variable fixe, c'est une constante ;-))
Malheureusement, un Array ne peut être défini comme
constante ;-((



Au début d'un module standard :

Public Liste


Dans le Workbook_Open (module ThisWorkbook)

Private Sub Workbook_Open()
Liste = Array("Feuil1", "Feuil2")
' Tes autres instructions éventuelles
End Sub


Ailleurs, par exemple dans le module d'un UserForm

Private Sub UserForm_Click()
MsgBox Liste(0)
End Sub




Bonjour Pierre,
Et merci pour ta réponse.

Mais, j'ai bien mis en tête de module : Dim Public
wshit1.


Et si j'en vois bien une dans les Functions : vide est
son


contenu !

==> Comment, et je me suis mal exprimé précedemment, et



mettre une seule fois le contenu fixe de cette variable
pour que celui-ci soit utilisé partout ?

Ex :
Dim Public wshit1

wshit1 = Array
("Nom_Ongle1","Nom_Ongle2","Nom_Ongle3","Nom_Ongle4")

En cas d'ajout d'un ou plusieurs onglets, je complète
wshit1 et relance le tout.
J'ai mis cette définition un peu partout : sans
résultat.


Merci pour ta patience.
Daniel
-----Message d'origine-----
Bonsoir

Pour qu'une variable soit globale, ou publique, il faut
la déclarer PUBLIC

au début ( !! ) d'un module standard, c'est-à-dire
AVANT



la première
procédure ou fonction de ce module et après les
éventuelles lignes OPTION


Déclarer une variable PUBLIC dans un module de feuille,
de classeur, de

boîte de dialogue ( d'une façon générale dans un module
de classe) revient à

créer une propriété publique en lecture-écriture pour
cette classe...



--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les gens
arrêtent de se battre

en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi.be pour me répondre. Merci)


---
xyzDaniel wrote:
Bonjour à tous,

Où placer les deux Array contenant du texte pour
qu'ils




soient utilisés dans toutes les feuilles d'un
VBAProject,


sans être obligés de les redéfinir sans cesse ?

Je les ai placé un peu partout avec l'option PUBLIC
sans




les voir des autres feuilles, y compris dans Modules
de




Classe ou Modules.
Et je n'ai pas trouvé, rrr, de réponses sur le
Newsgroups.


Merci beaucoup pour toutes les interventions.
Daniel



.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com


.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com


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

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Bonjour,
<p>Tu as bien fait de tiquer ;-))
<p>Aucun de ces modules (module attach&eacute; &agrave; une feuille parti-
<br>culi&egrave;re ou au classeur (ThisWorkbook) n'est un module
<br>de standard. Il s'agit dans les 2 cas de variantes de modules
<br>de classe.
<p>Utilise le menu "Insertion" pour ajouter 1 module ("tout
<br>court", pas un module de classe) et, en haut de ce module,
<br>d&eacute;finis ta variable publique :
<p>Public Liste
<p>Et tu verra, que tout d'un coup, cela fonctionnera ;-)))
<br>&nbsp;
<p>pour + de pr&eacute;cisions, voici une discussion d'octobre der-
<br>nier sur ce forum (le premier message est de moi) :
<br>&nbsp;
<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>> --
<br>> Cela convient-il?
<br>> ----
<br>> Pierre Fauconnier
<br>> "C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..."
<br>> (remplacer NOSPAM par pfi pour me r&eacute;pondre. Merci)
<br>>
<br>> ---
<br>> Michel Gaboly wrote:
<br>> > Bonsoir,
<br>> >
<br>> > Il n'est pas possible de d&eacute;finir une variable Public dans
le code
<br>> > associ&eacute; &agrave; un UserForm.
<br>> >
<br>> > Il faut donc que la d&eacute;finisses dans un module standard :
<br>> >
<br>> > Public NumLigne as Long
<br>> >
<br>> > Dans le UserForm1, quand la recherche a abouti, tu rajoutes
<br>> >
<br>> > NumLigne = Ligne
<br>> >
<br>> > Dans le UserForm2, tu fais appel &agrave; NumLigne.
<br>> >
<br>> > Selon les circonstances, il peut y avoir + simple : il n'est
<br>> > peut-&ecirc;tre pas n&eacute;ces- saire d'avoir 2 variables : dans
le UserForm1,
<br>> > tu peux peut-&ecirc;tre utiliser la variable Public NumLigne directement,
<br>> > et te passer de Ligne.
<br>> >
<br>> >
<br>&nbsp;</blockquote>

<blockquote TYPE=CITE>Bonjour,
<br>Ta r&eacute;ponse me conforte dans ce que j'avais mis
<br>initialement en pratique.
<br>Mais rien n'y fait : je n'ai rien dans les autres feuilles
<br>de type Feuilnn.
<br>Je tique sur ta premi&egrave;re phrase : peut-&ecirc;tre ne l'ai-je
pas
<br>bien comprise.
<p>Tu &eacute;cris :&nbsp; >Au d&eacute;but d'un module standard :
<p>Or, la structure du projet est la suivante :
<p>- VBAProject(nom-projet)
<br>&nbsp;- Microsoft Excel Objets
<br>&nbsp;&nbsp; - Feuil1(nom_onglet1)
<br>&nbsp;&nbsp; - Feuil2(nom_onglet2)
<br>&nbsp;&nbsp; - .....
<br>&nbsp;&nbsp; - Feuil9(nom_onglet9)
<br>&nbsp;&nbsp; - ThisWorkbook
<p>Quel que soit l'endroit o&ugrave; je mets Public var1 et quel que
<br>soit l'endroit unique o&ugrave; je d&eacute;finis son contenu (la
<br>variable Me me permets de le v&eacute;rifier &agrave; chaque &eacute;tape,
je
<br>ne retrouve pas ces d&eacute;finitions, dans aucune Feuilnn ?
<br>Mais encore merci pour ton intervention.
<br>Daniel
<br>>-----Message d'origine-----
<br>>Bonjour,
<br>>
<br>>Une variable fixe, c'est une constante ;-))
<br>>Malheureusement, un Array ne peut &ecirc;tre d&eacute;fini comme
<br>constante ;-((
<br>>
<br>>
<br>>Au d&eacute;but d'un module standard :
<br>>
<br>>Public Liste
<br>>
<br>>
<br>>Dans le Workbook_Open (module ThisWorkbook)
<br>>
<br>>Private Sub Workbook_Open()
<br>>&nbsp;&nbsp;&nbsp; Liste = Array("Feuil1", "Feuil2")
<br>>&nbsp;&nbsp;&nbsp; ' Tes autres instructions &eacute;ventuelles
<br>>End Sub
<br>>
<br>>
<br>>Ailleurs, par exemple dans le module d'un UserForm
<br>>
<br>>Private Sub UserForm_Click()
<br>>&nbsp;&nbsp;&nbsp; MsgBox Liste(0)
<br>>End Sub
<br>>
<br>>
<br>>
<br>>
<br>>> Bonjour Pierre,
<br>>> Et merci pour ta r&eacute;ponse.
<br>>>
<br>>> Mais, j'ai bien mis en t&ecirc;te de module : Dim Public
<br>wshit1.
<br>>> Et si j'en vois bien une dans les Functions : vide est
<br>son
<br>>> contenu !
<br>>>
<br>>> ==> Comment, et je me suis mal exprim&eacute; pr&eacute;cedemment,
et
<br>o&ugrave;
<br>>> mettre une seule fois le contenu fixe de cette variable
<br>>> pour que celui-ci soit utilis&eacute; partout ?
<br>>>
<br>>> Ex :
<br>>> Dim Public wshit1
<br>>>
<br>>> wshit1 = Array
<br>>> ("Nom_Ongle1","Nom_Ongle2","Nom_Ongle3","Nom_Ongle4")
<br>>>
<br>>> En cas d'ajout d'un ou plusieurs onglets, je compl&egrave;te
<br>>> wshit1 et relance le tout.
<br>>> J'ai mis cette d&eacute;finition un peu partout : sans
<br>r&eacute;sultat.
<br>>> Merci pour ta patience.
<br>>> Daniel
<br>>> >-----Message d'origine-----
<br>>> >Bonsoir
<br>>> >
<br>>> >Pour qu'une variable soit globale, ou publique, il faut
<br>>> la d&eacute;clarer PUBLIC
<br>>> >au d&eacute;but ( !! ) d'un module standard, c'est-&agrave;-dire
<br>AVANT
<br>>> la premi&egrave;re
<br>>> >proc&eacute;dure ou fonction de ce module et apr&egrave;s les
<br>>> &eacute;ventuelles lignes OPTION
<br>>> >
<br>>> >D&eacute;clarer une variable PUBLIC dans un module de feuille,
<br>>> de classeur, de
<br>>> >bo&icirc;te de dialogue ( d'une fa&ccedil;on g&eacute;n&eacute;rale
dans un module
<br>>> de classe) revient &agrave;
<br>>> >cr&eacute;er une propri&eacute;t&eacute; publique en lecture-&eacute;criture
pour
<br>>> cette classe...
<br>>> >
<br>>> >
<br>>> >--
<br>>> >Cela convient-il?
<br>>> >----
<br>>> >Pierre Fauconnier
<br>>> >"Si j'&eacute;tais Dieu, je d&eacute;missionnerais pour que les
gens
<br>>> arr&ecirc;tent de se battre
<br>>> >en mon nom." (Le Chat...)
<br>>> >(remplacer NOSPAM par pfi.be pour me r&eacute;pondre. Merci)
<br>>> >
<br>>> >
<br>>> >---
<br>>> >xyzDaniel wrote:
<br>>> >> Bonjour &agrave; tous,
<br>>> >>
<br>>> >> O&ugrave; placer les deux Array contenant du texte pour
<br>qu'ils
<br>>> >> soient utilis&eacute;s dans toutes les feuilles d'un
<br>>> VBAProject,
<br>>> >> sans &ecirc;tre oblig&eacute;s de les red&eacute;finir sans cesse
?
<br>>> >>
<br>>> >> Je les ai plac&eacute; un peu partout avec l'option PUBLIC
<br>sans
<br>>> >> les voir des autres feuilles, y compris dans Modules
<br>de
<br>>> >> Classe ou Modules.
<br>>> >> Et je n'ai pas trouv&eacute;, rrr, de r&eacute;ponses sur le
<br>>> Newsgroups.
<br>>> >> Merci beaucoup pour toutes les interventions.
<br>>> >> Daniel
<br>>> >
<br>>> >
<br>>> >.
<br>>> >
<br>>
<br>>--
<br>>Cordialement,
<br>>
<br>>Michel Gaboly
<br>><a href="http://www.gaboly.com">http://www.gaboly.com</a>
<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>

--------------4A10AD931536ACDEEE3A73E7--





Avatar
Bonjour,
J'ai testé beaucoup de cas avant de poster un message,
mais je n'ai pas pu aller jusque là.
Bravo et merci.
Daniel
-----Message d'origine-----
Bonjour,

Tu as bien fait de tiquer ;-))

Aucun de ces modules (module attaché à une feuille parti-
culière ou au classeur (ThisWorkbook) n'est un module
de standard. Il s'agit dans les 2 cas de variantes de
modules

de classe.

Utilise le menu "Insertion" pour ajouter 1 module ("tout
court", pas un module de classe) et, en haut de ce module,
définis ta variable publique :

Public Liste

Et tu verra, que tout d'un coup, cela fonctionnera ;-)))


pour + de précisions, voici une discussion d'octobre der-
nier sur ce forum (le premier message est de moi) :



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)



--
Cela convient-il?
----
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer
le temps..."


(remplacer NOSPAM par pfi pour me répondre. Merci)

---
Michel Gaboly wrote:
Bonsoir,

Il n'est pas possible de définir une variable
Public dans le code



associé à un UserForm.

Il faut donc que la définisses dans un module
standard :




Public NumLigne as Long

Dans le UserForm1, quand la recherche a abouti,
tu rajoutes




NumLigne = Ligne

Dans le UserForm2, tu fais appel à NumLigne.

Selon les circonstances, il peut y avoir +
simple : il n'est



peut-être pas néces- saire d'avoir 2 variables :
dans le UserForm1,



tu peux peut-être utiliser la variable Public
NumLigne directement,



et te passer de Ligne.







Bonjour,
Ta réponse me conforte dans ce que j'avais mis
initialement en pratique.
Mais rien n'y fait : je n'ai rien dans les autres
feuilles


de type Feuilnn.
Je tique sur ta première phrase : peut-être ne l'ai-je
pas


bien comprise.

Tu écris : >Au début d'un module standard :

Or, la structure du projet est la suivante :

- VBAProject(nom-projet)
- Microsoft Excel Objets
- Feuil1(nom_onglet1)
- Feuil2(nom_onglet2)
- .....
- Feuil9(nom_onglet9)
- ThisWorkbook

Quel que soit l'endroit où je mets Public var1 et quel
que


soit l'endroit unique où je définis son contenu (la
variable Me me permets de le vérifier à chaque étape, je
ne retrouve pas ces définitions, dans aucune Feuilnn ?
Mais encore merci pour ton intervention.
Daniel
-----Message d'origine-----
Bonjour,

Une variable fixe, c'est une constante ;-))
Malheureusement, un Array ne peut être défini comme
constante ;-((



Au début d'un module standard :

Public Liste


Dans le Workbook_Open (module ThisWorkbook)

Private Sub Workbook_Open()
Liste = Array("Feuil1", "Feuil2")
' Tes autres instructions éventuelles
End Sub


Ailleurs, par exemple dans le module d'un UserForm

Private Sub UserForm_Click()
MsgBox Liste(0)
End Sub




Bonjour Pierre,
Et merci pour ta réponse.

Mais, j'ai bien mis en tête de module : Dim Public
wshit1.


Et si j'en vois bien une dans les Functions : vide
est




son
contenu !

==> Comment, et je me suis mal exprimé précedemment,
et





mettre une seule fois le contenu fixe de cette
variable




pour que celui-ci soit utilisé partout ?

Ex :
Dim Public wshit1

wshit1 = Array
("Nom_Ongle1","Nom_Ongle2","Nom_Ongle3","Nom_Ongle4")

En cas d'ajout d'un ou plusieurs onglets, je complète
wshit1 et relance le tout.
J'ai mis cette définition un peu partout : sans
résultat.


Merci pour ta patience.
Daniel
-----Message d'origine-----
Bonsoir

Pour qu'une variable soit globale, ou publique, il
faut





la déclarer PUBLIC
au début ( !! ) d'un module standard, c'est-à-dire
AVANT



la première
procédure ou fonction de ce module et après les
éventuelles lignes OPTION


Déclarer une variable PUBLIC dans un module de
feuille,





de classeur, de
boîte de dialogue ( d'une façon générale dans un
module





de classe) revient à
créer une propriété publique en lecture-écriture
pour





cette classe...


--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les
gens





arrêtent de se battre
en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi.be pour me répondre.
Merci)







---
xyzDaniel wrote:
Bonjour à tous,

Où placer les deux Array contenant du texte pour
qu'ils




soient utilisés dans toutes les feuilles d'un
VBAProject,


sans être obligés de les redéfinir sans cesse ?

Je les ai placé un peu partout avec l'option
PUBLIC






sans
les voir des autres feuilles, y compris dans
Modules






de
Classe ou Modules.
Et je n'ai pas trouvé, rrr, de réponses sur le
Newsgroups.


Merci beaucoup pour toutes les interventions.
Daniel



.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com


.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com