Macro Excel variable globale dans plusieurs projets Excel
Dernière réponse : dans Programmation
Bonjour,
Je cherche comment utiliser une variable globale dans plusieurs projets Excel. Est-ce possible ?
Voici un exemple :
Dans un premier projet Tab_init_var_globale.xls j'écris dans un Module 1 :
Public var_globale As Integer
Sub Init_var_globale()
var_globale = 9
End Sub
Puis dans un deuxième projet Tab_Util_var_globale.xls je souhaiterais utiliser la variable globale var_globale. Dans un Module 1, j'écris :
Sub Utilisation_var_globale()
' Rem : je suppose ici que le tableur Tab_init_var_globale.xls a déjà été ouvert
Application.Run "Tab_init_var_globale.xls!Module1.Init_var_globale"
MsgBox var_globale
End Sub
Et malheureusement ça ne marche pas : la variable var_globale est bien initialisée à 9 par la procédure Init_var_globale mais sa valeur n'est pas accessible dans le projet Tab_Util_var_globale.xls => var_globale vaut finalement 0.
Y a t-il une solution ?
Merci d'avance pour votre aide
Je cherche comment utiliser une variable globale dans plusieurs projets Excel. Est-ce possible ?
Voici un exemple :
Dans un premier projet Tab_init_var_globale.xls j'écris dans un Module 1 :
Public var_globale As Integer
Sub Init_var_globale()
var_globale = 9
End Sub
Puis dans un deuxième projet Tab_Util_var_globale.xls je souhaiterais utiliser la variable globale var_globale. Dans un Module 1, j'écris :
Sub Utilisation_var_globale()
' Rem : je suppose ici que le tableur Tab_init_var_globale.xls a déjà été ouvert
Application.Run "Tab_init_var_globale.xls!Module1.Init_var_globale"
MsgBox var_globale
End Sub
Et malheureusement ça ne marche pas : la variable var_globale est bien initialisée à 9 par la procédure Init_var_globale mais sa valeur n'est pas accessible dans le projet Tab_Util_var_globale.xls => var_globale vaut finalement 0.
Y a t-il une solution ?
Merci d'avance pour votre aide
Autres pages sur : macro excel variable globale plusieurs projets excel
Lassé par la pub ? Créez un compte
Meilleure solution
Bonjour,
Merci pour votre réponse. J'ai récupéré une autre réponse par un formateur, qui répond exactement à ce que je cherchais à faire. J'inclus sa réponse dans mon message.
Le mot projet correspond à un projet de programmation VBA (VBAProject), qu'on visualise dans l'Explorateur de Projets. Dans mon exemple, j'ai deux projets VBA (qui s'appellent par défaut VBAProject), contenus dans deux tableurs Excel (que j'ai appelés Tab_init_var_globale.xls et Tab_Util_var_globale.xls).
Pour pouvoir utiliser une variable globale dans plusieurs projets (qu'on peut appeler une variable "super globale"), si on reprend mon exemple ci-dessus, il faut :
- changer le nom du projet dans lequel on a déclaré la variable globale (dans l’explorateur de projets, clic droit sur le nom actuel du projet, puis Propriétés du projet, puis lui donner un nom compatible avec les règles des identifiants VB) : par exemple Projet_Init_var_globale
- Dans les projets où l'on souhaite utiliser la variable globale, on doit faire Outils-Références, puis cocher la case intitulée de la même façon que le projet qui contient la variable « super-globale » (pour que les variables globales d’un projet soient accessibles à d’autres, ces autres projets doivent faire référence au projet qui contient la variable globale). Dans mon exemple, dans mon projet du tableur Excel Tab_util_var_globale.xls, je mets en référence le projet Projet_Init_var_globale
- On peut faire référence à la variable "super-globale" dans toute procédure du/des projet(s) qui référencent le projet Projet_Init_var_globale.
Après avoir suivi cette manip, ça marche, var_globale vaut bien 9 en fin de procédure Utilisation_var_globale !
Merci pour votre réponse. J'ai récupéré une autre réponse par un formateur, qui répond exactement à ce que je cherchais à faire. J'inclus sa réponse dans mon message.
Le mot projet correspond à un projet de programmation VBA (VBAProject), qu'on visualise dans l'Explorateur de Projets. Dans mon exemple, j'ai deux projets VBA (qui s'appellent par défaut VBAProject), contenus dans deux tableurs Excel (que j'ai appelés Tab_init_var_globale.xls et Tab_Util_var_globale.xls).
Pour pouvoir utiliser une variable globale dans plusieurs projets (qu'on peut appeler une variable "super globale"), si on reprend mon exemple ci-dessus, il faut :
- changer le nom du projet dans lequel on a déclaré la variable globale (dans l’explorateur de projets, clic droit sur le nom actuel du projet, puis Propriétés du projet, puis lui donner un nom compatible avec les règles des identifiants VB) : par exemple Projet_Init_var_globale
- Dans les projets où l'on souhaite utiliser la variable globale, on doit faire Outils-Références, puis cocher la case intitulée de la même façon que le projet qui contient la variable « super-globale » (pour que les variables globales d’un projet soient accessibles à d’autres, ces autres projets doivent faire référence au projet qui contient la variable globale). Dans mon exemple, dans mon projet du tableur Excel Tab_util_var_globale.xls, je mets en référence le projet Projet_Init_var_globale
- On peut faire référence à la variable "super-globale" dans toute procédure du/des projet(s) qui référencent le projet Projet_Init_var_globale.
Après avoir suivi cette manip, ça marche, var_globale vaut bien 9 en fin de procédure Utilisation_var_globale !
Bonjour,
J'espère avoir compris en quoi mon message ne respectait pas le règlement. Je remets mon message initial avec les balises de code...
Je cherche comment utiliser une variable globale dans plusieurs projets Excel. Est-ce possible ?
Voici un exemple :
Dans un premier projet Tab_init_var_globale.xls j'écris dans un Module 1 :
Puis dans un deuxième projet Tab_Util_var_globale.xls je souhaiterais utiliser la variable globale var_globale. Dans un Module 1, j'écris :
Et malheureusement ça ne marche pas : la variable var_globale est bien initialisée à 9 par la procédure Init_var_globale mais sa valeur n'est pas accessible dans le projet Tab_Util_var_globale.xls => var_globale vaut finalement 0.
Y a t-il une solution ?
Merci d'avance pour votre aide
J'espère avoir compris en quoi mon message ne respectait pas le règlement. Je remets mon message initial avec les balises de code...
Je cherche comment utiliser une variable globale dans plusieurs projets Excel. Est-ce possible ?
Voici un exemple :
Dans un premier projet Tab_init_var_globale.xls j'écris dans un Module 1 :
Public var_globale As Integer Sub Init_var_globale() var_globale = 9 End Sub
Puis dans un deuxième projet Tab_Util_var_globale.xls je souhaiterais utiliser la variable globale var_globale. Dans un Module 1, j'écris :
Sub Utilisation_var_globale() ' Rem : je suppose ici que le tableur Tab_init_var_globale.xls a déjà été ouvert Application.Run "Tab_init_var_globale.xls!Module1.Init_var_globale" MsgBox var_globale End Sub
Et malheureusement ça ne marche pas : la variable var_globale est bien initialisée à 9 par la procédure Init_var_globale mais sa valeur n'est pas accessible dans le projet Tab_Util_var_globale.xls => var_globale vaut finalement 0.
Y a t-il une solution ?
Merci d'avance pour votre aide
Salut.
Tu as trouvé pour la mise en forme. Mais tu aurais pu modifier ton message, sans tout recopier. Qu'importe.
Alors bien sûr que c'est possible. Mais il va falloir m'expliquer ce que tu entends par projets Excel. S'il s'agit de classeurs différents, il va falloir stocker cette variable quelque part dans 1, là où 2 2 pourra la lire.
Il existe plusieurs endroits où stocker une valeur :
Dans une cellule du classeur 1.
Dans une cellule du classeur 2.
Comme tout document Office, un classeur possède des propriétés où l'on peut stocker ta valeur (fichier/propriété/personnalisation).
Dans la base de registre.
Dans un fichier quelconque.
Dans un fichier ini.
Mais certainement pas en mémoire, sauf si je n'ai pas compris ton histoire de "projet".
Tu as trouvé pour la mise en forme. Mais tu aurais pu modifier ton message, sans tout recopier. Qu'importe.
Alors bien sûr que c'est possible. Mais il va falloir m'expliquer ce que tu entends par projets Excel. S'il s'agit de classeurs différents, il va falloir stocker cette variable quelque part dans 1, là où 2 2 pourra la lire.
Il existe plusieurs endroits où stocker une valeur :
Mais certainement pas en mémoire, sauf si je n'ai pas compris ton histoire de "projet".
Bonjour,
On peut aussi utliser des API Windows
Voir le code ci-dessous dans un module VBA :
(Merci Zeb)
Cordialement.
Dominique
On peut aussi utliser des API Windows
Voir le code ci-dessous dans un module VBA :
'************************************************* Option Explicit Declare Function SetEnvironmentVariable Lib "kernel32" Alias _ "SetEnvironmentVariableA" (ByVal lpName As String, _ ByVal lpValue As String) As Long Declare Function GetEnvironmentVariable Lib "kernel32" Alias _ "GetEnvironmentVariableA" (ByVal lpName As String, _ ByVal lpBuffer As String, ByVal nSize As Long) As Long '************************************************************* Sub AutoOpen() Dim EnvVarName As String Dim ValVar As String Dim x Dim lpbuf As String Dim lsize As Long 'le nom de variable utilise est le Hwnd de l'application Excel (quand excel sera fermé, cette variable sera automatiquement détruite) EnvVarName = CStr(Application.Hwnd) lpbuf = Space$(256) lsize = 256 x = GetEnvironmentVariable(EnvVarName, lpbuf, lsize) ValVar = Left$(lpbuf, x) If ValVar = "1" Then 'si la variable d'environnement est renseignée à "1" c'est qu'un fichier est déjà ouvert. 'on peut alors décider de fermer le fichier en cours d'ouverture MsgBox "Un fichier est déjà ouvert" ActiveWorkbook.Close False End Else 'la variable d'environnement étant vide on lui affecte sa valeur "1" x = SetEnvironmentVariable(EnvVarName, "1") End If End Sub '*************************************************** Sub AutoClose() Dim EnvVarName As String Dim x 'le nom de variable utilise est le Hwnd de l'application Excel (quand excel sera fermé, cette variable sera automatiquement détruite) EnvVarName = CStr(Application.Hwnd) 'on vide la variable d'environnement à la fermeture du fichier x = SetEnvironmentVariable(EnvVarName, "") End Sub
(Merci Zeb)
Cordialement.
Dominique
Lassé par la pub ? Créez un compte
- Contenus similaires :
- Forum[EXCEL] Variable ligne dans une macro
- Forummacro excel : nom fichier en variable ds formule
- ForumAide langage Macro Excel / VB : "Paste" dans une variable
- ForumAppliquer macro à plusieurs cellules discontinues excel
- ForumMacro impression xls dont la source d'info sont plusieurs champs excel
- ForumMacro Excel travaillant sur plusieurs instances
- ForumMacro excel copie formule vers nombre cellules destinations variables
- Forummacro Excel : mise en forme de plusieurs feuilles d'un classeur
- Forum[Excel 2007] utiliser variable dans expression entre guillemets
- Voir plus