Discussion:
Onglet
Add Reply
Brat'ac
2017-02-13 17:14:54 UTC
Réponse
Permalink
Raw Message
Bonsoir,

(EXCEL 2007)

Est-il possible comme pour le menu contextuel des cellules de modifier
celui des onglets ?

J'ai rien trouvé sur la toile.

Merci de l'aide.
MichD
2017-02-13 17:46:03 UTC
Réponse
Permalink
Raw Message
Bonjour,

Un exemple :
"Ce que je fais" est l'appellation de la commande du menu contextuel sur l'onglet de la
feuille.
"MaMacro" est le nom de la macro qui s'exécutera. Cette dernière doit être dans un module
standard. Si elle est dans un module feuille, le nom de la feuille doit apparaître comme ceci :
"Feuil1.MaMacro". Feuil1 n'est pas le nom de l'onglet, mais la propriété "NAME" de la feuille
visible dans l'éditeur de code vba.

'----------------------------------------
Sub test()
Dim B As CommandBarControl
With Application.CommandBars("Ply")
.Reset
Set B = .Controls.Add
End With
With B
.Caption = "Ce que je fais"
.OnAction = "MaMacro"
.Visible = True
End With
End Sub
'----------------------------------------

MichD



"Brat'ac" a écrit dans le message de groupe de discussion :
***@yopmail.com...

Bonsoir,

(EXCEL 2007)

Est-il possible comme pour le menu contextuel des cellules de modifier
celui des onglets ?

J'ai rien trouvé sur la toile.

Merci de l'aide.
MichD
2017-02-13 17:48:51 UTC
Réponse
Permalink
Raw Message
La commande ".Reset" fait disparaître toutes les commandes de cette barre qui n'appartiennent
pas à Excel d'origine.

MichD
Brat'ac
2017-02-13 20:31:01 UTC
Réponse
Permalink
Raw Message
Post by MichD
Bonjour,
"Ce que je fais" est l'appellation de la commande du menu contextuel sur
l'onglet de la feuille.
"MaMacro" est le nom de la macro qui s'exécutera. Cette dernière doit être
dans un module standard. Si elle est dans un module feuille, le nom de la
feuille doit apparaître comme ceci : "Feuil1.MaMacro". Feuil1 n'est pas le
nom de l'onglet, mais la propriété "NAME" de la feuille visible dans
l'éditeur de code vba.
MichD
Merci du retour, mais ce n'est pas exactement ça que je cherche à
faire.
J'essaie de masquer des commandes du menu contextuel d'un onglet, j'ai
trouvé le code suivant
qui fonctionne pour la commande "Supprimer"
-------------------------------------------------------------------------------
Sub DesactiverSupprFeuille() 'OK
With Application
.CommandBars("Ply").Controls("&Supprimer").Enabled = False
.CommandBars("Built-in
Menus").Controls("&Edition").Controls("&Supprimer une feuille").Enabled
= False
End With
End Sub
-----------------------------------------------------------------------------------
Maintenant j'essaie d'adapter le code à une autre commande comme par
exemple "Insérer..."
comme cela.

Sub DesactiverInserer()
With Application
.CommandBars("Ply").Controls("&Insérer...").Enabled = False
.CommandBars("Built-in
Menus").Controls("&Edition").Controls("&Insérer...").Enabled = False
End With
End Sub

Je me ramasse une injure-box "Argument ou appel de procédure incorrect"
mais la commande est quand même masquée !!!!!

Je galère dur dur
Brat'ac
2017-02-13 22:05:33 UTC
Réponse
Permalink
Raw Message
Post by MichD
Bonjour,
"Ce que je fais" est l'appellation de la commande du menu contextuel sur
l'onglet de la feuille.
"MaMacro" est le nom de la macro qui s'exécutera. Cette dernière doit être
dans un module standard. Si elle est dans un module feuille, le nom de la
feuille doit apparaître comme ceci : "Feuil1.MaMacro". Feuil1 n'est pas le
nom de l'onglet, mais la propriété "NAME" de la feuille visible dans
l'éditeur de code vba.
MichD
Merci du retour, mais ce n'est pas exactement ça que je cherche à faire.
J'essaie de masquer des commandes du menu contextuel d'un onglet, j'ai trouvé
le code suivant
qui fonctionne pour la commande "Supprimer"
-------------------------------------------------------------------------------
Sub DesactiverSupprFeuille() 'OK
With Application
.CommandBars("Ply").Controls("&Supprimer").Enabled = False
.CommandBars("Built-in Menus").Controls("&Edition").Controls("&Supprimer une
feuille").Enabled = False
End With
End Sub
-----------------------------------------------------------------------------------
Maintenant j'essaie d'adapter le code à une autre commande comme par exemple
"Insérer..."
comme cela.
Sub DesactiverInserer()
With Application
.CommandBars("Ply").Controls("&Insérer...").Enabled = False
.CommandBars("Built-in
Menus").Controls("&Edition").Controls("&Insérer...").Enabled = False
End With
End Sub
Je me ramasse une injure-box "Argument ou appel de procédure incorrect"
mais la commande est quand même masquée !!!!!
Je galère dur dur
Bon je pense avoir trouvé, j'explique demain
Brat'ac
2017-02-14 10:24:46 UTC
Réponse
Permalink
Raw Message
Post by Brat'ac
Bon je pense avoir trouvé, j'explique demain
Bonjour,

Avec un code trouvé sur la toile je récupère les ID des commandes
------------------------------------------------------------------------------------------
Sub ShowShortcutMenuItems()
Dim Row As Long
Dim Cbar As CommandBar
Dim ctl As CommandBarControl
Range("A1:G1") = Array("Index", "Name", "ID", "Caption", "Type",
"Enabled", "Visible")
Row = 2
Application.ScreenUpdating = False
For Each Cbar In Application.CommandBars
If Cbar.Type = 2 Then
For Each ctl In Cbar.Controls
Cells(Row, 1) = Cbar.Index
Cells(Row, 2) = Cbar.Name
Cells(Row, 3) = ctl.ID
Cells(Row, 4) = ctl.Caption
If ctl.Type = 1 Then
Cells(Row, 5) = "Button"
Else
Cells(Row, 5) = "Submenu"
End If
Cells(Row, 6) = ctl.Enabled
Cells(Row, 7) = ctl.Visible
Row = Row + 1
Next ctl
End If
Next Cbar
ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion,
, xlYes).Name = "Table1"
End Sub
---------------------------------------------------------------------------------------------------
Puis ensuite pour griser une commande du menu contextuel des onglets
comme par exemple "Visualiser le code"
--------------------------------------------------------------------
Sub test3()
With Application.CommandBars("Ply")
Set Ctrl = .FindControl(ID:=1561)
Ctrl.Enabled = False
Set Ctrl = Nothing
End With
End Sub
------------------------------------------------------------------------
Pour tout remetre en ordre
-------------------------------------------------------------------------
Sub Retablir_All()
With Application
CommandBars("Ply").Reset
CommandBars("Built-in Menus").Reset
End With
End Sub
--------------------------------------------------------------------------
Reste à tester en détails pour voir si pas effets de bord ;-)

Bonne journée.

Loading...