Masquer : Croix rouge de fermeture excel

lyna

XLDnaute Junior
bojour tout le monde :
Après une recherche sur ce site je n'ai pas trouvé de solution à ma question :
est ce que quelqu'un a une idée sur comment masquer la croix rouge de fermeture d'excel et la remettre juste avant de quitter mon appli.

(pas la croix du fichier mais la rouge d'excel)

Merci d'avance pour vos conseils.
 
C

Compte Supprimé 979

Guest
Re : Masquer : Croix rouge de fermeture excel

Bonsoir Lyna,

Tu peux trouver la solution sur le site de Frédéric SIGONNEAU, ici :
Ce site n'existe plus
La rubrique est : Ce site n'existe plus

Voici le code :
Code:
'Dans le module ThisWorkbook de l'application :
'(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 Workbook_BeforeClose(Cancel As Boolean)
  Dim hwnd As Long
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
End Sub

Private Sub Workbook_Open()
  Dim hwnd As Long
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub

Voilà ;)
 

piloulac

XLDnaute Nouveau
Re : Masquer : Croix rouge de fermeture excel

Bruno,

Ce code providentiel me tire une énorme épine du pied.
En effet, j'ai conçu une application qui ouvre plusieurs classeurs dont certains doivent être enregistrés pendant que d'autres ne le doivent surtout pas.
Il est évident que l'utilisation de la petite croix rouge rendait ce projet peu fiable.
Alors, mille merci à toi.:):):)
 

Hulk

XLDnaute Barbatruc
Re : Masquer : Croix rouge de fermeture excel

Hello le Forum, Lyna, Bruno, Piloulac,

Sans macro.

Tu cliques sur "Affichage" en haut et ensuite tu cliques sur "Plein écran".

Quand tu quittes, tu fais pareil.

Via macro, c'est ce que propose Bruno.

Cdt.

Hulk.
 

piloulac

XLDnaute Nouveau
Re : Masquer : Croix rouge de fermeture excel

OK Hulk, merci

En termes de macro :
dans la section VBA project \ thisworkbook

dans Private Sub Workbook_Open()

Application.DisplayFullScreen = True

et dans Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayFullScreen = False


Merci encore.
 

PatLac

XLDnaute Occasionnel
Re : Masquer : Croix rouge de fermeture excel

Bonjour !
Le code de bruno fonctionne parfaitement ! Merci !
Mais j´ai 2 autres questions :
- Comment faire pour ne garder que le symbole qui minimise la fenetre
- Comment faire pour appliquer cette occultation sur la fenetre qui est active, donc sur les symboles qui sont en dessous une nouvelle fois (Voir fichier joint).
Merci d´avance.
Bonne journée
 

Pièces jointes

  • Unbenannt.JPG
    Unbenannt.JPG
    9.6 KB · Affichages: 202
  • Unbenannt.JPG
    Unbenannt.JPG
    9.6 KB · Affichages: 283
  • Unbenannt.JPG
    Unbenannt.JPG
    9.6 KB · Affichages: 249

david84

XLDnaute Barbatruc
Re : Masquer : Croix rouge de fermeture excel

Bonjour,
concernant ta demande
Comment faire pour ne garder que le symbole qui minimise la fenetre
tu trouveras ici la réponse à ta question.
A noter que selon les circonstances, il est plus simple d'utiliser la fonction GetActiveWindow que FindWindowA si tu veux récupérer le pointeur vers la fenêtre active.

Concernant ta 2ème question je ne l'ai pas comprise. Si tu veux trouver le moyen d'identifier la fenêtre visible, regarde du côté de la fonction API IsWindowVisible.

Ceci dit attention : avant de passer par l'utilisation d'API Windows il faut vraiment voir si le jeu en vaut la chandelle car celles-ci ne sont pas toujours évidentes à manipuler (il existe d'autres restrictions telles que leur portabilité en fonction des versions d'Excel et le fait qu'elles restent cantonnées au système d'exploitation Windows).

Dans de nombreux cas, l'utilisation de procédures VBA est suffisante et plus simple, quitte à reposer le problème auquel on a à faire. D'ailleurs quand je lis le message #3 je me dis que ce n'était peut-être (je dis bien peut-être !) pas nécessaire de sortir la grosse artillerie des API uniquement pour empêcher l'enregistrement de certains classeurs.
Il vaut quelquefois mieux prendre la peine de bien expliquer ce que l'on cherche à faire plutôt que de demander directement un code qui "fait le boulot" : les réponses fournies répondaient à la commande initiale mais reste à savoir si celle-ci était réellement la plus appropriée. Encore eût-il fallu que le demandeur présentât d'entrée de jeu son problème.
A+
 
Dernière édition:

PatLac

XLDnaute Occasionnel
Re : Masquer : Croix rouge de fermeture excel

Bonsoir David !
Merci pour cette réponse !
Le code du lien ne fonctionne pas chez moi :(
Je ne suis pas non plus une flêche, mais ai bien suivi les indications ... sans résultats !

Le code de bruno fonctionne nickel, et je pensais qu'il fallait juste l'adapter.
Ma deuxième question concernait en faite la croix, le minimiser et l'agrandisseur de la feuille.

Le code de bruno concerne les fonctions du classeur.

Merci pour votre aide.
Bonne soirée.
 

david84

XLDnaute Barbatruc
Re : Masquer : Croix rouge de fermeture excel

Re

Le code du lien ne fonctionne pas chez moi
Je ne suis pas non plus une flêche, mais ai bien suivi les indications ... sans résultats !
Je l'ai testé de mon côté et je peux te dire qu'il fonctionne (à moins de ne pas avoir compris ce que tu attendais).
Dire qu'il ne fonctionne pas ne me donne aucune indication sur ce que tu as testé, quelle partie du code plante éventuellement, etc.
Le plus simple est que tu places un fichier avec ce que tu as testé pour que l'on puisse comprendre ce qui ne va pas.

Ma deuxième question concernait en faite la croix, le minimiser et l'agrandisseur de la feuille.
Désolé mais je ne comprends toujours pas ce que tu attends.
A+
 

PatLac

XLDnaute Occasionnel
Re : Masquer : Croix rouge de fermeture excel

Bonjour !
En fait, rien ne se passe :(

Le code de Bruno "enlève" la croix, l'agrandisseur et le minimiser.*
Avec ton code, aucune disparition.

Pour résumer, je voudrais qu'uniquement le MINIMISER du classeur reste (disparition de la croix et de l'agrandisseur), et ce sur également sur celui de la feuille (qui est juste en dessous de celui du classeur) .

Je mets des copie d'écran et exemple en pièces jointes... un petit dessin c'est toujours mieux ! ;)

Merci
 

Pièces jointes

  • Classeur_code_bruno.xlsm
    16.1 KB · Affichages: 198
  • Classeur_code_bruno.xlsm
    16.1 KB · Affichages: 190
  • Classeur_code_bruno.xlsm
    16.1 KB · Affichages: 209
  • Classeur_explications.jpg
    Classeur_explications.jpg
    58.5 KB · Affichages: 206
  • Classeur_explications.jpg
    Classeur_explications.jpg
    58.5 KB · Affichages: 209
  • Classeur_explications.jpg
    Classeur_explications.jpg
    58.5 KB · Affichages: 194
  • Classeur_code_bruno.jpg
    Classeur_code_bruno.jpg
    53.9 KB · Affichages: 173
  • Classeur_Classique.jpg
    Classeur_Classique.jpg
    54.6 KB · Affichages: 191

david84

XLDnaute Barbatruc
Re : Masquer : Croix rouge de fermeture excel

Bonjour,
le code suivant (à placer dans un module classique) te permet de désactiver la croix de fermeture et le trait de réduction de la fenêtre du menu système :
Code:
Option Explicit

Private Declare Function DeleteMenu Lib "User32" (ByVal _
hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "User32" (ByVal _
hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Const GWL_STYLE = (-16)
Private Const MF_BYCOMMAND = &H0&
Private Const MF_BYPOSITION = &H400
Private Const SC_MINIMIZE = &HF020
Private Const SC_CLOSE = 6
Private Const WS_MINIMIZEBOX = &H20000

Dim hMenu As Long, k As Long, hwnd As Long

Private Sub Désactiver_Croix()
hwnd = FindWindowA(vbNullString, Application.Caption)
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_CLOSE, MF_BYPOSITION)
End Sub

Private Sub Désactiver_Minimiser()
hwnd = FindWindowA(vbNullString, Application.Caption)
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
k = GetWindowLong(hwnd, GWL_STYLE)
k = k Xor WS_MINIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, k
End Sub

Private Sub Réactiver_Menu()
hwnd = FindWindowA(vbNullString, Application.Caption)
hMenu = GetSystemMenu(hwnd, True)
k = DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
k = GetWindowLong(hwnd, GWL_STYLE)
k = k Xor WS_MINIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, k
End Sub

Sub SystemMenu()
Désactiver_Croix
Désactiver_Minimiser
End Sub

Sub SystemMenuInit()
Réactiver_Menu
End Sub

Pour les commandes de la fenêtre du classeur je n'ai pas trouvé pour l'instant comment récupérer son pointeur. C'est peut-être possible mais soit il existe une fonction qui le fait, soit on peut la récupérer autrement mais je ne dispose pas des outils qui le permet sur mon ordinateur.
Ceci-dit si tu nous expliquais pourquoi tu veux à tout prix inactiver ces commandes cela nous permettrait peut-être de te proposer quelque chose de plus simple.
A+
 

PatLac

XLDnaute Occasionnel
Re : Masquer : Croix rouge de fermeture excel

Bonjour !
Je suis vraiment désolé, mais le code ne fonctionne pas, j'ai pourtant tout essayé.

En fait, je désire desactiver ces fonctions, car le classeur/la feuille doit rester constamment à l'écran.
Juste la fonction "minimiser "doit être active, car elle permet ainsi d'accéder au autres icones du bureau.

En fait, si tu pouvais joindre un fichier excel avec le code, cela me permettrait de voir ou je bug.

Merci.
Bonne journée
 

david84

XLDnaute Barbatruc
Re : Masquer : Croix rouge de fermeture excel

Re
Je suis vraiment désolé, mais le code ne fonctionne pas, j'ai pourtant tout essayé.
Es-tu sûr d'avoir lancé les macros à partir de l'éditeur VBE ?
Juste pour savoir : es-tu familiarisé a minima avec le VBA ?
En fait, je désire desactiver ces fonctions, car le classeur/la feuille doit rester constamment à l'écran.
Juste la fonction "minimiser "doit être active, car elle permet ainsi d'accéder au autres icones du bureau.
A ce moment-là, tu peux partir sur le code proposé et utiliser la propriété
Code:
Application.DisplayFullScreen
pour cacher les commandes de la fenêtre : seuls apparaîtront à l'écran les commandes du menu système (désactivées ou non).
En fait, si tu pouvais joindre un fichier excel avec le code, cela me permettrait de voir ou je bug.
Je préfère que ce soi toi qui joigne le fichier car je suis en Office 2010 64 bits et je dois retoucher la déclaration des sub et fonctions API.
A+
 

david84

XLDnaute Barbatruc
Re : Masquer : Croix rouge de fermeture excel

Re

Ce code fonctionne chez moi.

Je te repose donc la même question que dans mon précédent message : Es-tu sûr d'avoir lancé les macros à partir de l'éditeur VBE ?

Il faut procéder comme suit :
- ouvrir l'éditeur Visual Basic (Alt+F11)
- placer le curseur à l'intérieur de la Sub SystemMenu
- appuyer sur F5 : la croix et le tiret de réduction du menu système sont inactivés
- placer le curseur à l'intérieur de la Sub SystemMenuInit
- appuyer sur F5 : la croix et le tiret de réduction du menu système sont réactivés

Après, si chez toi tu veux les lancer lors de l'ouverture de ton classeur, appelle la Sub SystemMenu dans la Sub Workbook_Open() et la Sub SystemMenuInit dans l'événement Workbook_BeforeClose.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 113
Membres
103 476
dernier inscrit
achref att