Comment associer ma barre d'outils uniquement au fichier effectivement
ouvert?
J'ai fait les macros suivantes:
Private Sub Workbook_Open()
Application.CommandBars("M").Visible = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("M").Visible = False
End Sub
Sub a()
UserForm1.Show
End Sub
Merci
Luc
Autre possibilité (nettement préférable): mets tout ton code dans une
macro complémentaire XLA et attache la barre d'outils à cette macro.
Dans ton code, remplace toutes les références au classeur "ABC", "XYZ"
ou autre par ActiveWorkbook. De cette manière, la barre d'outils et ses
macros marcheront pour tout classeur ouvert, de la même manière que les
barres d'outils standard d'Excel.
Pour ouvrir et fermer une macro complémentaire, utilise le gestionnaire
approprié (menu Outils -> Macros complémentaires).
Laurent
Nito a écrit :
Merci encore une fois
Luc
Laurent Longre <laurent...@free.fr> a écrit dans le message :
3892EFC8...@free.fr...
1) Crée un nouveau classeur, insère un module standard et copie dans ce
module la procédure suivante:
Sub Zaza1_Click()
MsgBox "Classeur actif : " & ActiveWorkbook.Name, vbInformation
End Sub
Ensuite, toujours dans l'éditeur VBA, double-clique sur l'élément
'ThisWorkbook' de ce classeur pour ouvrir son module et copie ce code:
Private Sub Workbook_AddinInstall()
Application.CommandBars("Zaza").Visible = True
End Sub
Private Sub Workbook_AddinUninstall()
Application.CommandBars("Zaza").Delete
End Sub
Ces deux procédures s'exécuteront respectivement au moment de
l'installation et de la désinstallation de la macro complémentaire via
le menu Outils.
Sous Excel, enregistre ce classeur sous le nom "Test" avec comme type de
fichier "Macro complémentaire Microsoft Excel (*.xla)". C'est le dernier
type de fichier proposé dans la liste. Choisis de préférence (ce n'est
pas obligatoire) comme répertoire celui utilisé par défaut pour les
macros complémentaires, soit, pour Excel 97:
C:\Program Files\Microsoft Office\Office\Macrolib
Quand tu enregistres un classeur comme macro XLA, Excel crée un nouveau
fichier XLA et y copie le code VBA du classeur actif. Une fois le
fichier XLA créé, tu peux fermer, sans l'enregistrer, le classeur qui
t'a permis de créer la macro complémentaire, il n'est pas nécessaire de
le conserver.
2) Ouvre la macro complémentaire Test.xla par Fichier -> Ouvrir.
Les fichiers XLA sont par définition masqués, donc ils n'apparaissent
pas sous Excel. Mais tu peux en voir et manipuler le code sous l'éditeur
VBA.
Crée une nouvelle barre d'outils (nomme-là "Zaza", pour changer) avec un
bouton de commande.
Si aucun classeur n'est ouvert, crée un classeur vide.
Fais Affichage -> Barres d'outils -> Personnaliser, clic droit sur le
bouton de ta barre d'outils -> Affecter une macro. Dans la zone "Nom de
la macro", tape "Zaza1_Click" (c'est la procédure de la macro XLA créée
au début). Les procédures définies dans la XLA ne sont pas listées dans
cette boîte de dialogue, il faut taper leur intitulé en toutes lettres.
3) Pour attacher la barre d'outils à la macro XLA, procède comme suit :
Il faut d'abord afficher le classeur Test.xla dans Excel. Active
l'éditeur VBA (Alt-F11), affiche l'éditeur de projets, clique sur
l'élément 'ThisWorkbook' de Test.xla, tape F4 (fenêtre Propriétés) et
mets la propriété 'IsAddin' sur False.
Reviens dans Excel : Test.xla n'est plus masqué et est devenu le
classeur actif.
Fais Affichage -> Barres de menus -> Personnaliser puis clique sur
"Attacher". Dans la boîte de dialogue suivante, copie la barre d'outils
"Zaza" dans le classeur (zone de droite). Valide toutes les boîtes de
dialogue.
Reviens dans l'éditeur VBA et remets la propriété 'IsAddin' sur True
(Test.xla sera de nouveau masqué). Puis *toujours dans l'éditeur VBA*
enregistre la macro complémentaire (Fichier -> Enregistrer Test.xla, ou
Ctrl-S).
5. Pour installer Test.xla comme macro complémentaire :
- Quitte puis relance Excel
- Fais Outils -> Macros complémentaires.
Si tu as enregistré Test.xla dans le dossier par défaut des macros
complémentaires mentionné plus haut, la macro "Test" apparaîtra dans la
liste. Sinon, il faut cliquer sur "Parcourir" pour aller la sélectionner
à l'endroit où se trouve le fichier.
Coche la ligne "Test" et valide par OK. La macro Test.xla est installée.
A partir de ce moment, si tu cliques sur le bouton de ta barre d'outils,
une boîte de dialogue "Classeur actif : Gnagna.xls" sera affichée.
Pour fermer la macro complémentaire, décoche-là dans la boîte de
dialogue Outils -> Macros complémentaires. A chaque ouverture /
fermeture via cette boîte de dialogue, la barre d'outils "Zaza" sera
automatiquement recréée puis détruite.
Voilà. C'est un petit peu compliqué, mais c'est le meilleur moyen de
créer des macros autonomes, indépendantes des classeurs. Dès lors qu'une
macro est susceptible d'être utilisée par plusieurs classeurs, il est
recommandé de l'isoler sous la forme d'une macro complémentaire
indépendante. C'est également une très bonne chose de séparer le code
VBA et les fichiers de données. Les macros complémentaires fournies avec
Excel ont été créées de cette manière.
Si tu as des problèmes, je peux t'envoyer un petit classeur exemple.
Cordialement,
Laurent
Nito a écrit :
Je ne suis pas l'auteur de la question initiale, mais je te remercie pour
cette explication détaillée que j'ai mis immédiatement dans mes "Trucs et
astuces".
Je ne sais ce qu'en pensent les participants du groupe, mais si ton temps te
le permets, tu pourrais de temps en temps nous gratifier de quelques
messages de ce type, (de type "Pas-à-pas") forts utiles aux débutants.
Je sais que c'est peut-être beaucoup demander, au vu de ta contribution déjà
très assidue a ce ng, mais je pense que beaucoup de néophytes
apprécieraient.
.
Eh !! Les autres, qu'en pensez-vous?
Amitiés,
Richard
Laurent Longre <laurent...@free.fr> a écrit dans le message :
38944518...@free.fr...
>
> Voici un exemple :
J'ai suivi à la lettre ton exemple et ça fonctionne à merveille. Jusqu'à ce
que je
veuille changer le code de "Sub Zaza1_Click()" dans lequel je veux y mettre
mes instructions soit:
- exécute la macro "montrer" du classeur actif, et
- "userform1.show" du classeur actif
J'ai essayé avec ActiveWorkbook mais ça ne fonctionne pas.
Un dernier petit coup de main, STP.
Luc
P.S. Encore une fois, merci. Je pense que ton exemple va servir à bien des
gens.
Laurent Longre <laurent...@free.fr> a écrit dans le message :
38944518...@free.fr...
>
Cordialement jps (du gouleyant beaujolais)
PS laurent, maintenant que nous ne sommes plus que tous les deux, je t'envoie
ma facture d'honoraires (si tu dois récupérer la TVA, tant mieux pour toi car je
suis assujetti au taux des produits de luxe -mais tu le vaux bien-) ; dès
réception de ton règlement, nous inviterons Eric qui souhaite faire les
prolongations de la Saint- Vincent, patron des vignerons comme chacun sait
Plus le singe monte haut, plus il montre son derrière (proverbe sino-lyonnais
car trouvé à la fois dans Confucius et dans la "Plaisante Sagesse lyonnaise")
Richard HERRMANN wrote:
> Bonsoir Laurent,
>
> Je ne suis pas l'auteur de la question initiale, mais je te remercie pour
> cette explication détaillée que j'ai mis immédiatement dans mes "Trucs et
> astuces".
> Je ne sais ce qu'en pensent les participants du groupe, mais si ton temps te
> le permets, tu pourrais de temps en temps nous gratifier de quelques
> messages de ce type, (de type "Pas-à-pas") forts utiles aux débutants.
> Je sais que c'est peut-être beaucoup demander, au vu de ta contribution déjà
> très assidue a ce ng, mais je pense que beaucoup de néophytes
> apprécieraient.
> .
> Eh !! Les autres, qu'en pensez-vous?
>
> Amitiés,
>
> Richard
>
> Laurent Longre <laurent...@free.fr> a écrit dans le message :
> 38944518...@free.fr...
> >
> > Voici un exemple :
--
Nito a écrit:
>
> J'ai suivi à la lettre ton exemple et ça fonctionne à merveille. Jusqu'à ce
> que je
> veuille changer le code de "Sub Zaza1_Click()" dans lequel je veux y mettre
> mes instructions soit:
> - exécute la macro "montrer" du classeur actif, et
> - "userform1.show" du classeur actif
>
> J'ai essayé avec ActiveWorkbook mais ça ne fonctionne pas.
Si tu utilises une macro XLA, il faut en principe y insérer la totalité
du code VBA. Ici, tu devrais donc copier tout le code de ta macro
"montrer" dans la procédure Zaza_Click1 (et y remplacer toutes les
références à des classeurs explicitement nommés par ActiveWorkbook). De
même, il faudrait transporter ton UserForm dans le classeur XLA.
Ensuite, il faudrait supprimer tous les modules et UserForms de ton
classeur XLS, de manière à ce que celui-ci ne contienne plus que des
données.
Le principe, c'est que les classeurs XLS ne contiennent plus aucun code
VBA, et que celui-ci se trouve entièrement dans la macro complémentaire
XLA. Celle-ci représente alors une application autonome à part entière
et ses macros peuvent être appelées par l'intermédiaire de la barre
d'outils quel que soit le classeur actif.
Laurent
--
==== Geo ==== de la douce Touraine (France)
"Jean-Paul Sabatier" <jps...@club-internet.fr> a écrit cette nouvelle ...
--
==== Geo ==== de la douce Touraine (France)
"Nito" <b...@sympatico.ca> a écrit dans le message news:
utQ9iA6a$GA....@cppssbbsa02.microsoft.com...
> Vraiment très apprécié, Laurent
Pardon :-(
--
Eric Jeanne
Geo <gl...@wanadoo.fr> a écrit dans le message : 874u63$33$4...@wanadoo.fr...
Comme j'eusse préféré que ta vindicte traitât de Patrick!
Mais tout cela ne m'empêche pas d'apprécier ce forum et ceux -et tu en fais
partie- qui l'animent avec tant de brio ; pour ma part, à défaut de
connaissances, j'essaie d'y apporter, parce que j'ai la chance de ne pas avoir
la pression professionnelle, quelques moments de détente mais Sganarelle prend
beaucoup de coups de bâton
cordialement jps (du gouleyant beaujolais...et d'auvergne)
Geo wrote:
> Sabatier ... Sabatier ??? ça me dit quelque chose
> C'est pas un mec qui écrit des romans ?
> ... de l'académie franco-lyonnaise ? ah oui ça doit être lui.
>
> --
> ==== Geo ==== de la douce Touraine (France)
>
Private Sub workbook_open()
Application.CommandBars("Zaza").Visible = True
End Sub
Private Sub Workbook_AddinInstall()
Application.CommandBars("Zaza").Visible = True
End Sub
Private Sub Workbook_AddinUninstall()
Application.CommandBars("Zaza").Delete
End Sub
Private Sub workbook_beforeclose(cancel As Boolean)
Application.CommandBars("zaza").Visible = False
End Sub
Merci encore
Luc
Et je m'associe à tes paroles élogieuses sur Laurent
A+
--
==== Geo ==== de la douce Touraine (France)
"Jean-Paul Sabatier" a écrit avec sérieux
--
==== Geo ==== de la douce Touraine (France)
"Eric Jeanne" a écrit ce modeste poème ...
Geo wrote:
> Vindicte ? oh non
> J'ai été tellement surpris par la longueur et le brio de ton écrit que je
> n'ai pu m'empêcher de réagir et j'ai fait le rapprochement avec ton
> illustre cousin.
> Donc pas de mec avec roman, promis, je demanderai à Word de me le copier
> 100 fois.
>
> Et je m'associe à tes paroles élogieuses sur Laurent
>
> A+
>
> --
> ==== Geo ==== de la douce Touraine (France)
>
> "Jean-Paul Sabatier" a écrit avec sérieux
> > Geo (de la Route Soudaine)
> > tu me cherches et je souffre que, profitant de ce que tu appelles une
> nouvelle
> > qui n'avait d'autre raison d'être que celle de rendre hommage à laurent,
> tu
> > portes une attaque en règle contre le prénommé Robert parce que
> > 1) c'est un lointain cousin
> > 2) c'est un auvergnat
> > 3) mec et romans sont deux mots qui se marient mal (même à Saugues-Puy de
> Dôme)
--
Hugh de la tribu des Turons (à l'origine de Tours avant les romains)
"Jean-Paul Sabatier" a écrit ...
Geo <gl...@wanadoo.fr> a écrit dans le message : 87a465$amg$2...@wanadoo.fr...
Jean-Paul Sabatier <jps...@club-internet.fr> a écrit dans le message :
38A054C5...@club-internet.fr...