Onglet

5 réponses
Avatar
Brat'ac
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.

5 réponses

Avatar
MichD
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 :
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.
Avatar
MichD
La commande ".Reset" fait disparaître toutes les commandes de cette barre qui n'appartiennent
pas à Excel d'origine.
MichD
Avatar
Brat'ac
MichD avait énoncé :
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.
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
Avatar
Brat'ac
Brat'ac a pensé très fort :
MichD avait énoncé :
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.

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
Avatar
Brat'ac
Brat'ac avait prétendu :
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:61)
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.