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
FS
Bonjour André,

Il y a bien des manières de mettre de côté une valeur qu'on souhaite
conserver pour la réutiliser. Mais ce que tu imagines ne serait pas très
efficace à mon avis parce qu'une fonction ne peut pas créer une donnée
ex nihilo ni servir d'espace de stockage. Elle va chercher une donnée
quelque part où elle est stockée (quitte à lui faire subir quelques
transformations au passage) puis la restitue dans son résultat.
Pour répondre à ta demande, je vois au moins 4 possibilités (mais je ne
prétends pas à l'exhaustivité).

1- Une cellule quelconque d'un classeur, voire d'une macro
complémentaire ou même d'un modèle. Tout est imaginable.

2- Un nom dans le classeur qui t'intéresse. Tu peux créer un nom par
macro et lui attribuer une valeur indépendante d'une cellule ou d'une
feuille de calcul. Par exemple (bidon)
ActiveWorkbook.Names.Add Name:="maDate", RefersToR1C1:="=TODAY()+2"
Crée un nom maDate qui renvoie la date du jour plus deux jours.
ou
ActiveWorkbook.Names.Add Name:="info", RefersToR1C1:="=""NomPrénom"""

3- Un fichier texte peut permettre de stocker et de récupérer facilement
des données. Exemples ici :
http://frederic.sigonneau.free.fr/code/Formats/FichiersTextePourSauverDesInfos.txt

4- Un fichier .ini
En utilisant les fonctions API adéquates
http://frederic.sigonneau.free.fr/code/Systeme/APIFonctionsINI.txt
ou en traitant les fichiers comme des fichiers texte :
http://frederic.sigonneau.free.fr/code/Systeme/FichiersTexteEtINI.txt

5- la base de registre. Des exemple ici :
http://frederic.sigonneau.free.fr/code/Systeme/LireEcrireRegistreAvecWSH2.txt
http://frederic.sigonneau.free.fr/code/Systeme/LireEtEcrireBaseDeRegistre.txt

Bon courage,

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

AndréBdR a écrit :
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
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
AndréBdR
Merci pour la qualité et la rapidité de ta réponse.
Jusqu'à ce jour je n'ai utilisé que la méthode décrite dans ton point 1, parcequ'elle est la plus
naturelle/accessible, mais en rêvant tout le temps à d'autres dispositifs plus élégants et plus
malins.
Bon, maintenant je vais m'atteler à tous les autres que tu m'as décrits.
Bien à toi.


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

Il y a bien des manières de mettre de côté une valeur qu'on souhaite conserver pour la réutiliser.
Mais ce que tu imagines ne serait pas très efficace à mon avis parce qu'une fonction ne peut pas
créer une donnée ex nihilo ni servir d'espace de stockage. Elle va chercher une donnée quelque
part où elle est stockée (quitte à lui faire subir quelques transformations au passage) puis la
restitue dans son résultat.
Pour répondre à ta demande, je vois au moins 4 possibilités (mais je ne prétends pas à
l'exhaustivité).

1- Une cellule quelconque d'un classeur, voire d'une macro complémentaire ou même d'un modèle.
Tout est imaginable.

2- Un nom dans le classeur qui t'intéresse. Tu peux créer un nom par macro et lui attribuer une
valeur indépendante d'une cellule ou d'une feuille de calcul. Par exemple (bidon)
ActiveWorkbook.Names.Add Name:="maDate", RefersToR1C1:="=TODAY()+2"
Crée un nom maDate qui renvoie la date du jour plus deux jours.
ou
ActiveWorkbook.Names.Add Name:="info", RefersToR1C1:="=""NomPrénom"""

3- Un fichier texte peut permettre de stocker et de récupérer facilement des données. Exemples ici
:
http://frederic.sigonneau.free.fr/code/Formats/FichiersTextePourSauverDesInfos.txt

4- Un fichier .ini
En utilisant les fonctions API adéquates
http://frederic.sigonneau.free.fr/code/Systeme/APIFonctionsINI.txt
ou en traitant les fichiers comme des fichiers texte :
http://frederic.sigonneau.free.fr/code/Systeme/FichiersTexteEtINI.txt

5- la base de registre. Des exemple ici :
http://frederic.sigonneau.free.fr/code/Systeme/LireEcrireRegistreAvecWSH2.txt
http://frederic.sigonneau.free.fr/code/Systeme/LireEtEcrireBaseDeRegistre.txt

Bon courage,

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

AndréBdR a écrit :
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
AndréBdR
Je sens que ton exemple va me plaire, mais peut-être pas tout de suite car la notion de module de
classe m'est complètement étrangère, et il faut que je reparte de la bible.


"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
FS
Re,

A propos d'élégance, j'apprécie la tienne pour n'avoir pas succombé à la
tentation de me faire remarquer que j'avais quelques problèmes de calcul
(un comble avec Excel !) puisque j'annonçais 4 possibilités mais que
j'en proposais finalement 5...
Cordialement

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

AndréBdR a écrit :
Merci pour la qualité et la rapidité de ta réponse.
Jusqu'à ce jour je n'ai utilisé que la méthode décrite dans ton point 1, parcequ'elle est la plus
naturelle/accessible, mais en rêvant tout le temps à d'autres dispositifs plus élégants et plus
malins.
Bon, maintenant je vais m'atteler à tous les autres que tu m'as décrits.
Bien à toi.


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

Il y a bien des manières de mettre de côté une valeur qu'on souhaite conserver pour la réutiliser.
Mais ce que tu imagines ne serait pas très efficace à mon avis parce qu'une fonction ne peut pas
créer une donnée ex nihilo ni servir d'espace de stockage. Elle va chercher une donnée quelque
part où elle est stockée (quitte à lui faire subir quelques transformations au passage) puis la
restitue dans son résultat.
Pour répondre à ta demande, je vois au moins 4 possibilités (mais je ne prétends pas à
l'exhaustivité).

1- Une cellule quelconque d'un classeur, voire d'une macro complémentaire ou même d'un modèle.
Tout est imaginable.

2- Un nom dans le classeur qui t'intéresse. Tu peux créer un nom par macro et lui attribuer une
valeur indépendante d'une cellule ou d'une feuille de calcul. Par exemple (bidon)
ActiveWorkbook.Names.Add Name:="maDate", RefersToR1C1:="=TODAY()+2"
Crée un nom maDate qui renvoie la date du jour plus deux jours.
ou
ActiveWorkbook.Names.Add Name:="info", RefersToR1C1:="=""NomPrénom"""

3- Un fichier texte peut permettre de stocker et de récupérer facilement des données. Exemples ici
:
http://frederic.sigonneau.free.fr/code/Formats/FichiersTextePourSauverDesInfos.txt

4- Un fichier .ini
En utilisant les fonctions API adéquates
http://frederic.sigonneau.free.fr/code/Systeme/APIFonctionsINI.txt
ou en traitant les fichiers comme des fichiers texte :
http://frederic.sigonneau.free.fr/code/Systeme/FichiersTexteEtINI.txt

5- la base de registre. Des exemple ici :
http://frederic.sigonneau.free.fr/code/Systeme/LireEcrireRegistreAvecWSH2.txt
http://frederic.sigonneau.free.fr/code/Systeme/LireEtEcrireBaseDeRegistre.txt

Bon courage,

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

AndréBdR a écrit :
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
AndréBdR
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
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
AndréBdR
Heuh !!
J'ai dû commencer mes premières macros il y a ... plus de trois décennies (quand elles étaient
encore en Français) et, j'y suis même "très" bon de l'avis de ma concierge dont l'admiration me rend
blême.
En fait, c'est sur les modules de classe que je n'ai jamais eu l'occasion de travailler, ce qui ne
va pas durer longtemps.
Bien à toi, et merci encore pour les efforts de clarification que tu viens de faire.

"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
Modeste
Bonsour® AndréBdR avec ferveur ;o))) vous nous disiez :

Heuh !!
J'ai dû commencer mes premières macros il y a ... plus de trois
décennies (quand elles étaient encore en Français)



Heuh !!!
;o)))
bienvenue au club des dinosaures ;o)))
mais ne nous vieillit pas autant !!!
Excel Windows 1987 (22 ans)

pour mémoire :
Visicalc AppleII 1979
Multiplan (CP/M) 1982
Lotus 1-2-3 1983
Excel Mac 1985
Excel Windows 1987
Quatro Borland 1989
EXCEL 4 1992
Microsoft VBA 1995

mes premieres utilisations des tableurs
1982 HP86 CP/M Visicalc
Développements professionnels en paralelle d'une activité Mainframe
1986 IBMPC Dos Multiplan, Lotus
1989 IBMPC Windows EXCEL
Avatar
AndréBdR
Ach!...
C'est pourtant vrai.
En 1982 je bidouillais sur mon PC AT (je crois) avec Basic, puis Basic A, très peu de Multiplan etc
...
Ce n'était pas hier.
C'est sans doute pour ça que je compte les décennies à la louche, en déplaçant l'origine.
Tout cela a dû commencer quand j'essayais de convaincre quelques incrédules que l'ancètre de
l'informatique était peut-ête Fibonacci 1175-1240 (Laurent de Pise), dont la célèbre suite 1,1,2,3,5
etc...
commence par 1,1 alors que lui, qui a ramené le chiffre Zéro en Occident (un comble ...), était à
cent lieues d'imaginer que les deux premiers chiffres de sa suite pourraient bien devenir après mon
passage 0,1
Ah !!!!....

"Modeste" a écrit dans le message de news:
Bonsour® AndréBdR avec ferveur ;o))) vous nous disiez :

Heuh !!
J'ai dû commencer mes premières macros il y a ... plus de trois
décennies (quand elles étaient encore en Français)



Heuh !!!
;o)))
bienvenue au club des dinosaures ;o)))
mais ne nous vieillit pas autant !!!
Excel Windows 1987 (22 ans)

pour mémoire :
Visicalc AppleII 1979
Multiplan (CP/M) 1982
Lotus 1-2-3 1983
Excel Mac 1985
Excel Windows 1987
Quatro Borland 1989
EXCEL 4 1992
Microsoft VBA 1995

mes premieres utilisations des tableurs
1982 HP86 CP/M Visicalc
Développements professionnels en paralelle d'une activité Mainframe
1986 IBMPC Dos Multiplan, Lotus
1989 IBMPC Windows EXCEL
1 2 3