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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <phb56700_nospam@libertysurf.fr> wrote in message
news:41a22081$0$31594$626a14ce@news.free.fr...
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
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
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
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" <nospams_patrick.fredin@iquebec.com> a écrit dans le
message de news:e0V2dpL0EHA.1564@TK2MSFTNGP09.phx.gbl...
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" <phb56700_nospam@libertysurf.fr> wrote in message
news:41a22081$0$31594$626a14ce@news.free.fr...
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
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