Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Barre d'outils personnalisée

39 views
Skip to first unread message

Nito

unread,
Jan 29, 2000, 3:00:00 AM1/29/00
to
Excel 2000.
J'ai conçu une barre d'outils personnalisée à bouton unique "M" dans le
fichier "ABC".
Des macros à l'ouverture et à la fermeture se chargent de l'afficher ou de
la cacher.
Le bouton est associé à la macro "a" qui affiche une boîte de dialogue.
Comme le fichier sert à une autre application, je le sauvegarde sous le nom
"XYZ".
J'ai donc 2 fichiers identiques dont les données sont différentes.
Quand j'ouvre le fichier "XYZ" et que je clique sur mon bouton personnalisé,
le fichier "ABC" s'ouvre aussi. On dirait que ma barre d'outils est
associée au fichier "ABC" et non au fichier "XYZ".

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

Laurent Longre

unread,
Jan 29, 2000, 3:00:00 AM1/29/00
to

Au lieu de deux barres d'outils, crées-en deux avec deux noms
différents. Attache chacune des barres d'outils séparément à leurs
classeurs respectifs. Vérifie bien que les boutons de chaque barre sont
associés aux macros du bon classeur.

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 :

Nito

unread,
Jan 30, 2000, 3:00:00 AM1/30/00
to
Bonjour Laurent,
Merci pour ta réponse. Ta 2e solution est très intéressante. Mais, comme
je suis
un pauvre néophyte, j'aimerais que tu m'expliques comment je peux mettre mon
code dans une macro complémentaire XLA et y attacher ma macro. J'ai beau
fouiller dans les bouquins et les aides d'Excel et Visual Basic, je ne
trouve pas le moyen de créer une macro complémentaire personnalisée.
Pourrais-tu m'aider un peu plus s'il te plaît.
Ton aide est vraiment appréciée.

Merci encore une fois

Luc

Laurent Longre <laurent...@free.fr> a écrit dans le message :
3892EFC8...@free.fr...

Laurent Longre

unread,
Jan 30, 2000, 3:00:00 AM1/30/00
to

Voici un exemple :

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 :

Richard HERRMANN

unread,
Jan 30, 2000, 3:00:00 AM1/30/00
to
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

unread,
Jan 30, 2000, 3:00:00 AM1/30/00
to
Vraiment très apprécié, Laurent

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...
>

Jean-Paul Sabatier

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
bonsoir
faisant partie des "autres" mais étant, de plus, l'agent de laurent (le gang des
lyonnais frappe à la moindre occasion) je suis chargé de percevoir une dîme de
tous ceux qui se créent un fichier "trucs et astuces" à partir des infos données
par mon managee
Cet impôt est ensuite transmis à Eric Jeanne qui en utilise une partie pour une
formation spéciale (le séminaire a lieu à Aurillac) afin de pouvoir traduire en
patois auvergnat lesdites infos puisque notre homme de Louviers a toujours voulu
donner à ce groupe une connotation internationale : il le prouve d'ailleurs à
chacune de ses interventions qui, si elles ne sont pas forcément versées dans un
"trucs et axtuces", sont enjolivées de quelques mots écrits tantôt dans la
langue de Dante, tantôt dans celle de Shakespeare, Christian dût-il en souffrir
au point de nous qualifier de dégénérescents.
bref, quand le chapeau arrivera dans votre BAL, versez-y votre écot, à savoir
quelques mots gentils à l'endroit de laurent qui a assurément le plus gros des
coeurs d'or qu'il èvoquait récemment en parlant de ces fameux autres dont nous
sommes.

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 :

--

Laurent Longre

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
Luc,

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

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
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)


"Jean-Paul Sabatier" <jps...@club-internet.fr> a écrit cette nouvelle ...

Geo

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
Malheureux
zaza c'est le mot magique
sans lui rien ne marche
tu viens d'en faire l'expérience.


--
==== 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

Eric Jeanne

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
Zaza, le mot magique
sans lui, c'est la panique
C'est lui qui assure le déclic
Voire le double clic,
Presqu'aussi féérique
Que notre ami Eric

Pardon :-(

--
Eric Jeanne
Geo <gl...@wanadoo.fr> a écrit dans le message : 874u63$33$4...@wanadoo.fr...

Jean-Paul Sabatier

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
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)

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)
>

Nito

unread,
Jan 31, 2000, 3:00:00 AM1/31/00
to
Rebonjour Laurent,
Encore une fois tes conseils ont fonctionné. Mes macros sont toutes dans le
fichier .XLA.
Une dernière retouche est cependant nécessaire je crois. Comme je veux que
ma barre d'outils soit visible seulement pour les fichiers pour qui elle est
requise, j'ai dans les "workbook" de mes fichiers la macro suivante.
Aussitôt que j'essaie d'ouvrir un 2e fichier de données, Excel me dit
"opération non conforme", "ce programme va s'arrêter". Pourrais-tu me dire
ce qui ne va pas dans les workbook de mes fichiers de données.
Peut-être faudrait-il que je mette une condition d'ouvrir la barre d'outils
seulement si elle
n'est pas déjà ouverte?


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

Geo

unread,
Feb 1, 2000, 3:00:00 AM2/1/00
to
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

unread,
Feb 1, 2000, 3:00:00 AM2/1/00
to
Finalement, me demandais-je in petto (mais pas trop) :
Viens-je ici pour Excel ou pour les Excellien(ne)s ?

--
==== Geo ==== de la douce Touraine (France)

"Eric Jeanne" a écrit ce modeste poème ...

Jean-Paul Sabatier

unread,
Feb 2, 2000, 3:00:00 AM2/2/00
to
ok ok geo
j'allume le calumet et le mets dans ta bal
et si un jour tu quittes ton teepee tourangeau pour la route de notre wigwam,
cochise lolo et moi, oeil de (FAUX;VRAI) con sommes prêts à t'accueillir,
squaws éventuellement laissées de côté pour garder les papooses
hugh jps (de la réserve de l'azergues)

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)

--

Geo

unread,
Feb 2, 2000, 3:00:00 AM2/2/00
to
Heureusement pour toi que les squaws ont remplacé le lance flammes par
Excel, sinon toi rougir des pieds à la tête.
Mes papooses être grands puisque j'ai piti papoose, ils se gardent donc
tous seuls.
Je retiens l'invitation.

Hugh de la tribu des Turons (à l'origine de Tours avant les romains)

"Jean-Paul Sabatier" a écrit ...

Christophe CAUCHOIS

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to
Sinon, c'est bien le truc de Laurent sur les barres d'outils, hein ?

Geo <gl...@wanadoo.fr> a écrit dans le message : 87a465$amg$2...@wanadoo.fr...

Jean-Paul Sabatier

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to
christophe
veux tu bien admettre qu'un moment d'égarement puisse exister, même chez les
cheyennes qui, de plus, ne connaissaient pas l'intolérance
Cordialement
Jean-Paul Sabatier
PS mais comme d'hab, le truc de laurent sur les barres d'outils était plus que
bien : en veux-tu une copie?

Christophe CAUCHOIS

unread,
Feb 9, 2000, 3:00:00 AM2/9/00
to
Hello...polo.
J'aime bien les digressions, mais j'ai un peu de mal à suivre les longues
conversations, surtout en fin de journée. C'est pour ça que je mets des
points de repère dans les discussions...pour savoir de quoi ça parlait au
début !
Sinon, c'est pas de refus pour la copie. J'ai pleins de petits soucis avec
les barres d'outils perso, et je n'ai pas encore trouvé de procédure qui
tient la route pour les utiliser dans mon code.
Alors à ton bon coeur...
@+
Christophe.

Jean-Paul Sabatier <jps...@club-internet.fr> a écrit dans le message :
38A054C5...@club-internet.fr...

0 new messages