OVH Cloud OVH Cloud

Inhiber la croix Fermer

4 réponses
Avatar
StDonat
Bonjour,
Je sais, grace au forum, qu'il est possible d'inhiber "la croix de
fermeture" d'un Userform, mais est-il possible de faire de même avec celle de
la fenetre d'Excel ?
Si oui, cela reste-t-il possible si plusieur fichiers sont ouverts?

4 réponses

Avatar
ChrisV
Bonjour StDonat,

Dans la feuille de code de ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = Not bye
End Sub

Dans un module:

Public bye As Boolean

Sub Quitter()
'à associer à un bouton de commande, une icone de BO pers, etc...
bye = True
ThisWorkbook.Close
End Sub


ChrisV


"StDonat" a écrit dans le message de
news:
Bonjour,
Je sais, grace au forum, qu'il est possible d'inhiber "la croix de
fermeture" d'un Userform, mais est-il possible de faire de même avec celle
de
la fenetre d'Excel ?
Si oui, cela reste-t-il possible si plusieur fichiers sont ouverts?


Avatar
StDonat
Merci ChrisV,
J'essaye cela tout de suite


Bonjour StDonat,

Dans la feuille de code de ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = Not bye
End Sub

Dans un module:

Public bye As Boolean

Sub Quitter()
'à associer à un bouton de commande, une icone de BO pers, etc...
bye = True
ThisWorkbook.Close
End Sub


ChrisV


"StDonat" a écrit dans le message de
news:
Bonjour,
Je sais, grace au forum, qu'il est possible d'inhiber "la croix de
fermeture" d'un Userform, mais est-il possible de faire de même avec celle
de
la fenetre d'Excel ?
Si oui, cela reste-t-il possible si plusieur fichiers sont ouverts?







Avatar
StDonat
Re Bonjour,mais j'ai essayé ton code et pour moi il ne marche pas!
Si j'ai un seul classeur d'ouvert (donc forcément celui ou j'ai mis ton
code) le bouton n me permet pas de quitter excel!
Si j'ai 2 fichiers ouverts et que je clique sur la croix lorsque le fichier
qui ne contient pas le code est actif, Excel se ferme sans broncher!!
Sniff....


Bonjour StDonat,

Dans la feuille de code de ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = Not bye
End Sub

Dans un module:

Public bye As Boolean

Sub Quitter()
'à associer à un bouton de commande, une icone de BO pers, etc...
bye = True
ThisWorkbook.Close
End Sub


ChrisV


"StDonat" a écrit dans le message de
news:
Bonjour,
Je sais, grace au forum, qu'il est possible d'inhiber "la croix de
fermeture" d'un Userform, mais est-il possible de faire de même avec celle
de
la fenetre d'Excel ?
Si oui, cela reste-t-il possible si plusieur fichiers sont ouverts?







Avatar
michdenis
Bonjour St-Donat,

Il y a ceci :

'Haut d'un module standard, déclaration des API
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) 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 EnableWindow Lib "user32" (ByVal hWnd As Long, _
ByVal fEnable As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) _
As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _
ByVal bRevert As Long) As Long
Private Const SC_CLOSE As Long = &HF060


Aussi dans un module standard, ces procédures :
'--------------------------
Sub SupprimerBoutonFermeture()

Dim myhWnd As Long, hMenu As Long

'Supprime la petite croix
myhWnd = FindWindow("XLMAIN", Application.Caption)
hMenu = GetSystemMenu(myhWnd, 0)
DeleteMenu hMenu, SC_CLOSE, 0&
DrawMenuBar myhWnd

'En option :
'Change le menu exit (ou quitter) de l'appli
Application.CommandBars("Worksheet Menu Bar") _
.Controls(1).Controls("&Quitter").OnAction = "Fermer"
'Lorsque tu cliqueras sur l'item Quitter du menu
'Fichier, tu auras le message
'défini dans la procédure Zaza au lieu de l'action "fermeture"
End Sub
'--------------------------
Sub RestaurerBoutonFermeture()

Dim myhWnd As Long, hMenu As Long

'Remet la petite croix
myhWnd = FindWindow("XLMAIN", Application.Caption)
hMenu = GetSystemMenu(myhWnd, 1)
DrawMenuBar myhWnd

'Réinitialise le menu quitter
Application.CommandBars("Worksheet Menu Bar") _
.Controls(1).Controls("&Quitter").Reset
End Sub


'Dans un module standard :
'--------------------------
Sub Fermer()
MsgBox "Sortie Interdite pour l'instant."
End Sub
'--------------------------


Et à partir des événements du ThisWorkboo : Activate , Désactivate, Workbook_BeforeClose, il te reste à appeler
les procédures qui activent ou désactivent le X du menu selon ce que tu veux réaliser.

Si ceci doit s'appliquer à l'ensemble de tous les classeurs que tu ouvres, tu dois utiliser soit ton Classeur "Perso.xls" ou
avoir recours à un fichier de type .xla (macro complémentaire).

À cet effet, as-tu essayé la suggestion de ChrisV dans ton classeur perso.xls.


Salutations!








"StDonat" a écrit dans le message de news:
Bonjour,
Je sais, grace au forum, qu'il est possible d'inhiber "la croix de
fermeture" d'un Userform, mais est-il possible de faire de même avec celle de
la fenetre d'Excel ?
Si oui, cela reste-t-il possible si plusieur fichiers sont ouverts?