Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Visibilité d'une variable entre 2 classeurs

  • Initiateur de la discussion Initiateur de la discussion BOUCHEZ JD
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

BOUCHEZ JD

Guest
Bonjour.

Comme indiqué dans l'intitulé, je souhaite créer une variable dans un classeur et la voir dans un autre classeur.

Exemple : Dans un module standard du classeur F1.xls , j'écris :

Option Explicit
Public MaVar as string

sub TEST1()
MaVar = "COUCOU"
Msgbox Mavar
end sub

--------------------------------------
Dans un module standard d'un autre classeur F2.xls , j'écris :

Option Explicit
Public MaVar as string

sub TEST2()
Msgbox Mavar
end sub
---------------------------------------
J'enregistre les 2 fichiers et les réouvre
---------------------------------------

Dans F1.xls , j'éxecute le programme TEST1 : "COUCOU" s'affiche bien.

Je passe dans F2.xls et execute TEST2 : Rien ne s'affiche dans la Msgbox

------------------------------------
J'ai essayé aussi en remplacant Public par Global , cela ne change rien.

QUELQU'UN A UNE IDEE ?

Merci d'avance
 
Re : Visibilité d'une variable entre 2 classeurs

Bonjour,

Une solution, en passant par l'utilisation d'un nom défini...

Dans le classeur 1, tu mets :

Code:
Public MaVar As String

Sub TEST1()
MaVar = "Coucou"
'MsgBox MaVar
ActiveWorkbook.Names.Add Name:="variable", RefersToR1C1:=MaVar
End Sub

et pour récupérer ta variable dans le classeur 2 :

Code:
Sub TEST2()
MsgBox Workbooks("Essai variable1.xls").Sheets("Feuil1").[variable]
End Sub

Nom du classeur et de la feuille à adapter...

Solution un peu "boiteuse", mais qui fonctionne...

Bon W-E
 
Re : Visibilité d'une variable entre 2 classeurs

Bonjour BOUCHEZ JD,

Je m'étais aussi posé cette question de transmission de variables entre fichiers.

Ne l'ayant pas résolue je fais comme ça :

Fichier F1 :

Code:
Sub TEST1()
ThisWorkbook.Names.Add "Message", "COUCOU"
MsgBox [Message]
End Sub

Fichier F2 :

Code:
Sub TEST2()
MsgBox Evaluate(Workbooks("F1.xls").Names("Message").RefersTo)
End Sub

La donnée est stockée dans un nom défini, voilà tout...

Edit : salut bhbh, désolé pour la collision 🙂

A+
 
Dernière édition:
Re : Visibilité d'une variable entre 2 classeurs

Merci à tous, cela fonctionne


Pour STAPLE1600 : J'ai bien sur consulté l'aide en ligne par le F1 du VBA
sur 'PUBLIC' ..... mais ce qui y est ecrit est FAUX ! ! ! ! :
_____________________________________________________________
Remarques
Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures,
dans l'ensemble des modules de toutes les applications
____________________________________________________________


Bon W.E
 
Re : Visibilité d'une variable entre 2 classeurs

Re


Cela n'a rien de faux.

Par toutes les applications, il faut comprendre
(toutes les applications composant la suite Office et supportant le VBA:
Excel, Word; PowerPoint, Outlook , Access etc ...)
 
Re : Visibilité d'une variable entre 2 classeurs

Histoire de pinailler :

Cela signifie donc qu' EXCEL n'est pas une Application Office
puisqu'il ne voit pas la variable ....

Cordialement
 
Re : Visibilité d'une variable entre 2 classeurs

Bonsoir tout le monde,

Il y a une autre possibilité décrite par Laurent Longre : les noms masqués.
Le nom n'est pas défini dans un classeur mais dans l'application, et reste accessible une fois le classeur fermé.
Voir toutes les explications Ce lien n'existe plus

eric
 
Re : Visibilité d'une variable entre 2 classeurs

Bonjour.

Dans mes recherches, j'ai egalement trouvé ceci :
(Solution non retenue car à mon sens un peu complexe pour simplement récuperer le contenu d'une variable)

On peut aussi utliser des API Windows
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)

pbuf = 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
_________________________________
source :
Ce lien n'existe plus

Cordialement
 
Re : Visibilité d'une variable entre 2 classeurs

Bonjour Bouchez JD,

Si tu suis le lien que j'ai donné au post précédent tu as une solution plus simple :
sauver :
Application.ExecuteExcel4Macro "SET.NAME(""Nom_Test"",100)"
lire :
Résult = Application.ExecuteExcel4Macro("Nom_Test")

Visible dans tous les classeurs de la session, même si celui ayant créé la variable est refermé.
eric
 
Re : Visibilité d'une variable entre 2 classeurs

Bonjour,

Autre solution, à partir de ton exemple dans le post #1

Dans le projet vba de F2.xls faire référence (Outils/Références) au 'VBAproject' qui correspond au projet vba de F1.xls.

Si dans la liste des références tu as plusieurs 'VBAproject', clique successivement sur chacun d'eux en regardant dans la zone de description à quel classeur ouvert il appartient.

Tu pourras manipuler la variable de F1.Xls comme bon te semble.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
735
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…