Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Q] Ajouter un menu qui n'apparaît qu'avec un classeur bien particulier.

8 réponses
Avatar
JCF
Bonjour, je n'arrive pas à trouver dans l'aide la réponse à la question
suivante:
J'ai dans un classeur une série de tableaux et de macros qui fonctionnent
tous ensemble.
Je souhaite que lors de l'ouverture de ce classeur apparaisse un item de
plus dans la barre des menus, avec bien sur plusieurs sous-menus dedans qui
permettent de lancer les macros.
Je veux que ce menu en plus n'apparaisse que lorsque ce classeur là est
ouvert, et qu'il n'apparaisse pas le reste du temps.
Je veux que cela fonctionne quelque soit l'ordinateur sur lequel est ouvert
mon fichier.

Que faut-il faire pour ça?

Pour l'instant, en utilisant soit outils/ personnaliser les menus, soit
affichage/barre d'outils/ personnaliser, ça me crée des menus en dur,
attachés à ma machine et non pas à mon classeur XL.

Merci d'avance pour vos suggestions,
Jean-Christophe

8 réponses

Avatar
isabelle
bonjour JCF,

voici un exemple à copier sur la page code de thisworkbook, provenant de
:
http://www.excelabo.net/xl/barres.php#menussousmenus

Private Sub Workbook_Open()
Dim TransMenu As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set TransMenu = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
TransMenu.Caption = "MSGBOX"
'Creation des sous-menus
With TransMenu.Controls.Add(msoControlButton)
.Caption = "hello"
.OnAction = "msgbox1"
End With
With TransMenu.Controls.Add(msoControlButton)
.Caption = "bye"
.OnAction = "msgbox2"
End With
End Sub 'Frédéric Sigonneau, (N°90)

Sub msgbox1()
MsgBox "hello"
End Sub

Sub msgbox2()
MsgBox "bye"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Controls("MSGBOX").Delete
End Sub

isabelle


Bonjour, je n'arrive pas à trouver dans l'aide la réponse à la question
suivante:
J'ai dans un classeur une série de tableaux et de macros qui fonctionnent
tous ensemble.
Je souhaite que lors de l'ouverture de ce classeur apparaisse un item de
plus dans la barre des menus, avec bien sur plusieurs sous-menus dedans qui
permettent de lancer les macros.
Je veux que ce menu en plus n'apparaisse que lorsque ce classeur là est
ouvert, et qu'il n'apparaisse pas le reste du temps.
Je veux que cela fonctionne quelque soit l'ordinateur sur lequel est ouvert
mon fichier.

Que faut-il faire pour ça?

Pour l'instant, en utilisant soit outils/ personnaliser les menus, soit
affichage/barre d'outils/ personnaliser, ça me crée des menus en dur,
attachés à ma machine et non pas à mon classeur XL.

Merci d'avance pour vos suggestions,
Jean-Christophe


Avatar
AV
Un exemple (à développer)
** Dans le module de ThisWorkbook

Private Sub Workbook_Open()
AjouteNouveauMenu
End Sub

Private Sub Workbook_Activate()
Application.CommandBars(1).Controls("Mon MENU").Enabled = True
End Sub

Private Sub Workbook_Deactivate()
Application.CommandBars(1).Controls("Mon MENU").Enabled = False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
EffaceMenu
End Sub

** Dans un module ordinaire :
Sub AjouteNouveauMenu()
Set myMenuBar = CommandBars.ActiveMenuBar
Set Newmenu = myMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Newmenu.Caption = "Mon MENU"

'Menu A
Set Menu_leMIen = Newmenu.CommandBar.Controls.Add(Type:=msoControlPopup,
before:=1)
With Menu_leMIen
.Caption = "Blabla"
End With
'Sous-Menu A1
Set Sous_Menu_leMIen1 Menu_leMIen.CommandBar.Controls.Add(Type:=msoControlButton, before:=1)
With Sous_Menu_leMIen1
.Caption = "Archiver"
.Style = msoButtonCaption
.OnAction = "MaMacro1"
End With
'Sous-Menu A2
Set Sous_Menu_leMIen2 Menu_leMIen.CommandBar.Controls.Add(Type:=msoControlButton, before:=2)
With Sous_Menu_leMIen2
.BeginGroup = True
.Caption = "BlabliBlabla"
.Style = msoButtonCaption
.OnAction = "MaMacro2"
End With
End Sub

Sub EffaceMenu()
On Error Resume Next
MenuBars(xlWorksheet).Menus("Mon MENU").Delete
End Sub

AV
Avatar
ChrisV
Bonjour JCF,

Que faut-il faire pour ça?


Créer le menu à l'ouverture du classeur concerné, et le deleter lors de sa
fermeture.
(si ce menu ne doit également pas apparaître lors de changements éventuels
de fenêtres lorsque plusieurs classeurs sont ouverts, il faudra prévoir
également de le masquer...)

Par ex.

Dans la feuille de code de ThisWorkbook

Private Sub Workbook_Open()
ajouM
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
supM
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
On Error Resume Next
Application.CommandBars(1).Controls("MPFE").Visible = True
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
On Error Resume Next
Application.CommandBars(1).Controls("MPFE").Visible = False
End Sub


Dans un module

Sub ajouM()
Set newM = CommandBars(1).Controls.Add(Type:=msoControlPopup, _
Before:=CommandBars(1).Controls("?").Index, Temporary:=True)
newM.Caption = "MPFE"
Set cmd1 = CommandBars(1).Controls("MPFE").Controls.Add
cmd1.Caption = "&Menu1"
cmd1.OnAction = "Bonjour"
Set cmd2 = CommandBars(1).Controls("MPFE").Controls.Add
cmd2.Caption = "&Menu2"
cmd2.OnAction = "Salut"
Set newM = Nothing
Set cmd1 = Nothing
Set cmd2 = Nothing
End Sub

Sub supM()
On Error Resume Next
Application.CommandBars(1).Controls("MPFE").Delete
End Sub

Sub Bonjour()
MsgBox "Hello !"
End Sub

Sub Salut()
MsgBox "Au revoir !"
End Sub


ChrisV


"JCF" a écrit dans le message de
news:BD1DCC58.1537%
Bonjour, je n'arrive pas à trouver dans l'aide la réponse à la question
suivante:
J'ai dans un classeur une série de tableaux et de macros qui fonctionnent
tous ensemble.
Je souhaite que lors de l'ouverture de ce classeur apparaisse un item de
plus dans la barre des menus, avec bien sur plusieurs sous-menus dedans
qui

permettent de lancer les macros.
Je veux que ce menu en plus n'apparaisse que lorsque ce classeur là est
ouvert, et qu'il n'apparaisse pas le reste du temps.
Je veux que cela fonctionne quelque soit l'ordinateur sur lequel est
ouvert

mon fichier.

Que faut-il faire pour ça?

Pour l'instant, en utilisant soit outils/ personnaliser les menus, soit
affichage/barre d'outils/ personnaliser, ça me crée des menus en dur,
attachés à ma machine et non pas à mon classeur XL.

Merci d'avance pour vos suggestions,
Jean-Christophe



Avatar
JCF
Merci beaucoup à vous trois pour la rapidité et l'efficacité de vos
réponses!
Il ne me reste plus qu'à intégrer tout ça! :-)
Bon week-end!
Jean-Christophe
Avatar
JCF
Grâce à votre aide, mon menu est déjà opérationnel! Supermerci donc, et une
petite question subsidiaire cosmétique: quelle est l'instruction à donner
quand on veut créer une petite séparation entre différents items du menu
(pour créer visuellement des groupes)? Style

Commande 1
Commande 2
Commande 3
----------
Commande 4
Commande 5

Pour l'instant j'ai créé une commande sans intitulé, et sans macro, mais cet
espacement est néanmoins cliquable, ce qui n'est pas le cas dans les menus
d'origine. Il y a moyen de créer cette petite séparation autrement?

Merci et à +
Jean-Christophe
Avatar
FxM
Bonjour,

Un coup d'oeil sur MenuMaker ? (Sorry, in English)
http://www.j-walk.com/ss/excel/tips/tip53.htm

@+
FxM



JCF wrote:
Grâce à votre aide, mon menu est déjà opérationnel! Supermerci donc, et une
petite question subsidiaire cosmétique: quelle est l'instruction à donner
quand on veut créer une petite séparation entre différents items du menu
(pour créer visuellement des groupes)? Style

Commande 1
Commande 2
Commande 3
----------
Commande 4
Commande 5

Pour l'instant j'ai créé une commande sans intitulé, et sans macro, mais cet
espacement est néanmoins cliquable, ce qui n'est pas le cas dans les menus
d'origine. Il y a moyen de créer cette petite séparation autrement?

Merci et à +
Jean-Christophe



Avatar
AV
quand on veut créer une petite séparation entre différents items du menu


With Sous_Menu_leMIen1
.BeginGroup = True
............

AV

Avatar
JCF
"AV" m'a répondu:
.BeginGroup = True
Super! Génial! Top Moumoute!!

Tu me l'avais mis dans le code que tu m'avais proposé mais j'avais pas
tilté! 8-/
En tout cas merci, c'est trop beau... :-))
Bon week-end et à bientôt,
Jean-Christophe