Cacher la croix de fermeture de l'aplication en cours (excel) [Résolu]

Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
- - Dernière réponse : babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
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
Afficher la suite 

Votre réponse

10 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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) ?

Commenter la réponse de ucfoutu
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
0
Merci
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
Commenter la réponse de babu26
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
0
Merci
Je n'ai pas la réponse, mais je pense que ta version d'Excel peut être importante ...
Commenter la réponse de cs_MPi
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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 !


Commenter la réponse de ucfoutu
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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
cs_Le Pivert
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
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
@+
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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).
babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
> ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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
Commenter la réponse de ucfoutu
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
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

babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
-
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
babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
-
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.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
> babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
-
tu as lu ma réponse précédente ? Et la discussion à laquelle elle renvoie ?
Fais-le donc !
Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
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!
Commenter la réponse de cs_Le Pivert
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
0
Merci
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
Commenter la réponse de babu26

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.