Déclaration Classeur et Feuille en Public

Bonjour,

J'utilise un fichier qui contient plusieurs macros dans un module "Module1".

Ces macros font appels à d'autres fichiers, ces fichiers pouvant être utilisés plusieurs fois par les différentes macros du module.

De façon à gagner du temps dans l'écriture de mes macros, j'aurais souhaité déclarer les Workbooks et les Worksheets une seule fois en Public plutôt que de les déclarer dans chaque macro du module.

Je parviens à déclarer les objets en Public en utilisant Dim :

Dim wb1 as workbook, Dim wb2 as workbook...

Dim ws1 as worksheet, ws2 as worksheet...

En revanche je ne peux pas leur attribuer une "valeur" en utilisant ensuite Set en dehors d'un module.

Set wb1 = workbooks("classeur1.xlsm")

Set ws1 = wb1.worksheets("Feuil1")

J'ai un message d'erreur : erreur de compilation, instruction incorrecte à l'extérieure d'une procédure

Existe-t'il une façon de faires toutes ces déclarations et des les rendre accessibles à toutes les procédures d'un ou de plusieurs modules.

Merci,

bonjour,

tu prévois une macro d'initialisation de ces variables globales et tu t'arranges pour qu'elle soit exécutée avant toutes les autres macros qui auraient besoins de ces variables

sub init

Set wb1 = workbooks("classeur1.xlsm")

Set ws1 = wb1.worksheets("Feuil1")

end sub

Bonjour,

J'avais envisagé cette solution mais comment faire pour l'appeler au début du lancement de chaque macro?

Est-ce qu'un Call Sub Init placé au début de chaque macro ferait l'affaire?

Merci

Bonjour,

C'est un peu confus ! Les variables modules sont privées par défaut. Pour les rendre publiques, tu dois les déclarer avec le mot-clé Public :

Public wb1 As Workbook, wb2 As Workbook, ws1 As Worksheet, ws2 As Worksheet

Elle seront ainsi accessibles en lecture et en écriture dans ton projet de l'extérieur du module, Les modules standard étant public par défaut, nul besoin d'utiliser alors le nom du module. Si par contre elles sont déclarées dans un module privé, le nom du module est indispensable pour y accéder.

Cordialement

Ferrand

Bonjour,

Oui en effet c'est confus notamment quand je parle de Dim alors que c'est bien Public que j'utilise.

Par simplicité pour l'instant j'ai placé toutes mes procédures dans le même module. N'ayant pas touché aux propriétés du module, j'imagine qu'il ne s'agit pas d'un module privé.

Mon souci n'est pas dans cette partie Public wb1 As Workbook, wb2 As Workbook, ws1 As Worksheet, ws2 As Worksheet mais dans la façon de définir le nom de wb1, wb2, ws1, ws2...pour qu'ils soient utilisables par toutes les procédures du module sans les redéfinir au sein de chaque procédure.

Cdt,

oracle a écrit :

Bonjour,

J'avais envisagé cette solution mais comment faire pour l'appeler au début du lancement de chaque macro?

Est-ce qu'un Call Sub Init placé au début de chaque macro ferait l'affaire?

Merci

un

call init

ou

init

en debut de chaque macro suffit

J'ai un message d'erreur : erreur de compilation, instruction incorrecte à l'extérieure d'une procédure

Si tu as ce message, c'est que tu places ton instruction d'affectation en dehors d'un procédure !

Tout code exécutable doit être inclus dans une procédure (Sub, Function, Property).

(Les déclarations ne constituent pas du code exécutable).

Super merci beaucoup, ça fonctionne...En revanche, uniquement pour les fichiers déjà ouverts.

Je vais fouiller les internets pour voir si je trouve une solution à ce nouveau problème, mais je mets ce sujet en résolu.

Merci encore

Rechercher des sujets similaires à "declaration classeur feuille public"