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

Gestion de menu personnalisé pour 2 classeurs identiques ouverts

3 réponses
Avatar
COQUITO
Bonjour à tous,

Le sujet pour lequel j'ai besoin d'aide concerne la gestion des menus
personnalisés dans le cas où deux classeurs identiques sont ouverts
simultanément.

J'ai créé un menu personnalisé que j'appelle à partir du Workbook_Open :

Private sub Workbook_Open ()
call Menu_CopieValeurs
End Sub

Dans un module standar, j'ai mis la procédure de création du menu et j'ai
fait en sorte que lorsque les deux classeurs identiques sont ouverts, un
seul menu s'affiche :

Public Sub Menu_CopieValeursCubes()
Dim bMarqueur As Boolean
Dim iNbMenus As Integer
Dim iItem As Integer
Dim menuPrin As CommandBarPopup
Dim menuItem As CommandBarControl

iNbMenus = Application.CommandBars.ActiveMenuBar.Controls.Count
For iItem = 1 To iNbMenus
If
Application.CommandBars.ActiveMenuBar.Controls.Item(iItem).Caption =
"Copie_Valeurs" Then
bMarqueur = True
End If
Next iItem

'CREATION DU MENU PRINCIPAL
If bMarqueur = False Then
Set menuPrin = _
Application.CommandBars("Worksheet Menu
Bar").Controls.Add(Type:= _
msoControlPopup, temporary:=True)
menuPrin.Caption = "Copie_Valeurs"
menuPrin.BeginGroup = True
End If

Cela marche bien.
En revanche, lorsqu'on ferme un seul des deux classeurs, le menu disparaît,
y compris sur le classeur qui reste ouvert.

Comment faire pour que le menu reste sur le classeur ouvert ?

Merci d'avance à tous ceux qui pourraient trouver une solution.
(A mon travail, la version d'Excel est Excel 2003)

3 réponses

Avatar
michdenis
Bonjour,

Fais une gestion de ta barre de menu personnalisé dans
chacun des 2 classeurs en utilisant ceci dans chacun des
ThisWorkbook de tes 2 classeurs et enlève la procédure
"Private sub Workbook_Open"

'-------------------------------
Private Sub Workbook_Activate()
call Menu_CopieValeurs
End Sub
'-------------------------------
Private Sub Workbook_Deactivate()
On error resume next
Application.CommandBars.ActiveMenuBar.Controls("Copie_Valeurs").delete
End Sub
'-------------------------------



"COQUITO" a écrit dans le message de groupe de discussion :

Bonjour à tous,

Le sujet pour lequel j'ai besoin d'aide concerne la gestion des menus
personnalisés dans le cas où deux classeurs identiques sont ouverts
simultanément.

J'ai créé un menu personnalisé que j'appelle à partir du Workbook_Open :

Private sub Workbook_Open ()
call Menu_CopieValeurs
End Sub

Dans un module standar, j'ai mis la procédure de création du menu et j'ai
fait en sorte que lorsque les deux classeurs identiques sont ouverts, un
seul menu s'affiche :

Public Sub Menu_CopieValeursCubes()
Dim bMarqueur As Boolean
Dim iNbMenus As Integer
Dim iItem As Integer
Dim menuPrin As CommandBarPopup
Dim menuItem As CommandBarControl

iNbMenus = Application.CommandBars.ActiveMenuBar.Controls.Count
For iItem = 1 To iNbMenus
If
Application.CommandBars.ActiveMenuBar.Controls.Item(iItem).Caption "Copie_Valeurs" Then
bMarqueur = True
End If
Next iItem

'CREATION DU MENU PRINCIPAL
If bMarqueur = False Then
Set menuPrin = _
Application.CommandBars("Worksheet Menu
Bar").Controls.Add(Type:= _
msoControlPopup, temporary:=True)
menuPrin.Caption = "Copie_Valeurs"
menuPrin.BeginGroup = True
End If

Cela marche bien.
En revanche, lorsqu'on ferme un seul des deux classeurs, le menu disparaît,
y compris sur le classeur qui reste ouvert.

Comment faire pour que le menu reste sur le classeur ouvert ?

Merci d'avance à tous ceux qui pourraient trouver une solution.
(A mon travail, la version d'Excel est Excel 2003)
Avatar
michdenis
Pour supprimer le contrôle ajouté, il aurait été préférable que
j'utilise ceci :

On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("Copie_Valeurs").Delete
Avatar
COQUITO
Merci beaucoup michdenis,

J'ai suivi exactement tes conseils et cela marche de façon impeccable.

Précédemment, j'avais mis le code de suppression du menu dans la procédure
Workbook_BeforeClose.

En utilisant Workbook_Deactivate, il n'y a plus de problème.

Merci encore et bonne fin de dimanche


"michdenis" a écrit dans le message de
news:
Pour supprimer le contrôle ajouté, il aurait été préférable que
j'utilise ceci :

On Error Resume Next
Application.CommandBars("Worksheet Menu
Bar").Controls("Copie_Valeurs").Delete