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

Ajout d'un menu avec items et sous-items

6 réponses
Avatar
Herdet
Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé en
VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec des
items principaux dont certains ont des sous-items, je souhaiterais récupérer
dans une variable le n°de l'item sélectionné et le n° de l'item secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan

6 réponses

Avatar
anonymousA
bonjour,

qu'est ce que tu appelles un menu ?

A+

Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé en
VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec des
items principaux dont certains ont des sous-items, je souhaiterais récupérer
dans une variable le n°de l'item sélectionné et le n° de l'item secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan




Avatar
Herdet
Bonsoir,
Un menu déroulant comme les menus standards d'Excel : "Fichier", "Edition",
"Affichage","Insertions","Options", etc...

"anonymousA" a écrit dans le message de news:
4220a5aa$0$3136$
bonjour,

qu'est ce que tu appelles un menu ?

A+

Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé
en VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec des
items principaux dont certains ont des sous-items, je souhaiterais
récupérer dans une variable le n°de l'item sélectionné et le n° de l'item
secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan




Avatar
Herdet
Deux exemples de création de menus :
--------------------------------------------------------------------------------
Sub testMenu()
'papou, mpfe
Dim monmenu As CommandBarControl, sousmenu1 As CommandBarControl
Dim sousmenu2 As CommandBarControl, sousmenu2_option1, sousmenu2_option2

Set monmenu = _
Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With monmenu
.Caption = "&Qualité"
End With

Set sousmenu1 = monmenu.Controls.Add(msoControlButton, , , , True)
With sousmenu1
.Caption = "&Mise à jour du document"
.OnAction = "Planning"
End With

Set sousmenu2 = monmenu.Controls.Add(msoControlPopup, , , , True)
With sousmenu2
.Caption = "Audit"

Set sousmenu2_option1 = sousmenu2.Controls.Add(msoControlButton, , , ,
True)
With sousmenu2_option1
.Caption = "&Individuel"
.OnAction = "Individuel"
End With

Set sousmenu2_option2 = sousmenu2.Controls.Add(msoControlButton, , , ,
True)
With sousmenu2_option2
.Caption = "&Tous"
.OnAction = "Tous"
End With
End With
End Sub

Sub delTest()
Application.CommandBars(1).Controls("&Qualité").Delete
End Sub
----------------------------------------------------------------------------------
'Création d'un menu avec sous menus dans la barre des menus d'Excel
'd'après E. Tissot, mpfe

Sub Creer_Menu()
Dim NewMenu As CommandBarPopup
Dim NewSubMenu As CommandBarPopup
Dim NewButton As CommandBarButton

' menus d'Excel
nomBarre = "Worksheet menu bar"

'ajouter un menu
Set NewMenu = Application.CommandBars(nomBarre).Controls.Add _
(Type:=msoControlPopup)
NewMenu.Caption = "Macros"

'ajouter un sous-menu au menu
Set NewSubMenu = NewMenu.Controls.Add(Type:=msoControlPopup)
NewSubMenu.Caption = "Divers"

'ajouter un bouton au sous-menu
Set NewButton = NewSubMenu.Controls.Add(Type:=msoControlButton)
With NewButton
.Caption = "Macro 1"
.FaceId = 317
.OnAction = "Suppr_SousMenu"
End With

'ajouter un bouton au menu
Set NewButton = NewMenu.Controls.Add(Type:=msoControlButton)
With NewButton
.Caption = "Macro 2"
.BeginGroup = True
.FaceId = 316
.OnAction = "Suppr_Menu"
End With
End Sub

Sub Suppr_SousMenu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Controls("Divers").Delete
End Sub

Sub Suppr_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub


"anonymousA" a écrit dans le message de news:
4220a5aa$0$3136$
bonjour,

qu'est ce que tu appelles un menu ?

A+

Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé
en VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec des
items principaux dont certains ont des sous-items, je souhaiterais
récupérer dans une variable le n°de l'item sélectionné et le n° de l'item
secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan




Avatar
MichDenis
Bonjour Herdet,

As-tu essayé d'utiliser la propriété "TAG" au moment de la création de ta barre des menus et de tes sous-menus
en donnant une valeur particulière à chaque TAG . Pour l'ensemble de tes contrôles, tu attribues la même macro :
.OnAction = "NomMacro" et dans la procédure "NomMacro", tu établies un select case à partir de la propriété Tag du
contrôle utilisé.

Et Comme tu connais le contrôle utilisé, tu peux facilement remonter à l'item du menu . Exemple :

Ce contrôle représente "Fichier" de la barre de menu de la feuille de calcul.
Pour retrouver le nom de la barre de menus à partir de la valeur du contrôle :
Application.CommandBars(1).Controls(1).Parent.NameLocal

Ceci représente
A = Application.CommandBars(1).Controls(1).Controls(1).CAption
a = "Nouveau..." = Premier sous-menu de "Fichier" de la barre des Menus

'Si tu connais, le contrôle "Nouveau..." pour remonter d'un cran à fichier, tu utilises ceci :
A = Application.CommandBars(1).Controls(1).Controls(1).Parent.NameLocal


Salutations!


"Herdet" a écrit dans le message de news: %23HrEQ$
Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé en
VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec des
items principaux dont certains ont des sous-items, je souhaiterais récupérer
dans une variable le n°de l'item sélectionné et le n° de l'item secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan
Avatar
anonymousA
bon ,

au risque de paraitre tatillon, un menu ou une barre d'outils c'est
pareil. Ce sont des objets Commandbars qui peuvent être déclarés dont le
msobartype peut être différent (msobartypemenubar :type MenuBar (ou 1),
msobartypepopup: type PopUp (ou 2) ou msobartypenormal de type Normal (ou 0)
Ce que tu envoies sont des exemples de création de controles ( objets
CommanbarControls)sur des objets commandbars existants.

ceci précisé,ta demande peut être résolue par la propriété ActionControl
de commanbarcontrol en écrivant dans la procédure associé au onaction de
ton controle l'instruction suivante

CommandBars.ActionControl.index ou si tu le souhaites
CommandBars.ActionControl.caption.

Ce faisant, tu ne déclares qu'une seul procédure on action associéee et
tu réagis dans cette procédure en fonction du N° d'index ou du nom
(caption)et décider ensuite ce que tu veux faire en focntion de ce N° ou
de ce caption.
Si tu a créé une barre d'outils personnalisée, il te faudra sasn doute
travailler avec l'instruction
CommandBars.ActionControl.Parent.Parent.Index pour remonter de controle
en controle.

A+

Deux exemples de création de menus :
--------------------------------------------------------------------------------
Sub testMenu()
'papou, mpfe
Dim monmenu As CommandBarControl, sousmenu1 As CommandBarControl
Dim sousmenu2 As CommandBarControl, sousmenu2_option1, sousmenu2_option2

Set monmenu = _
Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With monmenu
.Caption = "&Qualité"
End With

Set sousmenu1 = monmenu.Controls.Add(msoControlButton, , , , True)
With sousmenu1
.Caption = "&Mise à jour du document"
.OnAction = "Planning"
End With

Set sousmenu2 = monmenu.Controls.Add(msoControlPopup, , , , True)
With sousmenu2
.Caption = "Audit"

Set sousmenu2_option1 = sousmenu2.Controls.Add(msoControlButton, , , ,
True)
With sousmenu2_option1
.Caption = "&Individuel"
.OnAction = "Individuel"
End With

Set sousmenu2_option2 = sousmenu2.Controls.Add(msoControlButton, , , ,
True)
With sousmenu2_option2
.Caption = "&Tous"
.OnAction = "Tous"
End With
End With
End Sub

Sub delTest()
Application.CommandBars(1).Controls("&Qualité").Delete
End Sub
----------------------------------------------------------------------------------
'Création d'un menu avec sous menus dans la barre des menus d'Excel
'd'après E. Tissot, mpfe

Sub Creer_Menu()
Dim NewMenu As CommandBarPopup
Dim NewSubMenu As CommandBarPopup
Dim NewButton As CommandBarButton

' menus d'Excel
nomBarre = "Worksheet menu bar"

'ajouter un menu
Set NewMenu = Application.CommandBars(nomBarre).Controls.Add _
(Type:=msoControlPopup)
NewMenu.Caption = "Macros"

'ajouter un sous-menu au menu
Set NewSubMenu = NewMenu.Controls.Add(Type:=msoControlPopup)
NewSubMenu.Caption = "Divers"

'ajouter un bouton au sous-menu
Set NewButton = NewSubMenu.Controls.Add(Type:=msoControlButton)
With NewButton
.Caption = "Macro 1"
.FaceId = 317
.OnAction = "Suppr_SousMenu"
End With

'ajouter un bouton au menu
Set NewButton = NewMenu.Controls.Add(Type:=msoControlButton)
With NewButton
.Caption = "Macro 2"
.BeginGroup = True
.FaceId = 316
.OnAction = "Suppr_Menu"
End With
End Sub

Sub Suppr_SousMenu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Controls("Divers").Delete
End Sub

Sub Suppr_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub


"anonymousA" a écrit dans le message de news:
4220a5aa$0$3136$

bonjour,

qu'est ce que tu appelles un menu ?

A+


Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé
en VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec des
items principaux dont certains ont des sous-items, je souhaiterais
récupérer dans une variable le n°de l'item sélectionné et le n° de l'item
secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan









Avatar
Herdet
Avec CommandBars.ActionControl.Index et
CommandBars.ActionControl.Parent.Parent.Index çà fonctionne parfaitement.
Pour info, j'ai fais une procédure pour ajouter un nouveau menu avec des
items, sous-items, FacesID à partir d'un tableau de 5 colonnes sur une
feuille Excel.
C'est plus facilement gérable de façon dynamique où avec traductions ainsi
plutôt qu'avec des dizaines de lignes de VBA

Merci à toi ainsi qu'à Denis
A+
Robert

"anonymousA" a écrit dans le message de news:
4220bb6b$0$3136$
bon ,

au risque de paraitre tatillon, un menu ou une barre d'outils c'est
pareil. Ce sont des objets Commandbars qui peuvent être déclarés dont le
msobartype peut être différent (msobartypemenubar :type MenuBar (ou 1),
msobartypepopup: type PopUp (ou 2) ou msobartypenormal de type Normal (ou
0)
Ce que tu envoies sont des exemples de création de controles ( objets
CommanbarControls)sur des objets commandbars existants.

ceci précisé,ta demande peut être résolue par la propriété ActionControl
de commanbarcontrol en écrivant dans la procédure associé au onaction de
ton controle l'instruction suivante

CommandBars.ActionControl.index ou si tu le souhaites
CommandBars.ActionControl.caption.

Ce faisant, tu ne déclares qu'une seul procédure on action associéee et tu
réagis dans cette procédure en fonction du N° d'index ou du nom
(caption)et décider ensuite ce que tu veux faire en focntion de ce N° ou
de ce caption.
Si tu a créé une barre d'outils personnalisée, il te faudra sasn doute
travailler avec l'instruction
CommandBars.ActionControl.Parent.Parent.Index pour remonter de controle en
controle.

A+

Deux exemples de création de menus :
--------------------------------------------------------------------------------
Sub testMenu()
'papou, mpfe
Dim monmenu As CommandBarControl, sousmenu1 As CommandBarControl
Dim sousmenu2 As CommandBarControl, sousmenu2_option1, sousmenu2_option2

Set monmenu = _
Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With monmenu
.Caption = "&Qualité"
End With

Set sousmenu1 = monmenu.Controls.Add(msoControlButton, , , , True)
With sousmenu1
.Caption = "&Mise à jour du document"
.OnAction = "Planning"
End With

Set sousmenu2 = monmenu.Controls.Add(msoControlPopup, , , , True)
With sousmenu2
.Caption = "Audit"

Set sousmenu2_option1 = sousmenu2.Controls.Add(msoControlButton, , ,
, True)
With sousmenu2_option1
.Caption = "&Individuel"
.OnAction = "Individuel"
End With

Set sousmenu2_option2 = sousmenu2.Controls.Add(msoControlButton, , ,
, True)
With sousmenu2_option2
.Caption = "&Tous"
.OnAction = "Tous"
End With
End With
End Sub

Sub delTest()
Application.CommandBars(1).Controls("&Qualité").Delete
End Sub
----------------------------------------------------------------------------------
'Création d'un menu avec sous menus dans la barre des menus d'Excel
'd'après E. Tissot, mpfe

Sub Creer_Menu()
Dim NewMenu As CommandBarPopup
Dim NewSubMenu As CommandBarPopup
Dim NewButton As CommandBarButton

' menus d'Excel
nomBarre = "Worksheet menu bar"

'ajouter un menu
Set NewMenu = Application.CommandBars(nomBarre).Controls.Add _
(Type:=msoControlPopup)
NewMenu.Caption = "Macros"

'ajouter un sous-menu au menu
Set NewSubMenu = NewMenu.Controls.Add(Type:=msoControlPopup)
NewSubMenu.Caption = "Divers"

'ajouter un bouton au sous-menu
Set NewButton = NewSubMenu.Controls.Add(Type:=msoControlButton)
With NewButton
.Caption = "Macro 1"
.FaceId = 317
.OnAction = "Suppr_SousMenu"
End With

'ajouter un bouton au menu
Set NewButton = NewMenu.Controls.Add(Type:=msoControlButton)
With NewButton
.Caption = "Macro 2"
.BeginGroup = True
.FaceId = 316
.OnAction = "Suppr_Menu"
End With
End Sub

Sub Suppr_SousMenu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Controls("Divers").Delete
End Sub

Sub Suppr_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub


"anonymousA" a écrit dans le message de news:
4220a5aa$0$3136$

bonjour,

qu'est ce que tu appelles un menu ?

A+


Bonjour à tous,
Après diverses recherches infructueuses sur l'utilisation d'un menu créé
en VBA, je m'adresse au forum.
Après avoir créé en VBA un nouveau menu (pas une barre d'outils) avec
des items principaux dont certains ont des sous-items, je souhaiterais
récupérer dans une variable le n°de l'item sélectionné et le n° de
l'item secondaire.
Je voudrais éviter de créer un .OnAction = "Nom macro" différent pour
chaque item et sous-item

Merci de votre aide
Robert Dezan