OVH Cloud OVH Cloud

Sauvegarde de menus personnalisés

2 réponses
Avatar
Philippe
Bonjour à tous

J'ai un classeur pour lequel je créé un menu personnalisé (à plusieurs
niveaux) dans le Workbook_Open
Dans une nouvelle fonction de ce classeur, je dois ouvrir puis refermer un
second classeur qui a ses propres macro que je ne peux désactiver (j'en ai
besoin) et que je ne peux modifier (je n'en ai pas le droit).
Une des macros de ce classeur supprime tous les menus personnalisés.
Résultat: après avoir refermé ce second classeur, mon propre menu
personnalisé a disparu.

Je souhaite donc ajouter dans mon code des procédures se chargeant de sauver
mes menus pour ensuite les restaurer.
J'avais dans l'idée de déclarer un tableau de CommandBarControl pour pouvoir
y stocker mes menus mais je me fais jeter dans la procédure SauverMenusPerso
à la ligne tabMenus(iIndex) = MenuP avec le message "Erreur d'exécution
'91': Variable objet ou variable de bloc With non définie"

Je fais certainement quelque chose d'interdit mais quoi ?


Option Explicit
Dim tabMenus() As CommandBarControl

' Sauvegarde, suppression puis restauration des menus personnalisés
Sub GestionMenusPerso()
SauverMenusPerso
SupprimerMenusPerso
RestaurerMenusPerso
End Sub

' Sauvegarde des menus personnalisés
Sub SauverMenusPerso()
Dim iIndex As Integer, MenuP As CommandBarControl, TousLesMenus As
CommandBarControls
iIndex = 0
Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For Each MenuP In TousLesMenus
If MenuP.Id = 1 Then 'si menu personnalisé
ReDim Preserve tabMenus(iIndex)
tabMenus(iIndex) = MenuP
iIndex = iIndex + 1
End If
Next MenuP
End Sub

' Suppression des menus personnalisés
Sub SupprimerMenusPerso()
Dim MenuP As CommandBarControl, TousLesMenus As CommandBarControls

Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For Each MenuP In TousLesMenus
If (MenuP.Id = 1) Then 'si menu personnalisé
MenuP.Delete
End If
Next
End Sub

' Restauration des menus personnalisés
Sub RestaurerMenusPerso()
Dim iIndex As Integer, NouveauMenu As CommandBarControl, TousLesMenus As
CommandBarControls
iIndex = 0
Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For iIndex = 0 To UBound(tabMenus)
Set NouveauMenu = TousLesMenus.Add(tabMenus(iIndex).Type,
tabMenus(iIndex).Id)
NouveauMenu.Caption = tabMenus(iIndex).Caption
Next iIndex
End Sub

2 réponses

Avatar
Patrick Fredin
Bonjour,

Tu pourrais, après avoir fermé le second fichier, re-exécuter la procédure
qui les met à l'ouverture du fichier. Tu peux d'ailleurs appeler une
procédure d'événement, comme cela :

Call Workbook_Open

Bon courage.

--
Patrick

"Philippe" wrote in message
news:41a22081$0$31594$
Bonjour à tous

J'ai un classeur pour lequel je créé un menu personnalisé (à plusieurs
niveaux) dans le Workbook_Open
Dans une nouvelle fonction de ce classeur, je dois ouvrir puis refermer un
second classeur qui a ses propres macro que je ne peux désactiver (j'en ai
besoin) et que je ne peux modifier (je n'en ai pas le droit).
Une des macros de ce classeur supprime tous les menus personnalisés.
Résultat: après avoir refermé ce second classeur, mon propre menu
personnalisé a disparu.

Je souhaite donc ajouter dans mon code des procédures se chargeant de
sauver
mes menus pour ensuite les restaurer.
J'avais dans l'idée de déclarer un tableau de CommandBarControl pour
pouvoir
y stocker mes menus mais je me fais jeter dans la procédure
SauverMenusPerso
à la ligne tabMenus(iIndex) = MenuP avec le message "Erreur d'exécution
'91': Variable objet ou variable de bloc With non définie"

Je fais certainement quelque chose d'interdit mais quoi ?


Option Explicit
Dim tabMenus() As CommandBarControl

' Sauvegarde, suppression puis restauration des menus personnalisés
Sub GestionMenusPerso()
SauverMenusPerso
SupprimerMenusPerso
RestaurerMenusPerso
End Sub

' Sauvegarde des menus personnalisés
Sub SauverMenusPerso()
Dim iIndex As Integer, MenuP As CommandBarControl, TousLesMenus As
CommandBarControls
iIndex = 0
Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For Each MenuP In TousLesMenus
If MenuP.Id = 1 Then 'si menu personnalisé
ReDim Preserve tabMenus(iIndex)
tabMenus(iIndex) = MenuP
iIndex = iIndex + 1
End If
Next MenuP
End Sub

' Suppression des menus personnalisés
Sub SupprimerMenusPerso()
Dim MenuP As CommandBarControl, TousLesMenus As CommandBarControls

Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For Each MenuP In TousLesMenus
If (MenuP.Id = 1) Then 'si menu personnalisé
MenuP.Delete
End If
Next
End Sub

' Restauration des menus personnalisés
Sub RestaurerMenusPerso()
Dim iIndex As Integer, NouveauMenu As CommandBarControl, TousLesMenus As
CommandBarControls
iIndex = 0
Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For iIndex = 0 To UBound(tabMenus)
Set NouveauMenu = TousLesMenus.Add(tabMenus(iIndex).Type,
tabMenus(iIndex).Id)
NouveauMenu.Caption = tabMenus(iIndex).Caption
Next iIndex
End Sub




Avatar
Philippe
Bonsoir Patrick,

C'est effectivement ce que j'ai fini par faire mais ça m'intéressait de
savoir pouvoir je ne pouvais pas stocker mon Menu dans un tableau de
CommandBarControl

Merci quand même


"Patrick Fredin" a écrit dans le
message de news:
Bonjour,

Tu pourrais, après avoir fermé le second fichier, re-exécuter la procédure
qui les met à l'ouverture du fichier. Tu peux d'ailleurs appeler une
procédure d'événement, comme cela :

Call Workbook_Open

Bon courage.

--
Patrick

"Philippe" wrote in message
news:41a22081$0$31594$
Bonjour à tous

J'ai un classeur pour lequel je créé un menu personnalisé (à plusieurs
niveaux) dans le Workbook_Open
Dans une nouvelle fonction de ce classeur, je dois ouvrir puis refermer
un


second classeur qui a ses propres macro que je ne peux désactiver (j'en
ai


besoin) et que je ne peux modifier (je n'en ai pas le droit).
Une des macros de ce classeur supprime tous les menus personnalisés.
Résultat: après avoir refermé ce second classeur, mon propre menu
personnalisé a disparu.

Je souhaite donc ajouter dans mon code des procédures se chargeant de
sauver
mes menus pour ensuite les restaurer.
J'avais dans l'idée de déclarer un tableau de CommandBarControl pour
pouvoir
y stocker mes menus mais je me fais jeter dans la procédure
SauverMenusPerso
à la ligne tabMenus(iIndex) = MenuP avec le message "Erreur d'exécution
'91': Variable objet ou variable de bloc With non définie"

Je fais certainement quelque chose d'interdit mais quoi ?


Option Explicit
Dim tabMenus() As CommandBarControl

' Sauvegarde, suppression puis restauration des menus personnalisés
Sub GestionMenusPerso()
SauverMenusPerso
SupprimerMenusPerso
RestaurerMenusPerso
End Sub

' Sauvegarde des menus personnalisés
Sub SauverMenusPerso()
Dim iIndex As Integer, MenuP As CommandBarControl, TousLesMenus As
CommandBarControls
iIndex = 0
Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For Each MenuP In TousLesMenus
If MenuP.Id = 1 Then 'si menu personnalisé
ReDim Preserve tabMenus(iIndex)
tabMenus(iIndex) = MenuP
iIndex = iIndex + 1
End If
Next MenuP
End Sub

' Suppression des menus personnalisés
Sub SupprimerMenusPerso()
Dim MenuP As CommandBarControl, TousLesMenus As CommandBarControls

Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For Each MenuP In TousLesMenus
If (MenuP.Id = 1) Then 'si menu personnalisé
MenuP.Delete
End If
Next
End Sub

' Restauration des menus personnalisés
Sub RestaurerMenusPerso()
Dim iIndex As Integer, NouveauMenu As CommandBarControl, TousLesMenus As
CommandBarControls
iIndex = 0
Set TousLesMenus = Application.CommandBars.ActiveMenuBar.Controls
For iIndex = 0 To UBound(tabMenus)
Set NouveauMenu = TousLesMenus.Add(tabMenus(iIndex).Type,
tabMenus(iIndex).Id)
NouveauMenu.Caption = tabMenus(iIndex).Caption
Next iIndex
End Sub