Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conserver la valeur d'une variable entre 2 procédures

22 réponses
Avatar
René Roy
Bonjour tout le monde,

Excel 2007, windows xp

Je souhaite transférer la valeur d'une variable entre 2 procédures d'un même
module mais je n'y arrive pas. Quelque chose échappe à ma compréhension.
Voici le code, pourtant simple ...

Option Explicit
Dim nomUtilisateurReel As String

Private Sub Workbook_Open()
Application.ScreenUpdating = False
LireValeurCtrl ' Lecture du nom de l'utilisateur
End Sub
Sub LireValeurCtrl()
' Lecture du nom de l'utilisateur
nomUtilisateurReel = Environ("username")
End Sub

Quand workbook_open s'exécute, il lance la procédure LireValeurCtrl qui
devrait me ramener la variable "nomUtilisateurReel". Pour une raison que
j'ignore la variable a une valeur correcte dans la procédure LireValeurCtrl
mais est vide lorsque l'exécution revient à Workbook_Open.

Pourquoi je perd la valeur de la variable entre les 2 procédures?

Merci à l'avance de votre aide qui m'est très précieuse. On trouve
énormément d'information sur ce forum.

René R.

2 réponses

1 2 3
Avatar
AndréBdR
Je crois que j'ai compris ce matin l'essentiel de ta présentation et du fonctionnement du module de
classe.
C'est précieusement gardé en mémoire dans un coin.
Salut à toi.
Bonne semaine.

"MichDenis" a écrit dans le message de news:
%
Bonjour André,

Si tu débutes ton apprentissage sur l'utilisation des macros
ou l'écriture de procédure, tu devrais remettre à plus tard
l'apprentissage concernant les modules de classe. Car, ceux-ci
font appel à des notions que tu dois maîtriser avant.

Public GrUser(1 To 5) As New MesUsers
La variable "GrUser" déclarer est un "tableau" (array)
Cette variable peut contenir jusqu'à 5 personnes. Dans
la déclaration, j'ai déterminé les bornes de 1 à 5, c'aurait
pu être autre chose, selon la problématique à résoudre.

Dans les procédures, au fur et à mesure que le programme le
demande, je peux mettre dans cette variable, 5 données. Chacune
d'elle à son index : GrUser(1) = "Toto". Lorsque j'ai déterminé la
valeur d'un index du tableau, je peux n'importe où dans le code
retrouvé dans le code la valeur que j'y ai mise x = GrUser(1)

L'intérêt des Propriétés "Let" et "Get" du module de classe, c'est qu'à
chaque fois que l'on ajoute ou modifie la variable, la procédure concernée
s'exécute. Dans l'exemple concerné, il aurait été possible de faire fi du
module de classe et insérer les procédures "propriété "Get" et "Let"
dans un module standard. J'arrête ici, à moins que tu aies une question
précise sur la procédure...!




"AndréBdR" a écrit dans le message de groupe de discussion :
4aa2272e$0$23481$
Je patauge un peu, sans doute parce que je n'ai pas compris ce que je dois avoir défini au
préalable
dans la macro "Retrouver_LaPersonne etc.."
Pourrais-tu m'éclairer un peu plus ?
Merci d'avance.

"MichDenis" a écrit dans le message de news:

Juste pour le plaisir, on peut utiliser un module de classe :
http://cjoint.com/?jdqYV5NVjD

Évidemment, les valeurs sont conservées le temps que le classeur est ouvert.
Si tu veux conserver les valeurs lors d'une future ouverture, il faut oublier cet
exemple.



"AndréBdR" a écrit dans le message de groupe de discussion :
4a9fbd60$0$12651$

Je te remercie Frédéric pour cette astuce que je cherchais un peu ... sans la trouver.
Du coup, j'en demanderais un peu plus...
Peut-on, durant l'exécution d'une macro, lui faire créer une fonction et lui demander
d'y
loger un
résultat trouvé pendant le déroulement cette macro?
En bref, la macro, après avoir trouvé la valeur Toto, crée une fontion Toto, où elle met
la valeur
de Toto qu'elle vient de trouver.


"FS" a écrit dans le message de news:

Bonjour,

Pour faire suite aux remarques de papou, une autre suggestion : utiliser une fonction
personnalisée plutôt qu'une variable. Petits avantages : lecture directe du
renseignement voulu
sans "intermédiaire" (plus de problème de "transfert") et utilisation possible dans une
feuille de
calcul.

'============== >>> Function NomUser()
NomUser = Environ("username")
End Function

Sub essai()
MsgBox NomUser
End Sub
'============== >>>
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

René Roy a écrit :
Bonjour tout le monde,

Excel 2007, windows xp

Je souhaite transférer la valeur d'une variable entre 2 procédures d'un même module
mais je n'y
arrive pas. Quelque chose échappe à ma compréhension. Voici le code, pourtant simple
...

Option Explicit
Dim nomUtilisateurReel As String

Private Sub Workbook_Open()
Application.ScreenUpdating = False
LireValeurCtrl ' Lecture du nom de l'utilisateur End Sub
Sub LireValeurCtrl()
' Lecture du nom de l'utilisateur
nomUtilisateurReel = Environ("username")
End Sub

Quand workbook_open s'exécute, il lance la procédure LireValeurCtrl qui devrait me
ramener la
variable "nomUtilisateurReel". Pour une raison que j'ignore la variable a une valeur
correcte
dans la procédure LireValeurCtrl mais est vide lorsque l'exécution revient à
Workbook_Open.

Pourquoi je perd la valeur de la variable entre les 2 procédures?

Merci à l'avance de votre aide qui m'est très précieuse. On trouve énormément
d'information sur
ce forum.

René R.












Avatar
michdenis
Et bien bravo André!


"AndréBdR" a écrit dans le message de groupe de discussion :
4aa4b9ef$0$12647$
Je crois que j'ai compris ce matin l'essentiel de ta présentation et du fonctionnement du
module de
classe.
C'est précieusement gardé en mémoire dans un coin.
Salut à toi.
Bonne semaine.

"MichDenis" a écrit dans le message de news:
%
Bonjour André,

Si tu débutes ton apprentissage sur l'utilisation des macros
ou l'écriture de procédure, tu devrais remettre à plus tard
l'apprentissage concernant les modules de classe. Car, ceux-ci
font appel à des notions que tu dois maîtriser avant.

Public GrUser(1 To 5) As New MesUsers
La variable "GrUser" déclarer est un "tableau" (array)
Cette variable peut contenir jusqu'à 5 personnes. Dans
la déclaration, j'ai déterminé les bornes de 1 à 5, c'aurait
pu être autre chose, selon la problématique à résoudre.

Dans les procédures, au fur et à mesure que le programme le
demande, je peux mettre dans cette variable, 5 données. Chacune
d'elle à son index : GrUser(1) = "Toto". Lorsque j'ai déterminé la
valeur d'un index du tableau, je peux n'importe où dans le code
retrouvé dans le code la valeur que j'y ai mise x = GrUser(1)

L'intérêt des Propriétés "Let" et "Get" du module de classe, c'est qu'à
chaque fois que l'on ajoute ou modifie la variable, la procédure concernée
s'exécute. Dans l'exemple concerné, il aurait été possible de faire fi du
module de classe et insérer les procédures "propriété "Get" et "Let"
dans un module standard. J'arrête ici, à moins que tu aies une question
précise sur la procédure...!




"AndréBdR" a écrit dans le message de groupe de discussion :
4aa2272e$0$23481$
Je patauge un peu, sans doute parce que je n'ai pas compris ce que je dois avoir défini
au
préalable
dans la macro "Retrouver_LaPersonne etc.."
Pourrais-tu m'éclairer un peu plus ?
Merci d'avance.

"MichDenis" a écrit dans le message de news:

Juste pour le plaisir, on peut utiliser un module de classe :
http://cjoint.com/?jdqYV5NVjD

Évidemment, les valeurs sont conservées le temps que le classeur est ouvert.
Si tu veux conserver les valeurs lors d'une future ouverture, il faut oublier cet
exemple.



"AndréBdR" a écrit dans le message de groupe de discussion :
4a9fbd60$0$12651$

Je te remercie Frédéric pour cette astuce que je cherchais un peu ... sans la trouver.
Du coup, j'en demanderais un peu plus...
Peut-on, durant l'exécution d'une macro, lui faire créer une fonction et lui demander
d'y
loger un
résultat trouvé pendant le déroulement cette macro?
En bref, la macro, après avoir trouvé la valeur Toto, crée une fontion Toto, où elle
met
la valeur
de Toto qu'elle vient de trouver.


"FS" a écrit dans le message de news:

Bonjour,

Pour faire suite aux remarques de papou, une autre suggestion : utiliser une fonction
personnalisée plutôt qu'une variable. Petits avantages : lecture directe du
renseignement voulu
sans "intermédiaire" (plus de problème de "transfert") et utilisation possible dans
une
feuille de
calcul.

'============== >>> Function NomUser()
NomUser = Environ("username")
End Function

Sub essai()
MsgBox NomUser
End Sub
'============== >>>
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

René Roy a écrit :
Bonjour tout le monde,

Excel 2007, windows xp

Je souhaite transférer la valeur d'une variable entre 2 procédures d'un même module
mais je n'y
arrive pas. Quelque chose échappe à ma compréhension. Voici le code, pourtant simple
...

Option Explicit
Dim nomUtilisateurReel As String

Private Sub Workbook_Open()
Application.ScreenUpdating = False
LireValeurCtrl ' Lecture du nom de l'utilisateur End Sub
Sub LireValeurCtrl()
' Lecture du nom de l'utilisateur
nomUtilisateurReel = Environ("username")
End Sub

Quand workbook_open s'exécute, il lance la procédure LireValeurCtrl qui devrait me
ramener la
variable "nomUtilisateurReel". Pour une raison que j'ignore la variable a une valeur
correcte
dans la procédure LireValeurCtrl mais est vide lorsque l'exécution revient à
Workbook_Open.

Pourquoi je perd la valeur de la variable entre les 2 procédures?

Merci à l'avance de votre aide qui m'est très précieuse. On trouve énormément
d'information sur
ce forum.

René R.












1 2 3