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.

10 réponses

1 2 3
Avatar
papou
Bonjour
Si tout ton code est placé dans ThisWorkbook, telle quelle, ta procédure
fonctionne chez moi (Xl2007 SP2 WinXp Pro SP2).
Si la déclaration se situe dans un module séparé, alors il faut définir ta
variable publique :
Public nomUtilisateurReel As String

Sinon, une remarque : la macro LireValeurCtrl me semble superflue :
'1°)Dans un module séparé :
Option Explicit
Public nomUtilisateurReel As String
'2°)Dans ThisWorkbook :
Private Sub Workbook_Open()
nomUtilisateurReel = Environ("username") ' Lecture du nom de
l'utilisateur
End Sub

Cordialement
Pascal

"René Roy" (sanssapm)> a écrit dans le message de news:

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
FS
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
isabelle
bonjour René,

une autre possibilité serait de stocker la valeur dans un Nom caché,
par exemple:

'pour Stocker la valeur:
Application.ExecuteExcel4Macro "SET.NAME(""Utilisateur"",""" &
Environ("username") & """)"

'pour récupérer la valeur (cette ligne peut être mit dans une autre macro)
Range("A1") = Application.ExecuteExcel4Macro("Utilisateur")

tu peut même récupérer cette valeur après avoir fermer et réouvert le
fichier,
c'est à dire tant que tu n'aura pas attribuer un autre valeur au Nom
"Utilisateur"

isabelle

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
René Roy
Bonjour Papou,

C'est vrai que l'utilisation de la macro LireValeurCtrl semble superflue.
Premièrement, je procède ainsi parce que je souhaite lire le nom de
l'utilisateur dans d'autres circonstances du même projet également. Alors je
pensais n'écrire le code qu'une fois dans une procédure distincte et faire
appel à celle-ci au besoin. Deuxièment, j'ai d'autres situations qui
nécessitent que je passe des valeurs entre procédures et çà ne fonctionne pas
chez moi. Alors je cherche à comprendre ce qui ne vas pas.

Quand j'utilise l'option "Ajouter un espion" sur la variable
nomUtilisateurReel et que j'exécute la macro pas à pas, la variable prend la
bonne valeur dans la procédure LireValeurCtrl mais affiche <Hors du contexte>
: Empty dès que le contrôle revient à la procédure Workbook_Open

Merci.

René R.

"papou" a écrit :

Bonjour
Si tout ton code est placé dans ThisWorkbook, telle quelle, ta procédure
fonctionne chez moi (Xl2007 SP2 WinXp Pro SP2).
Si la déclaration se situe dans un module séparé, alors il faut définir ta
variable publique :
Public nomUtilisateurReel As String

Sinon, une remarque : la macro LireValeurCtrl me semble superflue :
'1°)Dans un module séparé :
Option Explicit
Public nomUtilisateurReel As String
'2°)Dans ThisWorkbook :
Private Sub Workbook_Open()
nomUtilisateurReel = Environ("username") ' Lecture du nom de
l'utilisateur
End Sub

Cordialement
Pascal

"René Roy" (sanssapm)> a écrit dans le message de news:

> 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
René Roy
Bonjour Frédéric,

J'ai testé et çà fonctionne effectivement très bien. Je vais d'ailleurs
utiliser cette approche pour ce cas précis.

Cependant, je ne comprends toujours pas pourquoi je suis pas arrivé à
transporter la valeur de la variable nomUtilisateurReel entre 2 procédures.

Merci à vous.

René R.

"FS" a écrit :

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
Pour te rendre compte que cela fonctionne, essaie ce qui suit,
j'ai ajouté la ligne de code dans la procédure : Private Sub Workbook_Open
Msgbox "Nom Usager : " & nomUtilisateurReel

Si tu veux utiliser ta variable dans l'ensemble de ton classeur,
fais la déclaration de ta variable dans le haut d'un module standard :
Public nomUtilisateurReel As String

Option Explicit
Dim nomUtilisateurReel As String

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




"René Roy" (sanssapm)> a écrit dans le message de groupe de
discussion :
Bonjour Papou,

C'est vrai que l'utilisation de la macro LireValeurCtrl semble superflue.
Premièrement, je procède ainsi parce que je souhaite lire le nom de
l'utilisateur dans d'autres circonstances du même projet également. Alors je
pensais n'écrire le code qu'une fois dans une procédure distincte et faire
appel à celle-ci au besoin. Deuxièment, j'ai d'autres situations qui
nécessitent que je passe des valeurs entre procédures et çà ne fonctionne pas
chez moi. Alors je cherche à comprendre ce qui ne vas pas.

Quand j'utilise l'option "Ajouter un espion" sur la variable
nomUtilisateurReel et que j'exécute la macro pas à pas, la variable prend la
bonne valeur dans la procédure LireValeurCtrl mais affiche <Hors du contexte>
: Empty dès que le contrôle revient à la procédure Workbook_Open

Merci.

René R.

"papou" a écrit :

Bonjour
Si tout ton code est placé dans ThisWorkbook, telle quelle, ta procédure
fonctionne chez moi (Xl2007 SP2 WinXp Pro SP2).
Si la déclaration se situe dans un module séparé, alors il faut définir ta
variable publique :
Public nomUtilisateurReel As String

Sinon, une remarque : la macro LireValeurCtrl me semble superflue :
'1°)Dans un module séparé :
Option Explicit
Public nomUtilisateurReel As String
'2°)Dans ThisWorkbook :
Private Sub Workbook_Open()
nomUtilisateurReel = Environ("username") ' Lecture du nom de
l'utilisateur
End Sub

Cordialement
Pascal

"René Roy" (sanssapm)> a écrit dans le message de news:

> 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
René Roy
Bonjour Isabelle,

Vous m'avez dépanné dernièrement sur l'utilisation des noms cachés. J'avais
une erreur de syntaxe et depuis votre intervention çà fonctionne parfaitement.

Merci encore.

René R.

"isabelle" a écrit :

bonjour René,

une autre possibilité serait de stocker la valeur dans un Nom caché,
par exemple:

'pour Stocker la valeur:
Application.ExecuteExcel4Macro "SET.NAME(""Utilisateur"",""" &
Environ("username") & """)"

'pour récupérer la valeur (cette ligne peut être mit dans une autre macro)
Range("A1") = Application.ExecuteExcel4Macro("Utilisateur")

tu peut même récupérer cette valeur après avoir fermer et réouvert le
fichier,
c'est à dire tant que tu n'aura pas attribuer un autre valeur au Nom
"Utilisateur"

isabelle

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
René Roy
Bonjour MichDenis,

Et oui! Cela fonctionne et je vous remercie de me le montrer. Cependant,
pourquoi "l'espion" m'affiche hors contexte??

Merci. René R.

"MichDenis" a écrit :

Pour te rendre compte que cela fonctionne, essaie ce qui suit,
j'ai ajouté la ligne de code dans la procédure : Private Sub Workbook_Open
Msgbox "Nom Usager : " & nomUtilisateurReel

Si tu veux utiliser ta variable dans l'ensemble de ton classeur,
fais la déclaration de ta variable dans le haut d'un module standard :
Public nomUtilisateurReel As String

Option Explicit
Dim nomUtilisateurReel As String

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




"René Roy" (sanssapm)> a écrit dans le message de groupe de
discussion :
Bonjour Papou,

C'est vrai que l'utilisation de la macro LireValeurCtrl semble superflue.
Premièrement, je procède ainsi parce que je souhaite lire le nom de
l'utilisateur dans d'autres circonstances du même projet également. Alors je
pensais n'écrire le code qu'une fois dans une procédure distincte et faire
appel à celle-ci au besoin. Deuxièment, j'ai d'autres situations qui
nécessitent que je passe des valeurs entre procédures et çà ne fonctionne pas
chez moi. Alors je cherche à comprendre ce qui ne vas pas.

Quand j'utilise l'option "Ajouter un espion" sur la variable
nomUtilisateurReel et que j'exécute la macro pas à pas, la variable prend la
bonne valeur dans la procédure LireValeurCtrl mais affiche <Hors du contexte>
: Empty dès que le contrôle revient à la procédure Workbook_Open

Merci.

René R.

"papou" a écrit :

> Bonjour
> Si tout ton code est placé dans ThisWorkbook, telle quelle, ta procédure
> fonctionne chez moi (Xl2007 SP2 WinXp Pro SP2).
> Si la déclaration se situe dans un module séparé, alors il faut définir ta
> variable publique :
> Public nomUtilisateurReel As String
>
> Sinon, une remarque : la macro LireValeurCtrl me semble superflue :
> '1°)Dans un module séparé :
> Option Explicit
> Public nomUtilisateurReel As String
> '2°)Dans ThisWorkbook :
> Private Sub Workbook_Open()
> nomUtilisateurReel = Environ("username") ' Lecture du nom de
> l'utilisateur
> End Sub
>
> Cordialement
> Pascal
>
> "René Roy" (sanssapm)> a écrit dans le message de news:
>
> > 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
Bonjour René,

Voici pour la définition de ton espion :

A ) sélectionne le nom de ta variable
B ) menu contextuel - ajouter un espion
C ) dans la fenêtre ouvrante :
- Contexte :
Procédure : Toutes les procédures
Module : Le nom du module : ThisWorkbook
(tu as défini ta variable avec Dim dans ce module)

- Type d'espion
Tu sélectionnes le bouton radio : Arrêt si la valeur change

Il y a une autre façon d'effectuer le suivi d'une variable :
A ) dans la fenêtre de l'éditeur de code
Raccourci clavier : Ctrl + G
ou à partir du menu "Affichage" / fenêtre Exécution
n'importe où dans ton code, tu peux lui demander
d'afficher dans la fenêtre Exécution la valeur d'une variable
en inscrivant dans ton code :
Debug.Print nomUtilisateurReel

Il n'est pas nécessaire d'enlever ces lignes de code par la suite.
Dans les semaines qui suivent, si tu dois "débugger" un truc de ton
code, tes repères seront toujours là.



"René Roy" (sanssapm)> a écrit dans le message de groupe de
discussion :
Bonjour MichDenis,

Et oui! Cela fonctionne et je vous remercie de me le montrer. Cependant,
pourquoi "l'espion" m'affiche hors contexte??

Merci. René R.

"MichDenis" a écrit :

Pour te rendre compte que cela fonctionne, essaie ce qui suit,
j'ai ajouté la ligne de code dans la procédure : Private Sub Workbook_Open
Msgbox "Nom Usager : " & nomUtilisateurReel

Si tu veux utiliser ta variable dans l'ensemble de ton classeur,
fais la déclaration de ta variable dans le haut d'un module standard :
Public nomUtilisateurReel As String

Option Explicit
Dim nomUtilisateurReel As String

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




"René Roy" (sanssapm)> a écrit dans le message de groupe de
discussion :
Bonjour Papou,

C'est vrai que l'utilisation de la macro LireValeurCtrl semble superflue.
Premièrement, je procède ainsi parce que je souhaite lire le nom de
l'utilisateur dans d'autres circonstances du même projet également. Alors je
pensais n'écrire le code qu'une fois dans une procédure distincte et faire
appel à celle-ci au besoin. Deuxièment, j'ai d'autres situations qui
nécessitent que je passe des valeurs entre procédures et çà ne fonctionne pas
chez moi. Alors je cherche à comprendre ce qui ne vas pas.

Quand j'utilise l'option "Ajouter un espion" sur la variable
nomUtilisateurReel et que j'exécute la macro pas à pas, la variable prend la
bonne valeur dans la procédure LireValeurCtrl mais affiche <Hors du contexte>
: Empty dès que le contrôle revient à la procédure Workbook_Open

Merci.

René R.

"papou" a écrit :

> Bonjour
> Si tout ton code est placé dans ThisWorkbook, telle quelle, ta procédure
> fonctionne chez moi (Xl2007 SP2 WinXp Pro SP2).
> Si la déclaration se situe dans un module séparé, alors il faut définir ta
> variable publique :
> Public nomUtilisateurReel As String
>
> Sinon, une remarque : la macro LireValeurCtrl me semble superflue :
> '1°)Dans un module séparé :
> Option Explicit
> Public nomUtilisateurReel As String
> '2°)Dans ThisWorkbook :
> Private Sub Workbook_Open()
> nomUtilisateurReel = Environ("username") ' Lecture du nom de
> l'utilisateur
> End Sub
>
> Cordialement
> Pascal
>
> "René Roy" (sanssapm)> a écrit dans le message de news:
>
> > 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
AndréBdR
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