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

babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 9 déc. 2014 à 17:11 - Dernière réponse : babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention
- 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 

16 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 déc. 2014 à 17:49
0
Utile
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
babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 9 déc. 2014 à 20:46
0
Utile
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
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 9 déc. 2014 à 21:43
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 déc. 2014 à 22:05
0
Utile
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
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 10 déc. 2014 à 13:32
Commenter la réponse de cs_Le Pivert
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 10 déc. 2014 à 20:27
0
Utile
3
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 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 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
@+
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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).
babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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
Commenter la réponse de ucfoutu
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 11 déc. 2014 à 15:25
0
Utile
3
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 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 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
babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 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.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 12 déc. 2014 à 10:05
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 12 déc. 2014 à 09:49
0
Utile
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
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 12 déc. 2014 à 09:52
0
Utile
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
babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 12 déc. 2014 à 10:51
0
Utile
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.