Désactiver les icones réduire restaurer fermer d'excel

Comment peut on désactiver les 3 icones (réduire, restaurer,fermer) ainsi que l'icone en haut à gauche d'une application excel afin d'empêcher l'utilisateur de fermer Excel autrement que par un bouton prévu à cet effet ?

Dans le module ThisWorkbook de l'application :

Private Declare Function FindWindowA Lib "User32" _  
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
Private Declare Function GetWindowLongA Lib "User32" _ 
(ByVal hwnd As Long, ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLongA Lib "User32" _  
(ByVal hwnd As Long, ByVal nIndex As Long, _ 
ByVal dwNewLong As Long) As Long 

Private sub Workbook_BeforeClose(Cancel As Boolean)
 Dim hwnd As Long
 hwnd = FindWindowA(vbNullString, Application.Caption)
 SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
 end sub
Private sub Workbook_Open()
 Dim hwnd As Long
 hwnd = FindWindowA(vbNullString, Application.Caption)
 SetWindowLongA hwnd, -16,
 GetWindowLongA(hwnd, -16) And &HFFF7FFFF
 end sub

Et pour choisir précisément ce sur quoi on veut agir...

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

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

Auteurs : , , ,

Mots clefs associés à cette page : , , , ,