Afficher le menu "Compléments" à l'ouverture (Par VBA)

Bonjour le forum,

j'ai un classeur dans lequel je crée à l'ouverture du classeur l'onglets "Compléments", dans lequel je met un raccourci pour lancer une macro.

Je souhaiterai qu'à l'ouverture du classeur, ce menu Compléments soit affiché/activé.

Le raccourci clavier est "ALT+M2".

J'ai donc le code suivant :

Private Sub Workbook_Open()

'---Déclaration des variables
Dim Barre As CommandBar
Dim Menu As CommandBarPopup
Dim SousMenu As CommandBarPopup
Dim Bouton As CommandBarButton

On Error Resume Next

'---Création de la barre d'outils
Set Barre = Application.CommandBars _
    .Add(Name:="Raccourcis", Position:=msoBarTop, Temporary:=True)
Barre.Protection = msoBarNoMove + msoBarNoCustomize 'Protection de la barre de menus

'---Création d'un menu
Set Menu = Barre.Controls.Add(msoControlPopup)
With Menu
    .Caption = "Macros" '<-- label du menu
End With

'---Ajout d'un bouton dans le menu
Set Bouton = Menu.Controls.Add(Type:=msoControlButton)
With Bouton
    .Style = msoButtonIconAndCaption                'Bouton avec icône + texte
    .FaceId = 2646                                  'Icône
    .Caption = "Ajouter Affaire"                    'Nom du bouton
    .TooltipText = "Ajouter une feuille d'affaire"  'Info-bulle
    .OnAction = "Création_feuille"                  'Définit la macro associée au bouton.
End With

'---Affichage de la barre d'outils
Barre.Visible = True

'--- Afficher le menu "Compléments"
SendKeys "%(M2)" 'Raccourci clavier pour le menu "Compléments"
Application.Wait Now + TimeValue("00:00:01")
SendKeys "{ESC}" 'Masque l'affichage des touches de raccourcis
Application.Wait Now + TimeValue("00:00:01")
SendKeys "{ESC}" 'Masque l'affichage des touches de raccourcis

End Sub

Mais ça ne fonctionne pas, le menu n'est pas activé.

Le même code, mais avec SendKeys "%(M1)" (Raccourci pour le menu "Mise en page") marche parfaitement.

C'est comme si l'onglet "Compléments" n'était pas encore créé lorsque SendKeys "%(M2)" s'exécute.

Bonjour,

Le code que tu montre est pour un excel 97-2003 et je vois que tu à la version 2007 ?

Avec le 2007 ce sont des rubans et plus des barres d'outils

Toujours une mauvaise habitude de mettre un ON Error Resume Next dans une procédure qui ne va pas, tu ne peu pas voir les erreurs.

Possible que tu puisse ajouter un bouton dans la seule barre d'outils qui subsiste mais je ne l'ai jamais fais.

A+

Bonsoir lermite,

le code cité fonctionne très bien pour créer cet "onglet" nommé "complémentaires", dans lequel je place tous les raccourcis que je souhaite.

peut-être ne nous sommes t'on mal compris car j'ai dit menu, alors qu'effectivement le terme serait plutôt "Ruban".

En fait, par défaut Excel ouvre toujours un classeur avec l'onglet "Accueil" du ruban activé.

Et moi, je souhaiterai que ce soit le l'onglet "Compléments" qui le soit.

Donc la méthode que j'ai tenté, c'est de simuler par macro, l’enchaînement de touches de raccourci nécessaires.

Alt + M2 -> Active l'onglet "Compléments"

ECHAP -> Masque l'affichage des touches raccourcis (qui ont été affichées lors de l'appui sur ALT+M2)

ECHAP -> Masque l'affichage des touches raccourcis (2° fois pour masquer tout affichage de raccourci à l'écran)

Ceci donne le code suivant :

SendKeys "%(M2)" 'Raccourci clavier pour le menu "Compléments"
Application.Wait Now + TimeValue("00:00:01")
SendKeys "{ESC}" 'Masque l'affichage des touches de raccourcis
Application.Wait Now + TimeValue("00:00:01")
SendKeys "{ESC}" 'Masque l'affichage des touches de raccourcis

Mais ça ne fonctionne pas...

Re,

Effectivement je n'avais pas bien compris,

Mais ça ne sais pas fonctionner il y a un conflit dans les attributions des raccourcis, comme tu a pu le constater ce sont les raccourcis employer sur Excel2003 or dans le 2003 la lettre M est attribuée justement à la barre complément (ou raccourci si tu veux) mais dans le 2007 le M est attribué au ruban "Mise en forme", tu dis qu'avec M1 ça fonctionne.. oui, mais c'est parce que le 1 est ignorer, essaye avec uniquement la lettre M et tu verras.

Par VBA il n'y a pas moyen de modifier ce raccourci, il faut avoir recourt au XLM. et créer un ruban Perso.

C'est assez ardu mais pas impossible à toi de voir, il y a aussi la possibilité d'afficher un Userform genre barre d'outils avec tes boutons .

A+

Edit : Pour confirmer le conflit des raccourcis, quand tu est dans Excel avec le ruban complément les raccourcis M ou M1 ou M2 ne

fonctionnent plus et un bip (d'erreur) se fait entendre quand tu tape le deuxième caractère.

Re,

vraiment, je ne vois pas pourquoi tu parles de conflit de raccourci,

car si je fais l’enchaînement de touches, l'onglet "Compléments" du menu est bien sélectionné/affiché.

J'ai effectivement Excel 2007FR, dans un nouveau classeur, je colle le code de mon premier post,

j'enregistre, je ferme, et j'ouvre ce fichier. L'onglet "Compléments" du menu est créé.

Ensuite, si j'appuie sur ALT, Excel affiche les touches de raccourci pour accéder aux différents onglets du menu.

C'est indiqué : M1 pour Mise en page, M2 pour Compléments.

Tout en maintenant ALT, j'appuie sur M, il ne reste à l'écran plus que ces 2 raccourcis d'afficher (mais aucun onglet n'a été activé).

Si j'appuie sur 2 (avec toujours ALT de pressé), l'onglet Complément est affiché !

Donc, je pense que le problème vient de mon code avec les "Sendkeys" qui simulent l'appuie sur les touches...

Désolé mais je n'ai probablement pas le même Excel 2007 que toi, quand j'appuie sur le 1 ou le 2 j'ai un Bip et rien n'est sélectionner.

Je passe la main à quelqu'un qui a le même Excel que toi.

A+

....... ... et encore ....

Effectivement il y a moyen de sélectionner les rubans MAIS.... AVEC LES TOUCHES DU CLAVIER ALPHANUMÉRIQUE et pas le clavier numérique .....

Je cherche pour trouver le code...

Youppps, j'ai trouvé..

    SendKeys "%(M)"
    SendKeys "2"

C'est pas trop tôt, j'ai passer la journée la dessus.

Mais c'est sans problème, cela m'a permis de connaître u n truc en plus.

A+

Et encore...le code ci-dessus fonctionne mais à partir d'un bouton sur une feuille, mais ça ne va pas à l'ouverture du classeur.

MAIS, j'ai trouvé une astuce qui le fait...

'---Affichage de la barre d'outils
    Barre.Visible = True

'--- Afficher le menu "Compléments"
    SendKeys "%(N)"
    SendKeys "%(M),2,{ESC},{ESC}"
End Sub

Va savoir pourquoi ça fonctionne en sélectionnant d'abord un autre ruban, enfin bref, le principal c'est que ça marche.

A+

Salut lermite,

j'ai testé ce dernier code plusieurs fois,

et sur 10 essais, 1 seule fois l'onglet compléments a été affiché,

toutes les autres fois c'était l'onglet Affichage (Raccourci ALT+N) qui l'était,

avec quelque fois l'affichage des touches raccourcis encore présents, d'autres fois non.

Il semblerait donc que ce genre de code "Sendkeys" à l'ouverture d'un classeur soit aléatoire,

enfin pas fiable en tout cas...

Peut-être ne suis-je pas parti dans la bonne direction pour afficher l'onglet voulu au démarrage,

n'y a t'il pas un autre moyen (avec des "Command.Bars....") d'afficher un onglet par VBA sans utiliser les touches raccourcis ?

Bizarre, avant de poster la dernière solution j'ai tester plusieurs fois et je n'ai eu aucun raté ?.

Mais tout les tests je les ai fait avec une sub à part, je viens de retester et effectivement avec la simplification il y a des ratés, j'ai donc repris ma précédente solution et je l'ai fait tourner une dizaine de fois sans raté.

Alors j'explique,

En dessous de la procédure Open colle le code ci dessous

Sub Envoyer()
    SendKeys "%(N)"
    SendKeys "%(M),2,{ESC},{ESC}"
End Sub

et bien entendu dans la procédure Open tu modifie en conséquence,

'---Affichage de la barre d'outils
    Barre.Visible = True

'--- Afficher le menu "Compléments"
    Envoyer
End Sub

C'est la bonne...

Pour un autre moyen que SendKey et bien il n'y en a pas.

Seulement comme dis plus haut, en XLM

A+

C'est toujours aléatoire chez moi, même avec le nouveau code.

Ce matin, j'ai été contraint d'installer Office 2010 au bureau, et j'ai donc tenter de lancer cette macro (en supprimant le "2" qui n'est plus nécessaire dans la version 2010, puisque ALT+M est le raccourci clavier pour l'onglet Compléments) :

Sub Envoyer()
    SendKeys "%(N)"
    SendKeys "%(M),{ESC},{ESC}"
End Sub

Mais le fonctionnement est aussi aléatoire : un coup ça fonctionne, un coup non, et quelquefois même ça me plante excel à l'ouverture du fichier.

Merci quand même pour ton aide, c'était très sympa d'essayer d'avancer avec moi !

Je ne suis pas du genre à abandonner facilement, mais là ce n'est pas justifier de passer tant de temps sur une fonction qui avait pour but si peu !

Pas de problème, c'est toi qui vois.

Tu a certainement d'autre évènements qui perturbe le fonctionnement, j'ai tester au moins 30 fois sans aucun accro

Si c'est le cas, essaye encore une fois en mettant

Application.EnableEvents = False en tout début de la procédure

pas oublier de remettre à true après les SendKey

Si la raccourci a été changé dans le 2010 c'est bien que le problème a été détecté.

Note : moi non plus je lâche pas facilement un problème.

A+.

Edit au fur et à mesure des recherches j'ai quand même constaté que sendKey renvoi le code touche sur la fenêtre en cour.

Par exemple si tu met la sub Envoyer dans un module et que tu tape F5 c'est le menu de l'éditeur VBA qui est sélectionné.

Si tu fais la même chose avec F8 c'est le module lui-même qui reçoit le code.

Salut,

j'ai rajouté le EnableEvents = False, mais ça ne change rien à ce qu'il se passe :

5 essais ce matin : 3 fois l'onglet par défaut "Accueil" est resté sélectionné, 1 fois l'onglet "Compléments" a été sélectionné, et 1 fois excel était planté (une virgule était insérée dans la cellule active)

J'arrête car il semble indéniable que les "Sendkeys" ne sont pas fiables, en plus si les raccourcis Excel changent en fonction de la version utilisée, la macro que je cherche à faire n' plus trop d'intérêts.

Merci encore.

Rechercher des sujets similaires à "afficher menu complements ouverture vba"