Comment définir une variable accessible à tous les modules et évènements

Bonjour,

J'ai un projet VBA avec plusieurs classeurs ouverts.

Je cherche à déclarer une variable globale a tout le projet, c'est a dire a tous les modules de chaque classeur et aussi au evenement type clicker sur une boite ou double clic.

Cette variable (boolean) doit être accessible partout.

Comment la déclarer (public ne marche pas) et comment la faire passer au "sous programme" et aux évènements.

Merci pour votre aide

Bonjour,

en effet, public ne fonctionne pas dans ce cas

seule(s) solutions

  • mettre la variable dans un fichier texte appelé en début de chaque procédure (cela m'est arrivé pour une clé API)
  • mettre la variable dans une feuille d'un fichier excel (qui peut rester fermé) et appelé par chaque feuille

Bonjour à tous,

dans ce cas j'utilise un nom masqué.
C'est un nom de niveau appli (issu de excel4), donc visible de tous les classeurs, et de durée de vie de la session excel.
Ca n'est pas un booléen mais comme tu peux le tester...
Bien expliqué ici : https://web.archive.org/web/20151115092201/http://www.xcell.excelabo.net:80/hnamespace
(ça vient d'un site qui a dû être hébergé sur un autre suite à piratage, qui a lui-même disparu )

Je met l'essentiel :

- Création ou changement de valeur d'un nom masqué

Application.ExecuteExcel4Macro "SET.NAME(""Nom_Test"",100)"

- Lecture de la référence d'un nom masqué

Résult = Application.ExecuteExcel4Macro("GET.NAME(""Nom_Test"")")

Cette instruction renvoie la valeur attachée au nom masqué comme formule, de la même manière que le champ "RefersTo" d'un nom classique. Par exemple, "=54" (nombre), "="Test"" (chaîne) ou "=[Test.xls]Feuil1!L1C1" (référence de plage).

- Lecture de la valeur d'un nom masqué

Résult = Application.ExecuteExcel4Macro("Nom_Test")

- Destruction d'un nom masqué

Application.ExecuteExcel4Macro "SET.NAME(""Nom_Test"")"

Mais si tu as un classeur que tu es sûr qu'il sera toujours présent, tu peux aussi aller lire un nom d'un autre classeur :
Debug.Print Workbooks("Classeur1.xlsx").Names("test")

eric

Ok je vois que ce n'est pas simple.

Maintenant si je me limite a un classeur qui a plusieurs feuilles avec des événements sur chaque feuille?

C'est plus simple ?

Les événements n'ont rien n'a voir.

Tu parlais d'une variable visible de plusieurs classeurs. S'il n'y en a plus qu'un, ce problème est réglé
Toutefois je ne vois pas où est la difficulté dans Workbooks("Classeur1.xlsx").Names("test") ?!?
eric

Merci Eric pour ces explications

Rechercher des sujets similaires à "comment definir variable accessible tous modules evenements"