Empêcher utilisation croix de fermeture

tisba35 Messages postés 20 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 30 juillet 2004 - 27 mai 2004 à 11:31
hcthibaut Messages postés 8 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 25 octobre 2010 - 13 sept. 2010 à 18:33
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

Ednour Messages postés 7 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 15:57
'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.
'
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 juin 2010 à 17:18
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

@+
0
Ednour Messages postés 7 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 18:05
Bonsoir,
Je me dépèche d'essayer le code.
En tous cas, Merci
0
Ednour Messages postés 7 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 18:58
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 +
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
18 juin 2010 à 21:19
Bonsoir,
Pourquoi ne pas écrire tout simplement dans le Workbook_Beforeclose :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Cancel = True
End Sub
0
Ednour Messages postés 7 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 18 juin 2010
19 juin 2010 à 13:20
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 +
0
hcthibaut Messages postés 8 Date d'inscription mercredi 25 août 2010 Statut Membre Dernière intervention 25 octobre 2010 1
13 sept. 2010 à 18:33
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
0
Rejoignez-nous