INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

  • Initiateur de la discussion HELIUM
  • Date de début
H

HELIUM

Guest
Salut,

Y a t'il un moyen de bloquer (en code VBA) dans la barre titre les 3 options 'Réduire' 'Agrandir' et 'fermer' ?
Au niveau de la fenêtre du classeur.

Merci d'avance
A+
Hel
 
A

Ashaar

Guest
Bonsoir Helium,

tu peux placer ce code dans une macro évenementielle par exemple :

Sub FeuillesSansCroixFermeture()
ActiveWorkbook.Protect Structure:=False, Windows:=True
End Sub

pour réactiver les boutons :

Sub reactive()
ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Helium, le Forum

J'ai vu passer des appels API Windows qui doivent faire des trucs comme ça, mais franchement je déconseille d'en utiliser.

N'oubliez pas que plus on reste simple, plus le programme aura de chance d'être fiable et de perdurer vis à vis des versions d'offices et de windows... (Les API ne sont pas forcément toujours suivies de versions en versions...) Et je ne parle même pas des applications destinées à circuler sur des machines de diverses configurations, et même pas en rêve si c'est un Mac...

Non, mais bon tu as une option simple qui permet d'empécher la fermeture d'Excel intempestivement c'est :

Dans un Module Standard
Public TheLocker As Boolean

Dans le Private Module de ThisWorkBook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = TheLocker
End Sub


Et donc dans tes codes, soit la Variable Boolean 'TheLocker' est False est on peut Sortir soit elle est True et la fermeture est impossible...


Bonne Soirée
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Ashaar, re Helium, le Forum

Pardon je ne t'avais pas vu Ashaar, je n'avais pas raffraichi.

Tiens, je ne connaissais pas la méthode : ActiveWorkbook.Protect Windows:=True

Bien que ça ne concernera que la fenêtre du classeur et pas celle d'Excel, celà pourra être peut-être la réponse qu'attends Helium.

Pour ne pas mélanger la méthode que je proposais concerne l'empêchement total de la fermeture du classeur, par la croix de fenêtre classeur, par la croix d'application Excel, par double click sur Icone, par ALT F4... Donc prévoir impérativement une sortie...

Merci Ashaar, tu vois on en apprend tous les jours sur XLD, moi compris !


@+Thierry
 

Leskwal

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Bonsoir le forum

Je relance cette discussion car la dernière demande de VACOH n'a pas eu de réponse...:p

Je souhaiterais pouvoir désactiver les 3 boutons (Réduire, agrandir, la croix) tant sur la feuille ouverte, que sur la barre de titre d'Excel.

La raison : j'ai développé une application où je fais disparaitre le RUBAN. Seulement, en cliquant simplement sur 1 des 2 premiers boutons (réduire, agrandir), le RUBAN réapparait. J'ai prévu sur ma feuille un bouton " enregistrer et quitter ".

En interdisant ces actions : le ruban ne pourra plus réapparaitre.:D

Un très grand MERCI d'avance à celles et ceux qui me répondront.

Pascal
 

SubEndSub

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Bonjour chez vous

Use with caution

Code:
'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
 

Leskwal

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Heu...bah...ça n'a pas l'air de marcher.

Enfin je pense plutôt que ça doit marcher mais je mis prend mal. :eek:

En fichier joint le fichier que j'ai créé. Pas d'inquiétude...:D il ne fonctionne pas...;)

Si une bonne âme veut bien me le corriger.

Merci d'avance

Pascal

NB : Fichier basé sur le code proposé par SubEndSub
 

Pièces jointes

  • CROIX_SUP.xls
    31.5 KB · Affichages: 458

SubEndSub

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Bonjour chez vous


Le code VBA posté précédemment fonctionne.

Testé sur Excel 2000.

Il faut lancer la macro DisableSystemMenu

pour désactiver les trois icônes :Réduire , Agrandir, Fermer
de la barre de de titre du menu systéme

Pour remettre à l'état initial : lancer la macro : EnableSystemMenu

(C'est déjà indiqué dans les commentaires du code )

Les icônes sont désactivées mais elles restent affichées.
 

Leskwal

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Bonsoir

J'ai refait le fichier. Subsiste toujours une erreur. Peut-être parce que je fonctionne avec Excel 2007. :confused:

ERREUR : erreur de compilation. Sub ou fonction non définie
" FindWindowA "


Alors qu'elle l'est dans un module !!


Si vous pouvez juste le lancer pour me confirmer que je ne suis pas complètement abruti. :D :eek: :eek:

Merci d'avance

Pascal


NB : Pourriez-vous m'envoyer un fichier fonctionnel incluant ce code ? Merci d'avance. :rolleyes:
 

Pièces jointes

  • 3 boutons.xlsm
    19.8 KB · Affichages: 276
  • 3 boutons.xls
    36 KB · Affichages: 225

SubEndSub

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Bonjour chez vous

Leskwal

Tout le code VBA doit être dans le même module

Or seules les déclarations sont dans le module.

Refais un copier/coller de tout le code VBA (déclarations incluses) dans le module

(Supprime le code que tu as collé dans la feuille 1)

Et remplace le code de tes boutons par ceux-ci
Code:
Private Sub CommandButton1_Click()
Call DisableSystemMenu
End Sub

Private Sub CommandButton2_Click()
EnableSystemMenu
End Sub

Rectification: la macro DisableSystemMenu (en l'état)
désactive la croix de fermeture
désactive le menu (en haut à gauche de l'écran) - icône Excel

(Edition) :Ajout autre code plus court : (Cette fois-ci à mettre dans le code de la feuille contenant les boutons)
Code:
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
 
Dernière édition:

Leskwal

XLDnaute Occasionnel
Re : INTERDIRE "REDUIRE"&"FERMER" IN BARRE TITRE FENETR

Bonjour

J'ai bien opéré comme tu l'as décrit.

Cela ne fonctionne pas. Je pense que cela est dû à la version d'EXCEL (2007).

Quand j'appuie sur le bouton appelant la désactivation des boutons, rien ne se passe. Je peux toujours réduire fermer par la croix...

Quand j'appuie sur le bouton appelant l'Activation des boutons, trois icônes apparaissent (Trait, Croix, Fenêtre) mais de l'ancienne version d'EXCEL (Non coloré, Noir sur fond gris). :D


De plus, la partie à inclure dans la feuille où se trouvent les boutons, provoque des messages d'erreur...:(




Peut-être une autre soluce.

Merci

Pascal

NB : Peux tu m'envoyer un fichier incluant toute ta procédure ?
 

Pièces jointes

  • CROIX.xls
    39 KB · Affichages: 309
  • CROIX.xls
    39 KB · Affichages: 343
  • CROIX.xls
    39 KB · Affichages: 359

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG