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

Griser bouton

8 réponses
Avatar
Peponne31
Bonjour,

Je voudrais griser le bouton Menu si la feuille Menu est active,
J'ai écris ça:

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then
ControlButton.Enabled = False
Else
.OnAction = ThisWorkbook.Name & "!Macro15"
End If
End With

Mais ça ne fonctionne pas
quelqu'un pourrai me corriger ?
Merci par avance
Peponne31

8 réponses

Avatar
FS
Bonjour,

ControlButton ne semble être défini nulle part et, à mon avis, OnAction
doit être renseigné dans tous les cas (si Enabled est à False on ne
pourra tout simplement pas déclencher la macro associée au bouton).
Donc, essaye avec ces modifs :

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Peponne31 a écrit :
Bonjour,

Je voudrais griser le bouton Menu si la feuille Menu est active,
J'ai écris ça:

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then
ControlButton.Enabled = False
Else
.OnAction = ThisWorkbook.Name & "!Macro15"
End If
End With

Mais ça ne fonctionne pas
quelqu'un pourrai me corriger ?
Merci par avance
Peponne31


Avatar
FS
Autre chose à la relecture : la variable Worksheet est-elle définie
quelque part ? (si non le test If ne sert à rien).

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

FS a écrit :
Bonjour,

ControlButton ne semble être défini nulle part et, à mon avis, OnAction
doit être renseigné dans tous les cas (si Enabled est à False on ne
pourra tout simplement pas déclencher la macro associée au bouton).
Donc, essaye avec ces modifs :

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With

FS


Avatar
michdenis
Bonjour,

| If Worksheet = ("Menu") Then .Enabled = False

Pour aller dans le même sens de Frédéric,

Si Worksheet est une variable, c'est une très mauvaise idée
de choisir une expression du langage VBA comme variable.

Pour définir un objet Worksheet :

Ceci fonctionne, mais change quand même le nom de la variable
'---------------------------------
Sub test()
Dim Worksheet As Worksheet
Set Worksheet = Worksheets("Feuil1") 'Nom Feuille à adapter
With Application.CommandBars(1)
With .Controls.Add(msoControlButton, 1, , , True)
.Style = msoButtonIconAndCaption
.Caption = "&Menu"
If Worksheet.Name = "Menu" Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
End Sub
'---------------------------------



"Peponne31" a écrit dans le message de groupe de
discussion :
Bonjour,

Je voudrais griser le bouton Menu si la feuille Menu est active,
J'ai écris ça:

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then
ControlButton.Enabled = False
Else
.OnAction = ThisWorkbook.Name & "!Macro15"
End If
End With

Mais ça ne fonctionne pas
quelqu'un pourrai me corriger ?
Merci par avance
Peponne31
Avatar
Peponne31
Re,

Je ne parviens pas à l'adapter à l'exemple que m'a créé Michdenis

Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Stl As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
Stl = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar

.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
With .Controls.Add(msoControlPopup, , , , True)
.Style = Stl
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers d'un premier bouton de
commande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2" '<-- procédure à
exécuter
End With
With .Controls.Add(msoControlButton, 1, , , True)
Style = Stl
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
.Visible = True ' Affichage de la nouvelle commandbar
End With
Set MBar = Nothing

End Sub
"michdenis" a écrit :

Bonjour,

| If Worksheet = ("Menu") Then .Enabled = False

Pour aller dans le même sens de Frédéric,

Si Worksheet est une variable, c'est une très mauvaise idée
de choisir une expression du langage VBA comme variable.

Pour définir un objet Worksheet :

Ceci fonctionne, mais change quand même le nom de la variable
'---------------------------------
Sub test()
Dim Worksheet As Worksheet
Set Worksheet = Worksheets("Feuil1") 'Nom Feuille à adapter
With Application.CommandBars(1)
With .Controls.Add(msoControlButton, 1, , , True)
.Style = msoButtonIconAndCaption
.Caption = "&Menu"
If Worksheet.Name = "Menu" Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
End Sub
'---------------------------------



"Peponne31" a écrit dans le message de groupe de
discussion :
Bonjour,

Je voudrais griser le bouton Menu si la feuille Menu est active,
J'ai écris ça:

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then
ControlButton.Enabled = False
Else
.OnAction = ThisWorkbook.Name & "!Macro15"
End If
End With

Mais ça ne fonctionne pas
quelqu'un pourrai me corriger ?
Merci par avance
Peponne31



Avatar
michdenis
Pour tester, c'est une bonne idée de désactiver cette
ligne de code : On Error Resume Next , Cela permet de
voir où se trouve la problématique ! Avant de vouloir
protéger la barre de menu contre toute personnalisation,
débute par la créer !
" .Protection = msoBarNoMove + msoBarNoCustomize"
Elle sert seulement dans le cas où la barre de menu à créer
serait déjà présente.

'----------------------------------------------
Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim StL As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
StL = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop, Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers
'd'un premier bouton decommande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
'procédure à exécuter
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Style = StL
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub
'----------------------------------------------



"Peponne31" a écrit dans le message de groupe de
discussion :
Re,

Je ne parviens pas à l'adapter à l'exemple que m'a créé Michdenis

Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Stl As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
Stl = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar

.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
With .Controls.Add(msoControlPopup, , , , True)
.Style = Stl
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers d'un premier bouton de
commande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2" '<-- procédure à
exécuter
End With
With .Controls.Add(msoControlButton, 1, , , True)
Style = Stl
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
.Visible = True ' Affichage de la nouvelle commandbar
End With
Set MBar = Nothing

End Sub
"michdenis" a écrit :

Bonjour,

| If Worksheet = ("Menu") Then .Enabled = False

Pour aller dans le même sens de Frédéric,

Si Worksheet est une variable, c'est une très mauvaise idée
de choisir une expression du langage VBA comme variable.

Pour définir un objet Worksheet :

Ceci fonctionne, mais change quand même le nom de la variable
'---------------------------------
Sub test()
Dim Worksheet As Worksheet
Set Worksheet = Worksheets("Feuil1") 'Nom Feuille à adapter
With Application.CommandBars(1)
With .Controls.Add(msoControlButton, 1, , , True)
.Style = msoButtonIconAndCaption
.Caption = "&Menu"
If Worksheet.Name = "Menu" Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
End Sub
'---------------------------------



"Peponne31" a écrit dans le message de groupe de
discussion :
Bonjour,

Je voudrais griser le bouton Menu si la feuille Menu est active,
J'ai écris ça:

With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Worksheet = ("Menu") Then
ControlButton.Enabled = False
Else
.OnAction = ThisWorkbook.Name & "!Macro15"
End If
End With

Mais ça ne fonctionne pas
quelqu'un pourrai me corriger ?
Merci par avance
Peponne31



Avatar
Peponne31
Re

J'ai épuré le code, magré ça le bouton n'est toujours pas grisé. Ce que je
veux faire c'est, dans le bouton Fichier, sous le bouton Quitter Excel,
placer le bouton Menu, ce bouton doit ètre non grisé si je suis dans une
autre Feuille que la feuille Menu de manière à pouvoir revenir sur
menu et grisé quand je suis dans la feuille Menu.

ActuSub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
On Error Resume Next
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub

Sub Supp_Barre()
Application.CommandBars("Denis").Delete
End Subellement avec l'aide de Michdenis jen suis là:

Merci encore pour votre aide j'en ai bien besoin.
Peponne31

"michdenis" a écrit :

Pour tester, c'est une bonne idée de désactiver cette
ligne de code : On Error Resume Next , Cela permet de
voir où se trouve la problématique ! Avant de vouloir
protéger la barre de menu contre toute personnalisation,
débute par la créer !
" .Protection = msoBarNoMove + msoBarNoCustomize"
Elle sert seulement dans le cas où la barre de menu à créer
serait déjà présente.

'----------------------------------------------
Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim StL As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
StL = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop, Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers
'd'un premier bouton decommande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
'procédure à exécuter
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Style = StL
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub
'----------------------------------------------



"Peponne31" a écrit dans le message de groupe de
discussion :
Re,

Je ne parviens pas à l'adapter à l'exemple que m'a créé Michdenis

Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Stl As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
Stl = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar

.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
With .Controls.Add(msoControlPopup, , , , True)
.Style = Stl
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers d'un premier bouton de
commande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2" '<-- procédure à
exécuter
End With
With .Controls.Add(msoControlButton, 1, , , True)
Style = Stl
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
.Visible = True ' Affichage de la nouvelle commandbar
End With
Set MBar = Nothing

End Sub
"michdenis" a écrit :

> Bonjour,
>
> | If Worksheet = ("Menu") Then .Enabled = False
>
> Pour aller dans le même sens de Frédéric,
>
> Si Worksheet est une variable, c'est une très mauvaise idée
> de choisir une expression du langage VBA comme variable.
>
> Pour définir un objet Worksheet :
>
> Ceci fonctionne, mais change quand même le nom de la variable
> '---------------------------------
> Sub test()
> Dim Worksheet As Worksheet
> Set Worksheet = Worksheets("Feuil1") 'Nom Feuille à adapter
> With Application.CommandBars(1)
> With .Controls.Add(msoControlButton, 1, , , True)
> .Style = msoButtonIconAndCaption
> .Caption = "&Menu"
> If Worksheet.Name = "Menu" Then .Enabled = False
> .OnAction = ThisWorkbook.Name & "!Macro15"
> End With
> End With
> End Sub
> '---------------------------------
>
>
>
> "Peponne31" a écrit dans le message de groupe de
> discussion :
> Bonjour,
>
> Je voudrais griser le bouton Menu si la feuille Menu est active,
> J'ai écris ça:
>
> With .Controls.Add(msoControlButton, 1, , , True)
> .Caption = "&Menu"
> If Worksheet = ("Menu") Then
> ControlButton.Enabled = False
> Else
> .OnAction = ThisWorkbook.Name & "!Macro15"
> End If
> End With
>
> Mais ça ne fonctionne pas
> quelqu'un pourrai me corriger ?
> Merci par avance
> Peponne31
>



Avatar
michdenis
ça c'est pour créer ta barre d'outils -> dans un module standard
c'est ma dernière intervention sur ce fil.
Dire que ce l'on veut ne devrait pas prendre 3 jours !
'----------------------------------------------
Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim StL As MsoButtonStyle
StL = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop, Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers
'd'un premier bouton decommande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
'procédure à exécuter
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Style = StL
.Caption = "&Menu"
If ActiveSheet.Name = "Menu" Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub
'----------------------------------------------

et dans le ThisWorkbook, tu colles ceci :
'------------------------------------------------
Private Sub Workbook_Open()
CreateCustomCommandBar
End Sub
'------------------------------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

With Application.CommandBars("Denis").Controls(1).Controls("Menu")
If UCase(Sh.Name) = "MENU" Then
.Enabled = True
Else
.Enabled = False
End If
End With

End Sub
'------------------------------------------------


"Peponne31" a écrit dans le message de groupe de
discussion :
Re

J'ai épuré le code, magré ça le bouton n'est toujours pas grisé. Ce que je
veux faire c'est, dans le bouton Fichier, sous le bouton Quitter Excel,
placer le bouton Menu, ce bouton doit ètre non grisé si je suis dans une
autre Feuille que la feuille Menu de manière à pouvoir revenir sur
menu et grisé quand je suis dans la feuille Menu.

ActuSub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
On Error Resume Next
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub

Sub Supp_Barre()
Application.CommandBars("Denis").Delete
End Subellement avec l'aide de Michdenis jen suis là:

Merci encore pour votre aide j'en ai bien besoin.
Peponne31

"michdenis" a écrit :

Pour tester, c'est une bonne idée de désactiver cette
ligne de code : On Error Resume Next , Cela permet de
voir où se trouve la problématique ! Avant de vouloir
protéger la barre de menu contre toute personnalisation,
débute par la créer !
" .Protection = msoBarNoMove + msoBarNoCustomize"
Elle sert seulement dans le cas où la barre de menu à créer
serait déjà présente.

'----------------------------------------------
Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim StL As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
StL = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop, Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers
'd'un premier bouton decommande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
'procédure à exécuter
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Style = StL
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub
'----------------------------------------------



"Peponne31" a écrit dans le message de groupe de
discussion :
Re,

Je ne parviens pas à l'adapter à l'exemple que m'a créé Michdenis

Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Stl As MsoButtonStyle
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
Stl = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar

.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
With .Controls.Add(msoControlPopup, , , , True)
.Style = Stl
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers d'un premier bouton de
commande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2" '<-- procédure à
exécuter
End With
With .Controls.Add(msoControlButton, 1, , , True)
Style = Stl
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
.Visible = True ' Affichage de la nouvelle commandbar
End With
Set MBar = Nothing

End Sub
"michdenis" a écrit :

> Bonjour,
>
> | If Worksheet = ("Menu") Then .Enabled = False
>
> Pour aller dans le même sens de Frédéric,
>
> Si Worksheet est une variable, c'est une très mauvaise idée
> de choisir une expression du langage VBA comme variable.
>
> Pour définir un objet Worksheet :
>
> Ceci fonctionne, mais change quand même le nom de la variable
> '---------------------------------
> Sub test()
> Dim Worksheet As Worksheet
> Set Worksheet = Worksheets("Feuil1") 'Nom Feuille à adapter
> With Application.CommandBars(1)
> With .Controls.Add(msoControlButton, 1, , , True)
> .Style = msoButtonIconAndCaption
> .Caption = "&Menu"
> If Worksheet.Name = "Menu" Then .Enabled = False
> .OnAction = ThisWorkbook.Name & "!Macro15"
> End With
> End With
> End Sub
> '---------------------------------
>
>
>
> "Peponne31" a écrit dans le message de groupe de
> discussion :
> Bonjour,
>
> Je voudrais griser le bouton Menu si la feuille Menu est active,
> J'ai écris ça:
>
> With .Controls.Add(msoControlButton, 1, , , True)
> .Caption = "&Menu"
> If Worksheet = ("Menu") Then
> ControlButton.Enabled = False
> Else
> .OnAction = ThisWorkbook.Name & "!Macro15"
> End If
> End With
>
> Mais ça ne fonctionne pas
> quelqu'un pourrai me corriger ?
> Merci par avance
> Peponne31
>



Avatar
Peponne31
Re

Merci pour ton aide j'ai fini par comprendre ton code, mon erreur venait du
fait
que mon bouton était en second rang d'ou .Controls(2)
merci encore je vais essayer d'ètre plus clair dans mes demande pour éviter
la perde de temps en compréhention
Merci et bonne soirée
Peponne31

"michdenis" a écrit :

ça c'est pour créer ta barre d'outils -> dans un module standard
c'est ma dernière intervention sur ce fil.
Dire que ce l'on veut ne devrait pas prendre 3 jours !
'----------------------------------------------
Sub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim StL As MsoButtonStyle
StL = msoButtonCaption
On Error Resume Next
Application.CommandBars("Denis").Delete
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop, Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
' insertion dans le sous-menu Fichiers
'd'un premier bouton decommande
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
'procédure à exécuter
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Style = StL
.Caption = "&Menu"
If ActiveSheet.Name = "Menu" Then .Enabled = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub
'----------------------------------------------

et dans le ThisWorkbook, tu colles ceci :
'------------------------------------------------
Private Sub Workbook_Open()
CreateCustomCommandBar
End Sub
'------------------------------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

With Application.CommandBars("Denis").Controls(1).Controls("Menu")
If UCase(Sh.Name) = "MENU" Then
.Enabled = True
Else
.Enabled = False
End If
End With

End Sub
'------------------------------------------------


"Peponne31" a écrit dans le message de groupe de
discussion :
Re

J'ai épuré le code, magré ça le bouton n'est toujours pas grisé. Ce que je
veux faire c'est, dans le bouton Fichier, sous le bouton Quitter Excel,
placer le bouton Menu, ce bouton doit ètre non grisé si je suis dans une
autre Feuille que la feuille Menu de manière à pouvoir revenir sur
menu et grisé quand je suis dans la feuille Menu.

ActuSub CreateCustomCommandBar()
Dim MBar As CommandBar
Dim Feuille As Worksheet
Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
On Error Resume Next
Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
Temporary:=True)
With MBar
With .Controls.Add(msoControlPopup, , , , True)
.Caption = "Fichier" '<-- label du bouton
.Tag = "MyTag"
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Quitter Excel" '<-- label du bouton
.OnAction = ThisWorkbook.Name & "!Macro2"
End With
With .Controls.Add(msoControlButton, 1, , , True)
.Caption = "&Menu"
If Feuille.Name = "Menu" Then .Enable = False
.OnAction = ThisWorkbook.Name & "!Macro15"
End With
End With
.Visible = True
.Protection = msoBarNoMove + msoBarNoCustomize
End With
Set MBar = Nothing
End Sub

Sub Supp_Barre()
Application.CommandBars("Denis").Delete
End Subellement avec l'aide de Michdenis jen suis là:

Merci encore pour votre aide j'en ai bien besoin.
Peponne31

"michdenis" a écrit :

> Pour tester, c'est une bonne idée de désactiver cette
> ligne de code : On Error Resume Next , Cela permet de
> voir où se trouve la problématique ! Avant de vouloir
> protéger la barre de menu contre toute personnalisation,
> débute par la créer !
> " .Protection = msoBarNoMove + msoBarNoCustomize"
> Elle sert seulement dans le cas où la barre de menu à créer
> serait déjà présente.
>
> '----------------------------------------------
> Sub CreateCustomCommandBar()
> Dim MBar As CommandBar
> Dim StL As MsoButtonStyle
> Dim Feuille As Worksheet
> Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
> StL = msoButtonCaption
> On Error Resume Next
> Application.CommandBars("Denis").Delete
> Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop, Temporary:=True)
> With MBar
> With .Controls.Add(msoControlPopup, , , , True)
> .Caption = "Fichier" '<-- label du bouton
> .Tag = "MyTag"
> ' insertion dans le sous-menu Fichiers
> 'd'un premier bouton decommande
> With .Controls.Add(msoControlButton, 1, , , True)
> .Caption = "&Quitter Excel" '<-- label du bouton
> 'procédure à exécuter
> .OnAction = ThisWorkbook.Name & "!Macro2"
> End With
> With .Controls.Add(msoControlButton, 1, , , True)
> .Style = StL
> .Caption = "&Menu"
> If Feuille.Name = "Menu" Then .Enable = False
> .OnAction = ThisWorkbook.Name & "!Macro15"
> End With
> End With
> .Visible = True
> .Protection = msoBarNoMove + msoBarNoCustomize
> End With
> Set MBar = Nothing
> End Sub
> '----------------------------------------------
>
>
>
> "Peponne31" a écrit dans le message de groupe de
> discussion :
> Re,
>
> Je ne parviens pas à l'adapter à l'exemple que m'a créé Michdenis
>
> Sub CreateCustomCommandBar()
> Dim MBar As CommandBar
> Dim Stl As MsoButtonStyle
> Dim Feuille As Worksheet
> Set Feuille = Worksheets("Menu") 'Nom Feuille à adapter
> Stl = msoButtonCaption
> On Error Resume Next
> Application.CommandBars("Denis").Delete
> Set MBar = Application.CommandBars.Add("Denis", Position:=msoBarTop,
> Temporary:=True)
> With MBar
>
> .Visible = True
> .Protection = msoBarNoMove + msoBarNoCustomize
> With .Controls.Add(msoControlPopup, , , , True)
> .Style = Stl
> .Caption = "Fichier" '<-- label du bouton
> .Tag = "MyTag"
> ' insertion dans le sous-menu Fichiers d'un premier bouton de
> commande
> With .Controls.Add(msoControlButton, 1, , , True)
> .Caption = "&Quitter Excel" '<-- label du bouton
> .OnAction = ThisWorkbook.Name & "!Macro2" '<-- procédure à
> exécuter
> End With
> With .Controls.Add(msoControlButton, 1, , , True)
> Style = Stl
> .Caption = "&Menu"
> If Feuille.Name = "Menu" Then .Enable = False
> .OnAction = ThisWorkbook.Name & "!Macro15"
> End With
> .Visible = True ' Affichage de la nouvelle commandbar
> End With
> Set MBar = Nothing
>
> End Sub
> "michdenis" a écrit :
>
> > Bonjour,
> >
> > | If Worksheet = ("Menu") Then .Enabled = False
> >
> > Pour aller dans le même sens de Frédéric,
> >
> > Si Worksheet est une variable, c'est une très mauvaise idée
> > de choisir une expression du langage VBA comme variable.
> >
> > Pour définir un objet Worksheet :
> >
> > Ceci fonctionne, mais change quand même le nom de la variable
> > '---------------------------------
> > Sub test()
> > Dim Worksheet As Worksheet
> > Set Worksheet = Worksheets("Feuil1") 'Nom Feuille à adapter
> > With Application.CommandBars(1)
> > With .Controls.Add(msoControlButton, 1, , , True)
> > .Style = msoButtonIconAndCaption
> > .Caption = "&Menu"
> > If Worksheet.Name = "Menu" Then .Enabled = False
> > .OnAction = ThisWorkbook.Name & "!Macro15"
> > End With
> > End With
> > End Sub
> > '---------------------------------
> >
> >
> >
> > "Peponne31" a écrit dans le message de groupe de
> > discussion :
> > Bonjour,
> >
> > Je voudrais griser le bouton Menu si la feuille Menu est active,
> > J'ai écris ça:
> >
> > With .Controls.Add(msoControlButton, 1, , , True)
> > .Caption = "&Menu"
> > If Worksheet = ("Menu") Then
> > ControlButton.Enabled = False
> > Else
> > .OnAction = ThisWorkbook.Name & "!Macro15"
> > End If
> > End With
> >
> > Mais ça ne fonctionne pas
> > quelqu'un pourrai me corriger ?
> > Merci par avance
> > Peponne31
> >
>