Vérifier l'existence d'un menu personnalisé

thenoyl

XLDnaute Nouveau
Bonjour à tous par ce matin radieux,
mon problème concerne la vérification de la présence ou non d'un menu personnalisé.
J'ai créé à l'ouverture d'un classeur, un menu personnalisé de ce type :

Sub creer_menu_travaux()
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 = "Travaux"
'Creation des sous-menus
With TransMenu.Controls.Add(msoControlButton)
.Caption = "Je suis perdu- aidez moi! - aide"
.FaceId = 1004
.OnAction = "Voir_aide"
etc....
ca marche nickel avec des petites faceid personnalisées c'est très sympa...

Afin de permettre a l'utilisateur de retrouver ses menus d'origine à la fermeture du classeur, j'ai glissé dans la fermeture du workbook ceci :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
retablir_titre
ActiveMenuBar.Reset
end sub

Mon souci est le suivant :
lorsque j'ouvre et que je referme ce classeur , tout fonctionne à merveille.
Par contre, lorsque j'ouvre deux classeurs identiques ou plus contenant ces macros alors deux menus personnalisés "Travaux" se créent ...c'est pas beau mais c'est normal . Par contre, si je ferme l'un des deux classeurs ouverts et bien le menu disparait sur le classeur restant. c'est a nouveau logique puisque ActiveMenuBar.Reset fait son boulot.:eek:

Comment faire pour vérifier l'existence d'un menu personnalisé et ne pas recréé le dit menu ? et comment faire pour empecher de tout réinitialiser à la fermeture de l'un des classeurs ?

avez vous une idée ?
merci d'avance:D
Olivier
 

Pierrot93

XLDnaute Barbatruc
Re : Vérifier l'existence d'un menu personnalisé

Bonjour Olivier,

regarde le code ci dessous, si cela peut t'aider :

Code:
Dim b As CommandBar, e As Boolean
For Each b In CommandBars
    If b.Name = "mabarre" Then e = True
Next b
If e = False Then CommandBars.Add "mabarre"

bonne journée
@+
 

thenoyl

XLDnaute Nouveau
Re : Vérifier l'existence d'un menu personnalisé

Merci beaucoup Pierrot,
ca marche nickel..

Sub Compteur_menu()
For Z = 1 To CommandBars(1).Controls.Count
If CommandBars(1).Controls(Z).Caption = "Travaux" Then e = True
Next
If e = False Then creer_menu_travaux
End Sub

je l'ai adapté à mon classeur et en effet les menus ne sont pas recréés à chaque ouverture de classeur.
Pour ma deuxième question j'ai résolu le problème en mettant un compteur de menu dans le workbook sous cette forme ( ca peut peut etre aider quelqu'un un jour :rolleyes:)

Dim compteur As Integer

Private Sub Workbook_Open()
compteur = compteur + 1
Compteur_menu
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
compteur = compteur - 1
If compteur = 1 Then
ActiveMenuBar.Reset
End If
End Sub

Par contre, j'ai voulu initialiser le compteur en indiquant :
Dim compteur As Integer
compteur = 0

mais compteur = 0 n'est pas accepté , excel initialise donc "compteur" avec une valeur égale à 1. j'ai fait avec ...

encore merci
cordialement,
Olivier
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia