Desactiver la croix d'un formulaire d'excel?!

cs_tisa Messages postés 13 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 23 janvier 2003 - 22 janv. 2003 à 10:59
pelw Messages postés 148 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 14 février 2005 - 24 janv. 2003 à 17:14
Je voudrais desactiver la croix d'un formulaire excel pour eviter que les utilisateurs sortent sans passer par MON bouton "Fermer".
Merci d'avance

8 réponses

sonoboss Messages postés 178 Date d'inscription lundi 17 juin 2002 Statut Membre Dernière intervention 2 octobre 2007
22 janv. 2003 à 11:42
essaye ca :

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

Public Function DesactiveX(ByVal frm As Form)
Dim hMenu As Long
Dim nCount As Long
hMenu = GetSystemMenu(frm.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 frm.hwnd
End Function

et tu l'appelle comme ca :

call desactiveX(Me)

Bon courage!

Le jour où la merde vaudra de l'or, les pauvres naîtons sans trou du cul!
0
cs_tisa Messages postés 13 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 23 janvier 2003
22 janv. 2003 à 14:24
Merci...Mais....

J'ai un petit pb...
au moment de compiler la fonction DesactiveX
le compileur me dit "type defini par l'utilisateur non defini"

je pense qu'il manque une declaration...
peux encore m'aider stp???
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
22 janv. 2003 à 15:25
passe tout dans 1 module ;)

:clown) BasicInstinct :clown)
0
cs_tisa Messages postés 13 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 23 janvier 2003
23 janv. 2003 à 15:59
J'ai tout passé dans un module et appeler la fonction dans l'activation du formulaire, mais j'ai toujours cette erreur de complilation:
"type defini par l'utilisateur non defini"

Merci de m'aider...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
24 janv. 2003 à 09:26
effectivement, pas de hwnd sous excel & pas de type form :(
je sais pas si c'est possible par ce code la :(

:clown) BasicInstinct :clown)
0
pelw Messages postés 148 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 14 février 2005 6
24 janv. 2003 à 09:27
Essaye ceci :

1. Dans un module

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

Public Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Sub DesactiveX(hWnd As Long)

Dim hMenu As Long
Dim nCount As Long

hMenu = GetSystemMenu(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)
Call DrawMenuBar(hWnd)

End Function

2. Dans une UserForm

Private Sub UserForm_Activate()

Call DesactiveX(FindWindow(vbNullString, Me.Caption))

End Sub

@+

pelw
0
pelw Messages postés 148 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 14 février 2005 6
24 janv. 2003 à 13:15
On pourrait aussi imaginer une solution un peu plus simple, en laissant la croix active, mais en affichant un message d'erreur si l'utilisateur clique dessus :

Dans une UserForm

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
MsgBox "Veuillez quitter à l'aide du bouton ""Fermer"" !"
End If
End Sub

@+

pelw
0
pelw Messages postés 148 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 14 février 2005 6
24 janv. 2003 à 17:14
Oups, désolé... Il faut remplacer "End Function" par "End Sub" !

@+

pelw
0
Rejoignez-nous