Donner un nom à un classeur utilisable dans toutes les macro

Bonjour,

Existe t-il un code pour définir par une variable le nom d'un classeur, variable que je pourrais par la suite réutiliser dans l'ensemble de mes macros sans avoir à la redéfinir ?

Actuellement je nomme mon classeur de la sorte :

DOC = ActiveWorkbook.Name

Cependant je suis contraint de devoir le réécrire en début de chaque macro, et certaines de mes macros manipulent d'autres tableurs, du coup il arrive que je n'agis pas sur celui souhaité..

Auriez-vous une parade à cela ?

J'ai essayé des choses comme :

Public DOC As ActiveWorkbook.Name

Ce qui évidemment est absurde (car le tableur actif diffère selon les macro utilisées)

Oh et petite précision, je ne peux pas utiliser le nom réel du fichier Excel, car celui-ci est amené à changé.. Obligé de passer par une variable

Merci pour vos lumières !

Vbrod

Bonjour,

avec un macro "simple" cela me semble assez compliquer, il faudra faire de la lecture de fichier (et bien sûr de l'écriture ) ce qu'il n'est pas vraiment de mon niveau

après tout un macro est fait pour exécuté le code qu'il contient (ce qu'on lui demande de faire: une maj , copier coller, mise en forme...) et ne sauvegarde jamais rien

Effectivement, ma requête est assez tordue

Si une solution aussi tordue existe je suis preneur ! Même si la macro résultante n'est pas "sexy", je m'en fiche tant que ça marche

Mmh, je sais pas, on ne pourrait pas bidouiller quelque chose en mettant le nom du classeur dans une cellule, puis en le récupérant par la suite via une macro ?

En vrai, ce qui me gêne le plus n'est pas forcément le fait de redéfinir à chaque fois ma variable "DOC", c'est plus le fait d’exécuter les macros sur le mauvais fichier..

pour éviter de se gouré sur le classeur on pourrai mettre "DOC" en variable à remplir par l'utilisateur ?? cette méthode fonctionne si vous avez pas beaucoup de classeur (on peut toujours restreindre le nombre de classeur par la suite)

De cette manière l'utilisateur devra entrer le nom exact du classeur ?

Mais du coup il devra le faire avant l’exécution de chaque macro impliquant plusieurs tableur ?

Mmh, j'aurais aimé que cela reste transparent à ses yeux..

Si je m'embête à faire tout un fichier sous VBA c'est bien pour que l'utilisateur ai une simplicité d'utilisation

je penser plus a un ComboxBox qui laisse l'utilisateur le choix au lieu de la saisie mais c'est vrai que si il y a une groupe de fichier a sélectionner sa peut devenir long

Aaaah.. N'existe t-il pas tout simplement un moyen de déclarer et définir une variable pour l'ensemble des macros ?

A l'image des variables dites Public ..

j'ai peut être une idée mais avant il me faudra un peu plus d'information :

vbrod a écrit :

Bonjour,

Actuellement je nomme mon classeur de la sorte :

DOC = ActiveWorkbook.Name

Auriez-vous une parade à cela ?

Le classeur dont vous voulez garder le nom est t'il toujours ouverte lors des exécution des macros qui nécessite la présence de la variable "DOC" ?

Bonjour,

Il me semble que tu devrais commencer par lire au moins une fois un chapitre complet sur les variables dans une cours VBA !

Mais réglons d'abord un problème de définition !!

et certaines de mes macros manipulent d'autres tableurs

Un tableur est un type d'application spécifique. Excel est un tableur. Si tu dis que tes macros manipulent d'autres tableurs, cela veut dire qu'elles interviennent dans des applications de type tableur autre qu'Excel ! Lotus123 ? Calc ? Numbers ? J'en doute un peu et il me semble que tu devrais t'astreindre à une plus grande précision de langage, car là, on ne sait en fait pas exactement ce que tu veux dire !

Pour ce qui est des variables, le propre d'une variable... c'est d'être variable !

Et justement, ça tombe fort bien car si ton classeur change de nom il faut procéder à un nouvelle initialisation de le variable !

D'abord levons un écueil : le classeur qui contient les macros que tu lances, est toujours l'unique dont tu n'as aucun besoin de connaître le nom !!! VBA met à ta disposition une propriété de l'objet Application qui renvoie toujours le classeur dans lequel se trouve la macro qui l'invoque : ThisWorkbook !

Pour celui-là donc, tu n'as jamais besoin de variable , donc si une variable est nécessaire dans ton projet elle concerne nécessairement un autre classeur !!!

Pour qu'une variable conserve la valeur avec laquelle tu l'initialises, il faut d'abord la déclarer au niveau module et non dans une procédure où elle s'éteindra à la fin de la procédure...

Ensuite, si tu as vraiment besoin de faire appel régulièrement de ce classeur, pourquoi déclarer une variable String pour y mettre le nom ! C'est beaucoup de temps perdu par la suite... Mieux vaut une variable objet de type classeur à laquelle tu affecteras le classeur et qui te permet par la suite d'accéder à tous les éléments de ce classeur sans être obligé d'utiliser son nom à chaque fois !

Dans le cas général, toutes tes macros sont dans un module standard, un seul : le volume ne justifie quasiment jamais le recours à plusieurs modules standards) pour y placer ses macros, certaines utilisations peuvent rendre nécessaire d'y recourir (notamment pour mettre certains éléments hors de portée du reste du programme, je ne pense pas que tu soies dans ce cas), c'est une très mauvaise façon de coder que disperser ses macros dans une multitude de modules... restons donc dans le cas général : un seul module standard, dans lequel tu vas déclarer ta variable !

Exemple : Dim wb As Workbook

Si tu n'as pas de procédures évènementielles, ou si ces procédures évènementielles n'ont pas à appeler le classeur, cette déclaration suffira amplement pour avoir une variable utilisable par toute tes macros (après initialisation).

Sinon tu la déclares en variable publique avec Public à la place de Dim, mais ce n'est à faire que si c'est vraiment nécessaire ! Un bon code ne fait que juste ce qu'il faut, pas moins mais pas plus !

Il faut maintenant initialiser la variable en lui affectant le classeur voulu.

Ce que tu fais à l'ouverture du classeur :

Set wb = Workbooks.Open(chemin & nomClasseur)

ou si tu préfères l'affecter après ouverture (un classeur lors de son ouverture devenant toujours le classeur actif dans l'application) :

Workbooks.Open...

Set wb = ActiveWorkbook

Cordialement.

Un grand merci à toi MFerrand !

Minanse également pour avoir prit le temps de m'accompagner dans ma requête

Je n'avais pas connaissance du fameux ThisWorkbook ou plutôt de son utilité..

C'est le terme qu'il me fallait pour pouvoir continuer à avancer

Merci également pour vos explications, elles me seront utiles pour la suite !

Problème résolu

Bonne journée

Rechercher des sujets similaires à "donner nom classeur utilisable toutes macro"