VB Excel - Form

Résolu
morickno Messages postés 117 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 26 juin 2007 - 10 mai 2005 à 14:30
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 - 10 mai 2005 à 16:34
J'aimerai savoir comment enlever la croix de femeture de fenetre qui est en haut à droite de chaque fenetre oubien de permettre de ne pas fermer une fenetre en appuyant sur cette croix.
est-ce possible? si oui comment?

Merci

5 réponses

Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
10 mai 2005 à 15:06
Salut ;O)

Première méthode : détecter que l'utilisateur ferme le formulaire via la croix
Pour ce faire, il existe l'événement UserForm_QueryClose
Le paramètre CloseMode retourne un code identifiant la façon dont le formulaire est fermé.

Code 0 : fermeture via le Control Menu (la croix) et aussi ALT-F4
Code 1 : fermeture via Unload
Code 2 : fermeture par Windows, le système s'arrête...
Code 3 : fermeture via le Gestionnaire des tâches

Donc dans ton cas, tu peux mettre ce code dans cet événement.
Ce qui empêchera la fermeture via la croix ou ALT-F4

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode 0 Then Cancel -1
End Sub

Deuxième méthode : enlever la croix d'un formulaire.
Cette méthode est plus lourde à mettre en oeuvre et à comprendre car l'utilisation d'API est requise.
Fais un copier-coller du code ci-dessous dans un UserForm

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 Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub

Espérant que cela répondra à ton attente.

Guy
3
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
10 mai 2005 à 15:10
Bonjour,

Private Sub Quitter_Click()
End
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox "Vous devez utiliser le bouton Quitter !", vbInformation, "Message"
Cancel = True
End Sub

Ne pas oublier de placer un bouton quitter, et surtout ne pas utiliser Unload Me dans la procédure du bouton quitter, sinon impossible de quiitter.Utiliser "End"

jpleroisse
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
10 mai 2005 à 15:22
Re bonjour >Guy , comme quoi on apprend tous les jours, je ne connaissais pas cet Appi.
Enfin disons que je ne les utilise pas car j'arrive rarrement à m'en servir.Comme les fonctions d'ailleurs.

jpleroisse
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
10 mai 2005 à 15:22
jpleroisse >> il suffit de tester la valeur de CloseMode pour savoir la façon dont le formulaire est fermé (voir mon message). Utiliser End n'est jamais conseillé et n'est pas propre.

Si je corrige ton code :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode = 0 then
MsgBox "Vous devez utiliser le bouton Quitter !", vbInformation, "Message"
Cancel = True
End If

End Sub

Guy
0

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

Posez votre question
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
10 mai 2005 à 16:34
OK merci Guy, j'ai bien pris notes.

jpleroisse
0
Rejoignez-nous