Comment puis-je empêcher l'utilisation de la case de fermeture (la croix)
dans Excel et obliger l'utilisateur de choisir Ficher / Fermer ? Est-ce
possible ?
Merci
Jean-Marie Lambert
http://perso.fundp.ac.be/~jmlamber
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
anonymousA
Bonjour,
Pour la croix de fermeture d'Excel lui-même.S'il s'agit seulement de la croix de fermeture du fichier , utiliser Outils/Protection/Protéger Classeur et coher Fenêtres.
'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
A+
Bonjour,
Pour la croix de fermeture d'Excel lui-même.S'il s'agit seulement de
la croix de fermeture du fichier , utiliser Outils/Protection/Protéger
Classeur et coher Fenêtres.
'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
Pour la croix de fermeture d'Excel lui-même.S'il s'agit seulement de la croix de fermeture du fichier , utiliser Outils/Protection/Protéger Classeur et coher Fenêtres.
'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
A+
Jean-Marie Lambert
Bonjour,
Merci pour votre réponse.
J-M
Bonjour,
Pour la croix de fermeture d'Excel lui-même.S'il s'agit seulement de la croix de fermeture du fichier , utiliser Outils/Protection/Protéger Classeur et coher Fenêtres.
'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
A+
Bonjour,
Merci pour votre réponse.
J-M
Bonjour,
Pour la croix de fermeture d'Excel lui-même.S'il s'agit seulement de
la croix de fermeture du fichier , utiliser Outils/Protection/Protéger
Classeur et coher Fenêtres.
'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
Pour la croix de fermeture d'Excel lui-même.S'il s'agit seulement de la croix de fermeture du fichier , utiliser Outils/Protection/Protéger Classeur et coher Fenêtres.
'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