Excel-vba comment désactiver boutons Réduire, Agrandir et Fermer

Signaler
Messages postés
4
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
29 août 2005
-
Messages postés
16295
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2021
-
Bonjour à tous, J'ai une application excel/vba avec plusieurs classeurs ouverts
simultanément. J’ai ma propre barre de menu avec un choix pour fermer l’application.


J’aimerais savoir comment je peux désactiver les boutons Réduire, Agrandir et Fermer


des classeurs ouverts. Et bien sur, les réactiver quand je ferme.


J'ai cherché, mais en vain.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />



Merci à l’avance




Michel

5 réponses

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Lut, je te le serts tel-quel


'Désactiver le menu système d'Excel et les commandes système


'de la fenêtre d'Excel (dont la croix de fermeture)


'permet de choisir précisément ce sur quoi on veut agir...


'(en fin de module une procédure pour tout rétablir)




Private Const MF_BYPOSITION As Long = &H400


Private Const mlNUM_SYS_MENU_ITEMS As Long = 9


Private Declare Function GetSystemMenu Lib "user32" _


( ByVal hWnd As Long , ByVal bRevert As Long ) As Long


Private Declare Function DeleteMenu Lib "user32" _


( ByVal hMenu As Long , ByVal nPosition As Long , _


ByVal wFlags As Long ) As Long


Private Declare Function FindWindowA Lib "user32" _


( ByVal lpClassName As String , ByVal lpWindowName _


As String ) As Long




'Vasant Nanavati, Andrew Baker (mpep), fs




Public Sub DisableSystemMenu()


Dim lHandle As Long , lCount As Long




On Error Resume Next


lHandle = FindWindowA(vbNullString, Application.Caption)


If lHandle <> 0 Then




'désactive la croix de fermeture d'Excel


'et la commande Fermeture du menu système


DeleteMenu GetSystemMenu (lHandle, False ), 6 , &H400


'supprime le trait de séparation du menu système avant Fermeture


DeleteMenu GetSystemMenu (lHandle, False ), 5 , &H400


'supprime la commande Agrandissement du menu système


'et la commande Agrandir de la fenêtre


DeleteMenu GetSystemMenu (lHandle, False ), 4 , &H400


'supprime la commande Réduction du menu système


'et désactive la commande Réduire de la fenêtre


DeleteMenu GetSystemMenu (lHandle, False ), 3 , &H400


'désactive la commande Déplacement du menu système


DeleteMenu GetSystemMenu (lHandle, False ), 2 , &H400


'supprime la commande Déplacement du menu système


'et désactive la commande Dimension


DeleteMenu GetSystemMenu (lHandle, False ), 1 , &H400


'supprime la commande Restauration du menu système


'et désactive la commande Restaurer de la fenêtre


DeleteMenu GetSystemMenu (lHandle, False ), 0 , &H400




End If


End Sub




'rétablit le menu sytème et les commandes de fenêtre (Réduire, Agrandir, Fermer)


Public Sub EnableSystemMenu()


Dim lHandle As Long


On Error Resume Next


lHandle = FindWindowA(vbNullString, Application.Caption)


GetSystemMenu lHandle, True


End Sub

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
8
Date d'inscription
mercredi 25 août 2010
Statut
Membre
Dernière intervention
25 octobre 2010

Mais ça ne marche pas chez moi je pense qu'il faut trouver d'autres astuces pour moi svp
merci
Thibaut KACOU, LeDévéloppeur
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Bonjour,
Ce code est éprouvé donc t'as du faire une bourde quelque part.
Il n'est pas de moi, mais je l'ai déjà utilisé.

Cordialement, Jean-Paul
______________________________________________________________________
Le Savoir n'a de valeur que s'il est partagé
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

comprend bien que ton besoin n'existe pas dans excel en tout cas pas de façon simple.

valtrase ta donné la methodes la plus simple. Il suffit pour l'utiliser de coller le code dans un module

puis de faire appel à la macro "DisableSystemMenu" à l'ouverture de ton fichier via l'evenement "Workbook_Open"

Enfin de ne pas oublier de retablire la situation avec la macro "EnableSystemMenu" et ce via l'evenement

"Workbook_BeforeClose".

A+
Messages postés
3
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
20 janvier 2014

chercher dans le code du form au maximizebox et donner lui le valeur false
Messages postés
16295
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2021
563
Bonsoir, la question remonte à 2005, merci de vouloir aider, mais on peut espérer que la réponse a été trouvée depuis.
Je déplace vers VBA