Bonsoir MichelTu joues sur les mots ;-))
En effet ... ;-)
J'aurais dû écrire : "Il est possible de passer une variable à un
userform..."
Personnellement, je préfère ma méthode... ;-), car elle permet de rendre un
userform autonome par rapport à un module standard, et donc d'être recopiée
dans un nouveau projet vba sans devoir tenir compte d'un module standard qui
lui permet de fonctionner...
Ce n'était évidemment pas une agression... ;-)
Bonne soirée
Pierre
Michel Gaboly wrote: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 à tous, j'ai un problème simple (enfin, ça dépend pour qui,
pour moi,c'est une mission) mais que je traine depuis quelques
jours. Alors voilà:
J'ai deux userform
Avec la première j'effectue une recherche sur une feuille excel.
Cette recherche me donne une ligne ( Cells(Ligne,Colonne) )
Comment faire pour utiliser "Ligne" dans un autre userform ? J'ai
chercher avec les variables Public (et static) mais je dois mal mis
prendre. Comment faire ?
Merci d'avance pour votre aide précieuse.
Ticker
Bonsoir Michel
Tu joues sur les mots ;-))
En effet ... ;-)
J'aurais dû écrire : "Il est possible de passer une variable à un
userform..."
Personnellement, je préfère ma méthode... ;-), car elle permet de rendre un
userform autonome par rapport à un module standard, et donc d'être recopiée
dans un nouveau projet vba sans devoir tenir compte d'un module standard qui
lui permet de fonctionner...
Ce n'était évidemment pas une agression... ;-)
Bonne soirée
Pierre
Michel Gaboly wrote:
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 à tous, j'ai un problème simple (enfin, ça dépend pour qui,
pour moi,c'est une mission) mais que je traine depuis quelques
jours. Alors voilà:
J'ai deux userform
Avec la première j'effectue une recherche sur une feuille excel.
Cette recherche me donne une ligne ( Cells(Ligne,Colonne) )
Comment faire pour utiliser "Ligne" dans un autre userform ? J'ai
chercher avec les variables Public (et static) mais je dois mal mis
prendre. Comment faire ?
Merci d'avance pour votre aide précieuse.
Ticker
Bonsoir MichelTu joues sur les mots ;-))
En effet ... ;-)
J'aurais dû écrire : "Il est possible de passer une variable à un
userform..."
Personnellement, je préfère ma méthode... ;-), car elle permet de rendre un
userform autonome par rapport à un module standard, et donc d'être recopiée
dans un nouveau projet vba sans devoir tenir compte d'un module standard qui
lui permet de fonctionner...
Ce n'était évidemment pas une agression... ;-)
Bonne soirée
Pierre
Michel Gaboly wrote: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 à tous, j'ai un problème simple (enfin, ça dépend pour qui,
pour moi,c'est une mission) mais que je traine depuis quelques
jours. Alors voilà:
J'ai deux userform
Avec la première j'effectue une recherche sur une feuille excel.
Cette recherche me donne une ligne ( Cells(Ligne,Colonne) )
Comment faire pour utiliser "Ligne" dans un autre userform ? J'ai
chercher avec les variables Public (et static) mais je dois mal mis
prendre. Comment faire ?
Merci d'avance pour votre aide précieuse.
Ticker
Re, Pierre.
Je ne me suis pas senti agressé ;-)) mais je prétend juste que cela ne
marche pas : si la variable a été modifiée pendant que le UserForm
était chargé, à l'aide d'un des contrôles de celui-ci, tu perds toute
trace de cette modif dès que le UserForm est déchargé (Unload).
Par conséquent, cela me paraît dangereux, dans la mesure où le
résultat obtenu n'est pas toujours le résulatt attendu.
Cependant, tu es libre ;-))))
Bonne fin de soirée aussi.Bonsoir MichelTu joues sur les mots ;-))
En effet ... ;-)
J'aurais dû écrire : "Il est possible de passer une variable à un
userform..."
Personnellement, je préfère ma méthode... ;-), car elle permet de
rendre un userform autonome par rapport à un module standard, et
donc d'être recopiée dans un nouveau projet vba sans devoir tenir
compte d'un module standard qui lui permet de fonctionner...
Ce n'était évidemment pas une agression... ;-)
Bonne soirée
Pierre
Michel Gaboly wrote: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 UserFormle 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 à tous, j'ai un problème simple (enfin, ça dépend pour
qui, pour moi,c'est une mission) mais que je traine depuis
quelques jours. Alors voilà:
J'ai deux userform
Avec la première j'effectue une recherche sur une feuille excel.
Cette recherche me donne une ligne ( Cells(Ligne,Colonne) )
Comment faire pour utiliser "Ligne" dans un autre userform ? J'ai
chercher avec les variables Public (et static) mais je dois mal
mis prendre. Comment faire ?
Merci d'avance pour votre aide précieuse.
Ticker
Re, Pierre.
Je ne me suis pas senti agressé ;-)) mais je prétend juste que cela ne
marche pas : si la variable a été modifiée pendant que le UserForm
était chargé, à l'aide d'un des contrôles de celui-ci, tu perds toute
trace de cette modif dès que le UserForm est déchargé (Unload).
Par conséquent, cela me paraît dangereux, dans la mesure où le
résultat obtenu n'est pas toujours le résulatt attendu.
Cependant, tu es libre ;-))))
Bonne fin de soirée aussi.
Bonsoir Michel
Tu joues sur les mots ;-))
En effet ... ;-)
J'aurais dû écrire : "Il est possible de passer une variable à un
userform..."
Personnellement, je préfère ma méthode... ;-), car elle permet de
rendre un userform autonome par rapport à un module standard, et
donc d'être recopiée dans un nouveau projet vba sans devoir tenir
compte d'un module standard qui lui permet de fonctionner...
Ce n'était évidemment pas une agression... ;-)
Bonne soirée
Pierre
Michel Gaboly wrote:
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 à tous, j'ai un problème simple (enfin, ça dépend pour
qui, pour moi,c'est une mission) mais que je traine depuis
quelques jours. Alors voilà:
J'ai deux userform
Avec la première j'effectue une recherche sur une feuille excel.
Cette recherche me donne une ligne ( Cells(Ligne,Colonne) )
Comment faire pour utiliser "Ligne" dans un autre userform ? J'ai
chercher avec les variables Public (et static) mais je dois mal
mis prendre. Comment faire ?
Merci d'avance pour votre aide précieuse.
Ticker
Re, Pierre.
Je ne me suis pas senti agressé ;-)) mais je prétend juste que cela ne
marche pas : si la variable a été modifiée pendant que le UserForm
était chargé, à l'aide d'un des contrôles de celui-ci, tu perds toute
trace de cette modif dès que le UserForm est déchargé (Unload).
Par conséquent, cela me paraît dangereux, dans la mesure où le
résultat obtenu n'est pas toujours le résulatt attendu.
Cependant, tu es libre ;-))))
Bonne fin de soirée aussi.Bonsoir MichelTu joues sur les mots ;-))
En effet ... ;-)
J'aurais dû écrire : "Il est possible de passer une variable à un
userform..."
Personnellement, je préfère ma méthode... ;-), car elle permet de
rendre un userform autonome par rapport à un module standard, et
donc d'être recopiée dans un nouveau projet vba sans devoir tenir
compte d'un module standard qui lui permet de fonctionner...
Ce n'était évidemment pas une agression... ;-)
Bonne soirée
Pierre
Michel Gaboly wrote: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 UserFormle 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 à tous, j'ai un problème simple (enfin, ça dépend pour
qui, pour moi,c'est une mission) mais que je traine depuis
quelques jours. Alors voilà:
J'ai deux userform
Avec la première j'effectue une recherche sur une feuille excel.
Cette recherche me donne une ligne ( Cells(Ligne,Colonne) )
Comment faire pour utiliser "Ligne" dans un autre userform ? J'ai
chercher avec les variables Public (et static) mais je dois mal
mis prendre. Comment faire ?
Merci d'avance pour votre aide précieuse.
Ticker