Griser bouton

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FS
Le #20165131
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


FS
Le #20165221
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


michdenis
Le #20165361
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" 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
Peponne31
Le #20166001
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" 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



michdenis
Le #20166121
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" 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" 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



Peponne31
Le #20168521
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" 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" > 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
>



michdenis
Le #20169241
ç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" 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" 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" > 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
>



Peponne31
Le #20170371
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" 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" > 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" > > 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
> >
>


Publicité
Poster une réponse
Anonyme