Cacher la croix de fermeture de l'aplication en cours (excel)

Résolu
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015 - 9 déc. 2014 à 17:11
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015 - 12 déc. 2014 à 10:51
Bonjour,
En VB6 , j'avais résolu ce problème... mais je ne peux plus accéder à ces sources.
Je trouve bien des réponses dans le forum, apparemment inexploitables (ou plutôt non comprises?).
As-tu une solution précise ? Merci et A+. Bab

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 déc. 2014 à 17:49
Bonjour,
Quelle réponse inexploitable as-tu trouvée ?
De quelle croix de" fermeture s'agit-il ? Celle de Excel ou celle d'un userform (car réponse différente dans un cas et dans l'autre) ?

0
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015
9 déc. 2014 à 20:46
Bonsoir
Celle d'Excel (X blanc dans un carré rouge).
Ce que j'ai pu voir concernait probablement la fermeture d'un UserForm.
merci. Bab
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
9 déc. 2014 à 21:43
Je n'ai pas la réponse, mais je pense que ta version d'Excel peut être importante ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
9 déc. 2014 à 22:05
J'ai la réponse, mais la tienne, à savoir :
Celle d'Excel (X blanc dans un carré rouge).

me laisse perplexe.
Chez moi : la croix de fermeture de EXCEL n'est pas blanche dans un carré rouge.
C'est celle d'un Userform, qui l'est.
Alors : es-tu certain de ce que tu veux ? La supprimer d'un UserForm ou la supprimer de ta feuille de calcul ???
Re-précise, s'il te plait !


0

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

Posez votre question
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
10 déc. 2014 à 13:32
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
10 déc. 2014 à 20:27
Le code du lien montré supprime la croix de fermeture du classeur mais ne supprime pas celle de l'application, ni l'accès au menu Fichier ===>> Fermer, ni au menu Fichier ===>> Quitter Excel.
Il devrait alors logiquement être complété par l'utilisation d'un évènement tel que BeforeClose. On comprendrait alors mal (obligé pour obligé) que l'on ne l'invoque pas également lors du clic sur la croix de fermeture du classeur !
On peut s'y prendre autrement (impossibilité totale de fermer tant l'appli que le classeur seul, par des gestes à la portée de l'utilisateur ... par disparition totale des icônes et autres permettant de le faire... ou encore par "confinement" de la souris).
Un tel procédé serait par contre dangereux. Il devrait de surcroît être accompagné d'un mécanisme de "sortie" permettant au développeur de reprendre la main ...(de ne finalement pas s' "enfermer lui-même dehors" !), mécanisme lui-même protégé par un mot de passe.
On s'éloigne là considérablement de la philosophie habituelle d'un tableur
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
10 déc. 2014 à 20:45
Tout a fait d'accord avec toi. De toute façon pour fermer le classeur l'utilisateur peut toujours avoir recours au Gestionnaire de tâche.

PS: je pense que le code a été fait avec Excel 2003 et neutralisé à l'époque la fermeture menu fichier. Ce qui n'est plus valable avec les récentes versions d'Excel
@+
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
10 déc. 2014 à 22:00
Même pas besoin d'aller dans le gestionnaire de tâches. ALT + F4 et voilà !
et même ALT + F puis F (ferme le classeur) et ALT + F puis Q (pour fermer Excel directement).
0
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015 > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
11 déc. 2014 à 15:14
Bonjour, j'ai trouvé une certaine solution, qui invalide l'action du bouton de fermeture, mais elle ne cache pas totalement.
C'est un pas en avant.
Ci-dessous la solution de SuBEndSub :

'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+, si tu as mieux, car ceci date de 2009, je crois. Bab
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
11 déc. 2014 à 15:25
Tu n'as pas été a la fin de la page du lien que je t'ai donné. Tu aurais trouvé cela, beaucoup plus court:


Option Explicit
'Comment peut on desactiver les 3 icones (réduire, restaurer,fermer) ainsi
'que l'icone en haut à gauche d'une application excel  afin d'empêcher
'l'utilisateur de fermer Excel autrement que par un bouton prévu à cet effet ?
'(Laurent Longre)

Private Declare Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetWindowLongA Lib "User32" _
  (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "User32" _
  (ByVal hwnd As Long, ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
Private Sub CommandButton1_Click() 'pour désactiver
Dim hwnd As Long
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub
Private Sub CommandButton2_Click() 'pour remettre dans l'état initial
Dim hwnd As Long
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
End Sub

0
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015
12 déc. 2014 à 09:44
Salut. Depuis l'essai que j'ai exécuté, aucun objet n'est reconnu et aucun objet ne peut être ajouté.
Je suis planté, comme mon classeur. Que faire ? Bab
0
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015
12 déc. 2014 à 10:01
Re-salut
Je constate qu'ajouter des objets, tels des boutons, n'est même plus possible en ouvrant ou créant d'autres classeurs.Merci pour un éclaircissement afin de rétablir les fonctionnalités initiales.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219 > babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015
Modifié par ucfoutu le 12/12/2014 à 10:21
tu as lu ma réponse précédente ? Et la discussion à laquelle elle renvoie ?
Fais-le donc !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
12 déc. 2014 à 09:49
Salut babu26,
Welcome to the club (tu es le 1er de ceux que j'attendais)
Rien à voir avec ton essai (MDR)
Va lire cette discussion. Tu y as la solution à tes malheurs.
http://codes-sources.commentcamarche.net/forum/affich-10040792-un-cadeau-empoisonne-de-microdaube-bug-maj-office
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
12 déc. 2014 à 09:52
babu26,

J'ai trouvé ceci qui est très intéressant. Cela neutralise toutes les fermetures. Tu as un fichier a télécharger:

http://www.excel-downloads.com/forum/214683-vba-empecher-la-fermeture-dexcel.html

PS sauf le gestionnaire de tâche!
0
babu26 Messages postés 44 Date d'inscription samedi 8 juin 2013 Statut Membre Dernière intervention 21 janvier 2015
12 déc. 2014 à 10:51
Salut encore.
Après suppression de la MàJ KB2596927, ça marche pour mes objets. Merci
Quant à la ferture du classeur, j'ai appliqué cette solution :
ajout de Public ChoixArret as Boolean dans mon Module principal
ajout de ChoixArret = True dans Sub Workbook_Open()
ajout de If ChoixArret = True Then Cancel = True dans Sub Workbook_BeforeClose(Cancel As Boolean)

Pb. résolu, merci encore. Bab
-1