Supprimer la croix de fermeture sur un Userform

D

delirum

Guest
Bonjours tous le monde.

Je cherche (si c'est possible) comment enlever la croix qui est en haut à droite des userform, qui permet à l'utilisateur de fermer l'userform. car je voudrais que l'utilisateur soit obliger de cliquer sur le bouton OK que j'ai créé.

Merci et A+
 
A

Arnaud

Guest
salut,

je te propose déja une solution mais qui n'est pas celle que tu souhaite mais on c jamais :).
si derrire ton bouton OK tu quitte ta form, tu peut tout simplement mettre le code que tu as derrière ton bouton OK dans une fonction a part et ensuite tu appelle cette fonction derrière le bouton OK mais également dans l'évènement

Private Sub UserForm_Terminate()

End Sub

ce qui fais que ton code du bouton OK est tjs lancer
 
A

Arnaud

Guest
sinon j'avais fais un truc mais c sous visual studio donc je c pas si ça marche en VBA mais c surment adaptable.

Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

Public Const MF_BYPOSITION = &H400&
Public Const MF_REMOVE = &H1000&


Public Sub DesactiveX()
Dim hMenu As Long
Dim nCount As Long

hMenu = GetSystemMenu(Me.hwnd, 0)
nCount = GetMenuItemCount(hMenu)

Call RemoveMenu(hMenu, nCount - 1, MF_REMOVE Or MF_BYPOSITION)
Call RemoveMenu(hMenu, nCount - 2, MF_REMOVE Or MF_BYPOSITION)

DrawMenuBar Me.hwnd
End Sub
 
V

Violette

Guest
Salut tous le monde Delirum, Arnaud


'La procédure événementielle (UserForm_QueryClose)suivante
'ne permet pas à l'utilisateur de fermer le UserForm en
'cliquant sur le bouton Fermeture:(X).On envoie un message
'----------------------------------------------------------
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "Cette commande ne peut pas être exécutée" _
& vbCrLf & "pour sortir utiliser le bouton Quitter ", _
vbOKOnly + vbCritical, "Fin de la commande"
Cancel = True
End If
End Sub

A+ Violette
 
R

Robert

Guest
Bonjour tous le monde Delirum, Arnaud, Violette,
Voici un code qui fonctionne (un peu comme celui de Arnaud)
Créer un module qui contient:

'Find the Dialog's Window
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'Get the current window style
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

'Set the new window style
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const WS_SYSMENU = &H80000
Const GWL_STYLE = (-16)
Sub HideCloseButton(oUsrFrm As Object)
Dim hWnd As Long
Dim lStyle As Long
hWnd = FindWindow("ThunderDFrame", oUsrFrm.Caption) 'UserForm
Get the current window style
lStyle = GetWindowLong(hWnd, GWL_STYLE)
'Turn off the System Menu bit
SetWindowLong hWnd, GWL_STYLE, lStyle And Not WS_SYSMENU
End Sub

Dans la userform placer le code suivant:
Private Sub UserForm_Initialize()
HideCloseButton Me
End Sub

@+Robert
 
D

delirum

Guest
Salut tous le monde et merci de votre contribution.

J'ai testé le code de Robert (désolé pour les autrs) qui fonctionne bien mis à part qu'il faut enlever "Get the current window style" dans le code à insérer dans le modul.

Et c'est bon.

Merci à tous et encore un fois vous prouvez que ce forum est d'une efficacité redoutable.

A+
 
@

@+Thierry

Guest
Bonjour Delirium, Arnaud, Robert, Violette, le Forum

Il y a un bail, j'avais fait une démo sans croix avec des appels API comme Robert et Arnaud... Et bien Ti m'a "enguirlandé" car il m'a montré ce que Violette vous a très justement proposé le "UserForm_QueryClose"... Et j'ai retenu la leçon !!! (merci Ti )

N'oubliez pas que plus on reste simple, plus votre 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...)

Donc pour ma part je préconise la solution proposée par Violette !

Bon Aprèm
@+Thierry
 

Discussions similaires

Réponses
7
Affichages
417

Statistiques des forums

Discussions
312 304
Messages
2 087 054
Membres
103 443
dernier inscrit
ttttttttttttttttt