'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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = True End Sub