OVH Cloud OVH Cloud

Vérifier si menu existe

6 réponses
Avatar
Yvan
Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour ne
pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le classeur ?
(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA, elle
l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas exhibitionniste) le
fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...


--
Enlever YYXXZZ de mon mail si réponse sur celle-ci, merci ;-)

6 réponses

Avatar
jps
bonjour yvan
pour détruire le menu à la fermeture, il suffit d'appeler la proc SupprMenu
dans l'évèment BeforeClose que tu trouves dans le This Workbook de ton
classeur...
jps


"Yvan" a écrit dans le message de
news:41ae0497$0$16243$
Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour ne
pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le classeur
?

(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA,
elle

l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas exhibitionniste)
le

fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...


--
Enlever YYXXZZ de mon mail si réponse sur celle-ci, merci ;-)




Avatar
jps
oups...de même que pour créer ton menu, tu appelles la proc CreerMenu dans
l'évènement Workbook_Open que tu trouves aussi dans le ThiwWorkbook...
HTH
jps

"Yvan" a écrit dans le message de
news:41ae0497$0$16243$
Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour ne
pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le classeur
?

(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA,
elle

l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas exhibitionniste)
le

fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...


--
Enlever YYXXZZ de mon mail si réponse sur celle-ci, merci ;-)




Avatar
Frédéric Sigonneau
Bonsoir,

Pour compléter les infos données par jps, modifie ta procédure de suppression en
lui ajoutant l'instruction
On Error Resume Next
en première ligne.
Si la barre n'existe pas ça provoque une erreur et On Error Resume Next permet
de continuer l'exécution en ignorant l'erreur.
Autre solution, toujours à base de gestion d'erreur mais plus 'propre' : tester
si l'affectation de la barre à la variable NewMenu a échoué (pas de menu) ou non
et ne détruire que dans le deuxième cas :

Sub Suppr_Menu()
Dim NomBarre$, NewMenu As CommandBarControl
NomBarre = "Worksheet menu bar"
On Error Resume Next
Set NewMenu = Application.CommandBars(NomBarre).Controls("Macros")
On Error GoTo 0
If Not NewMenu Is Nothing Then NewMenu.Delete
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour ne
pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le classeur ?
(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA, elle
l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas exhibitionniste) le
fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...




Avatar
jps
mais c'est quoi, ça? de meme qu'on ne parle pas après un ministre, on
n'ajoute rien à ce qu'a pu dire un MVP, fût-ce d'un autre MVP qu'il
s'agisse...
ce forum bafoue de plus en plus les règles les plus élémentaires du
protocole...
jps

"Frédéric Sigonneau" a écrit dans le message de
news:ufDGSl%
Bonsoir,

Pour compléter les infos données par jps, modifie ta procédure de
suppression en

lui ajoutant l'instruction
On Error Resume Next
en première ligne.
Si la barre n'existe pas ça provoque une erreur et On Error Resume Next
permet

de continuer l'exécution en ignorant l'erreur.
Autre solution, toujours à base de gestion d'erreur mais plus 'propre' :
tester

si l'affectation de la barre à la variable NewMenu a échoué (pas de menu)
ou non

et ne détruire que dans le deuxième cas :

Sub Suppr_Menu()
Dim NomBarre$, NewMenu As CommandBarControl
NomBarre = "Worksheet menu bar"
On Error Resume Next
Set NewMenu = Application.CommandBars(NomBarre).Controls("Macros")
On Error GoTo 0
If Not NewMenu Is Nothing Then NewMenu.Delete
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour
ne


pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le
classeur ?


(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA,
elle


l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas
exhibitionniste) le


fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...






Avatar
Frédéric Sigonneau
Ah, je vous demande pardon de bien vouloir m'excuser, Maître, mais j'ai dit
'Bonsoir' !
Quand même !
:-)))))))

FS (Quoi ? Je m'as gourré de règles ??)
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

mais c'est quoi, ça? de meme qu'on ne parle pas après un ministre, on
n'ajoute rien à ce qu'a pu dire un MVP, fût-ce d'un autre MVP qu'il
s'agisse...
ce forum bafoue de plus en plus les règles les plus élémentaires du
protocole...
jps

"Frédéric Sigonneau" a écrit dans le message de
news:ufDGSl%

Bonsoir,

Pour compléter les infos données par jps, modifie ta procédure de


suppression en

lui ajoutant l'instruction
On Error Resume Next
en première ligne.
Si la barre n'existe pas ça provoque une erreur et On Error Resume Next


permet

de continuer l'exécution en ignorant l'erreur.
Autre solution, toujours à base de gestion d'erreur mais plus 'propre' :


tester

si l'affectation de la barre à la variable NewMenu a échoué (pas de menu)


ou non

et ne détruire que dans le deuxième cas :

Sub Suppr_Menu()
Dim NomBarre$, NewMenu As CommandBarControl
NomBarre = "Worksheet menu bar"
On Error Resume Next
Set NewMenu = Application.CommandBars(NomBarre).Controls("Macros")
On Error GoTo 0
If Not NewMenu Is Nothing Then NewMenu.Delete
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour



ne

pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le



classeur ?

(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA,



elle

l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas



exhibitionniste) le

fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...










Avatar
Yvan
Merci ;-)


"Frédéric Sigonneau" a écrit dans le message de
news: OXpHTz%
Ah, je vous demande pardon de bien vouloir m'excuser, Maître, mais j'ai
dit 'Bonsoir' !
Quand même !
:-)))))))

FS (Quoi ? Je m'as gourré de règles ??)
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

mais c'est quoi, ça? de meme qu'on ne parle pas après un ministre, on
n'ajoute rien à ce qu'a pu dire un MVP, fût-ce d'un autre MVP qu'il
s'agisse...
ce forum bafoue de plus en plus les règles les plus élémentaires du
protocole...
jps

"Frédéric Sigonneau" a écrit dans le message
de
news:ufDGSl%

Bonsoir,

Pour compléter les infos données par jps, modifie ta procédure de


suppression en

lui ajoutant l'instruction
On Error Resume Next
en première ligne.
Si la barre n'existe pas ça provoque une erreur et On Error Resume Next


permet

de continuer l'exécution en ignorant l'erreur.
Autre solution, toujours à base de gestion d'erreur mais plus 'propre' :


tester

si l'affectation de la barre à la variable NewMenu a échoué (pas de menu)


ou non

et ne détruire que dans le deuxième cas :

Sub Suppr_Menu()
Dim NomBarre$, NewMenu As CommandBarControl
NomBarre = "Worksheet menu bar"
On Error Resume Next
Set NewMenu = Application.CommandBars(NomBarre).Controls("Macros")
On Error GoTo 0
If Not NewMenu Is Nothing Then NewMenu.Delete
End Sub

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

J'utilise cette source pour créer un menu dans un classeur:

'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 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_Menu()
nomBarre = "Worksheet menu bar"
Set NewMenu = Application.CommandBars(nomBarre).Controls("Macros")
NewMenu.Delete
End Sub

Sa fonctionne à merveille, mais je voudrais pouvoir contrôler si le menu
existe déjà
avant de le supprimer, pour éviter la génération d'une erreur.
Dans le même esprit, je voudrais contrôler si le menu existe déjà pour



ne

pas en créer un nouveau.

Comment faire pour que le menu soit détruit quand l'on quitte le



classeur ?

(Appelle de proc à la fermeture ?)

J'utilise cette méthode pour mettre une sorte de copyright sur un long
travail que j'ai effectué dans un classeur non protégé (la partie VBA,



elle

l'est ;-) )
Y-a-t-il d'autres solutions pour rendre voyant (mais pas



exhibitionniste) le

fait que je suis celui qui a créer une feuille ?

Par avance merci

Yvan, un peu perdu...