Empêcher utilisation croix de fermeture

Signaler
Messages postés
20
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2004
-
Messages postés
8
Date d'inscription
mercredi 25 août 2010
Statut
Membre
Dernière intervention
25 octobre 2010
-
Bonjour,

comment faut-il faire sous excel pour empêcher l'utilisation du bouton croix(en haut à doite) pour fermer le fichier excel?

TISBA35

7 réponses

Messages postés
7
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
18 juin 2010

'Bonsoie
'Voici la solution, à partir d'infos récupérées par ci par là...

'Partie Déclarations du module
Option Explicit
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal handleW1 As Long, _
ByVal handleW1InsertWhere As Long, ByVal w As Long, _
ByVal x As Long, ByVal y As Long, ByVal z As Long, _
ByVal wFlags As Long) As Long
'--------------------------------------------------
'Supprimer les croix Agrandir, Restaurer, Fermer et l'icônr Excel
'Procédure appelée à l'ouverture du classeur par Auto_open() par exemple
'ou par Private Sub Workbook_Open() dans ThisWorkbook
Sub Supprime_Icones_sys()
Dim hwnd As Long
hwnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub
'--------------------------------------------------
'Restaurer les croix Agrandir, Restaurer, Fermer et l'icône Excel
'Procédure appelée lors de la fermeture du classeur
'Par exemple par Private Sub Workbook_BeforeClose(Cancel As Boolean)
'dans ThisWorkbook
Sub Restaure_Icones_sys()
Dim hwnd As Long
hwnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
End Sub
'-------------------------------------------------
'FIN DU CODE
'Pour toute mes applications, ça marche.
'Le seul inconvenient, c'est la disparition de l'icône Excel de la barre
'de titres. J'ai eu quelques tuyaux, des bouts de code,
'mais ça ne marche toujours pas.
'
Messages postés
7612
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
128
Bonjour,
Cela peut vous intéresser tous les 2, car l'icone Excel reste présente.
Trouvé sur le site:
http://frederic.sigonneau.free.fr/code/Bricolos/DesactiverMenuSystemeXL.txt

'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

@+
Messages postés
7
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
18 juin 2010

Bonsoir,
Je me dépèche d'essayer le code.
En tous cas, Merci
Messages postés
7
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
18 juin 2010

Bonsoir,
Je viens de tester le code VBA.
Par la macro Auto_open exécutant DisableSystemMenu, seule la croix système est inactive mais visible, ce qui n'est pas génant. Par contre Agrandir, restaurer sont actives.
Par une macro Application.Quitter appelant EnableSystemMenu l'icone Fermer est rétablie.
Je n'ai pas le temps ce soir d'aller plus loin.
A +

Bonsoir,
Pourquoi ne pas écrire tout simplement dans le Workbook_Beforeclose :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Cancel = True
End Sub
Messages postés
7
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
18 juin 2010

Bonjour,
Tout à fait, Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub
Mais, j'ai besoin de rétablir presque toute l'interface Excel par cette macro.
Ma question est "comment désactiver juste Agrandir, Restaurer et Fermer mais pas l'icône Excel, puisque je la remplace par une icône perso" ?
Mon code fait diaraitre les 4 icône et ne me permet pas d'afficher mon icône perso.
Le 2ème code désactive l'icône Fermer, mais pas Agrandir, restaurer.
Merci.
A +
Messages postés
8
Date d'inscription
mercredi 25 août 2010
Statut
Membre
Dernière intervention
25 octobre 2010

Les gars ça marche pas chez moi
Où dois-je placer le code?
Tantôt ça marche mais lorsque je ferme à travers un bouton de commande Excel se plante
Merci de vs dépêcher pour la rpse SVP

Thibaut KACOU, LeDévéloppeur