OVH Cloud OVH Cloud

Pb fermeture userform

6 réponses
Avatar
EliotNaiss
Bonjour à toutes et tous.
J'ai un pb avec un userform, qui contient des textbox et des combo.
Sur un des textbox j'ai des contrôles de saisie dont une sub textbox_exit
pour saisie obligatoire (retour par setfocus)
Mais voilà si je clique sur le bouton fermer (Unload Me) le textbox vide,
la sub textbox_exit fait son job et veux faire le setfocus sur le textbox
alors que le userform est fermé !!
erreur 2110 : le focus ne peut-etre déplacé sur le contrôle car celui-ci est
invisible, non activé, ou d'un type n'acceptant pas le focus.
Question : peut-on en cliquant sur ce bouton fermer, annuler les différentes
procédures aux différents objets de ce(s) userform(s) ?? car là je suis
bloqué ne sachant contourner la difficulté.
Merci du coup de pouce.
Cordialement.
Eliot

6 réponses

Avatar
EliotNaiss
Je (me) répond : j'ai placé les instructions de _Exit vers _BeforeUpdate et
cela marche !!
Mais autre question : comment rendre enabled=true un bouton de commande
seulement si mes trois textbox et mes deux combobox sont renseignés ??
Encore merci
Eliot



"EliotNaiss" a écrit dans le message de news:

Bonjour à toutes et tous.
J'ai un pb avec un userform, qui contient des textbox et des combo.
Sur un des textbox j'ai des contrôles de saisie dont une sub textbox_exit
pour saisie obligatoire (retour par setfocus)
Mais voilà si je clique sur le bouton fermer (Unload Me) le textbox vide,
la sub textbox_exit fait son job et veux faire le setfocus sur le textbox
alors que le userform est fermé !!
erreur 2110 : le focus ne peut-etre déplacé sur le contrôle car celui-ci
est invisible, non activé, ou d'un type n'acceptant pas le focus.
Question : peut-on en cliquant sur ce bouton fermer, annuler les
différentes procédures aux différents objets de ce(s) userform(s) ?? car
là je suis bloqué ne sachant contourner la difficulté.
Merci du coup de pouce.
Cordialement.
Eliot



Avatar
MPi
Salut,

Tu dois valider dans l'événement Change de chaque contrôle si chacun de
ceux-ci a des données valides.

Pour ton précédent problème, il existe l'événement _QueryClose qui arrive
avant la fermeture.
On pourrait y mettre un message "Terminer ?" vbYesNo...

Si la réponse est OUI, une variable globale prendrait la valeur True
Donc lorsque tu valides le TextBox, il s'agit de vérifier si cette variable
est vraie ou non. Si elle est vraie, tu quittes la Sub sans validation.

Michel

"EliotNaiss" a écrit dans le message de
news:
Je (me) répond : j'ai placé les instructions de _Exit vers _BeforeUpdate
et

cela marche !!
Mais autre question : comment rendre enabled=true un bouton de commande
seulement si mes trois textbox et mes deux combobox sont renseignés ??
Encore merci
Eliot



"EliotNaiss" a écrit dans le message de news:

Bonjour à toutes et tous.
J'ai un pb avec un userform, qui contient des textbox et des combo.
Sur un des textbox j'ai des contrôles de saisie dont une sub
textbox_exit


pour saisie obligatoire (retour par setfocus)
Mais voilà si je clique sur le bouton fermer (Unload Me) le textbox
vide,


la sub textbox_exit fait son job et veux faire le setfocus sur le
textbox


alors que le userform est fermé !!
erreur 2110 : le focus ne peut-etre déplacé sur le contrôle car celui-ci
est invisible, non activé, ou d'un type n'acceptant pas le focus.
Question : peut-on en cliquant sur ce bouton fermer, annuler les
différentes procédures aux différents objets de ce(s) userform(s) ?? car
là je suis bloqué ne sachant contourner la difficulté.
Merci du coup de pouce.
Cordialement.
Eliot







Avatar
Steph_D
Bonjour,

Je profite du post, j'ai essayé de tester la solution de Michel (Annuler la
saisie avec un contrôle des données sur l'évènement Exit) et je me suis bien
sûr planté. Où ai-je fauté, svp ?

Salutations
Steph D


Dim MaVar As Boolean
'***************************************************************************
******************************
'Pour ne pas pouvoir fermer le formulaire avec la croix
'***************************************************************************
******************************
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "Vous ne pouvez pas utiliser ce bouton de fermeture !",
vbOKOnly, "Destroy"
Cancel = True
End If
Reponse = MsgBox("Souhaitez-vous quitter la fenêtre ?", vbYesNo +
vbQuestion, "Destroy")
If Reponse = vbYes Then ' L'utilisateur a choisi Oui.
MaVar = True ' "Oui" ' Effectue une action.
End If
End Sub
'***************************************************************************
******************************
'A l'ouverture du formulaire du formulaire de saisie
'***************************************************************************
******************************
Private Sub UserForm_Activate()
Load MonUserform
End Sub
'***************************************************************************
******************************
'Initialisation du formulaire de saisie
'***************************************************************************
******************************
Private Sub UserForm_Initialize()
tbMonNom = ""
MaVar = False
End Sub
'***************************************************************************
******************************
' contrôle de la saisie : 4 lettres maximum
'***************************************************************************
******************************
Private Sub tbMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If MaVar = True Then Exit Sub
If Len(tbMonNom.Text) <= 4 Then
MsgBox "La taille de votre nom doit être au minimum de 5 lettres",
vbOKOnly, "Destroy"
Cancel = True
End If
End Sub
'***************************************************************************
******************************
'Boutons
'***************************************************************************
******************************
Private Sub booOK_Click()
If tbMonNom = "" Then
MsgBox "Vous devez renseigner votre nom !!!", vbOKOnly, "Destroy"
tbMonNom.SetFocus
Exit Sub
End If
Me.Hide
End Sub
Private Sub Bou_Annuler_Click()
Unload Me
End Sub
Avatar
MPi
Salut,

Essaie comme ceci
Private Sub tbMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If MaVar = True Then Exit Sub
If Len(tbMonNom.Text) <= 4 Then
MsgBox "La taille de votre nom doit être au minimum de 5 lettres",
vbOKOnly, "Destroy"
Cancel = True
End If

End Sub

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

Rep = MsgBox("Voulez-vous vraiment quitter ?", vbYesNo)
If Rep = vbYes Then
MaVar = True
Unload Me
Else
MaVar = False
Cancel = True
End If
End Sub

Michel

"Steph_D" a écrit dans le message de
news:deekbd$31n$
Bonjour,

Je profite du post, j'ai essayé de tester la solution de Michel (Annuler
la

saisie avec un contrôle des données sur l'évènement Exit) et je me suis
bien

sûr planté. Où ai-je fauté, svp ?

Salutations
Steph D


Dim MaVar As Boolean

'***************************************************************************

******************************
'Pour ne pas pouvoir fermer le formulaire avec la croix

'***************************************************************************

******************************
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "Vous ne pouvez pas utiliser ce bouton de fermeture
!",

vbOKOnly, "Destroy"
Cancel = True
End If
Reponse = MsgBox("Souhaitez-vous quitter la fenêtre ?", vbYesNo +
vbQuestion, "Destroy")
If Reponse = vbYes Then ' L'utilisateur a choisi Oui.
MaVar = True ' "Oui" ' Effectue une action.
End If
End Sub

'***************************************************************************

******************************
'A l'ouverture du formulaire du formulaire de saisie

'***************************************************************************

******************************
Private Sub UserForm_Activate()
Load MonUserform
End Sub

'***************************************************************************

******************************
'Initialisation du formulaire de saisie

'***************************************************************************

******************************
Private Sub UserForm_Initialize()
tbMonNom = ""
MaVar = False
End Sub

'***************************************************************************

******************************
' contrôle de la saisie : 4 lettres maximum

'***************************************************************************

******************************
Private Sub tbMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If MaVar = True Then Exit Sub
If Len(tbMonNom.Text) <= 4 Then
MsgBox "La taille de votre nom doit être au minimum de 5 lettres",
vbOKOnly, "Destroy"
Cancel = True
End If
End Sub

'***************************************************************************

******************************
'Boutons

'***************************************************************************

******************************
Private Sub booOK_Click()
If tbMonNom = "" Then
MsgBox "Vous devez renseigner votre nom !!!", vbOKOnly,
"Destroy"

tbMonNom.SetFocus
Exit Sub
End If
Me.Hide
End Sub
Private Sub Bou_Annuler_Click()
Unload Me
End Sub




Avatar
Steph_D
"MPi" a écrit dans le message de
news:KjCOe.59967$
Salut,

Essaie comme ceci
Private Sub tbMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If MaVar = True Then Exit Sub
If Len(tbMonNom.Text) <= 4 Then
MsgBox "La taille de votre nom doit être au minimum de 5 lettres",
vbOKOnly, "Destroy"
Cancel = True
End If

End Sub

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

Rep = MsgBox("Voulez-vous vraiment quitter ?", vbYesNo)
If Rep = vbYes Then
MaVar = True
Unload Me
Else
MaVar = False
Cancel = True
End If
End Sub


Merci, cela marche bien quand je quitte le formulaire avec la croix.
En revanche, si j'essaie d'abandonner la saisie en cliquant sur le bouton
Annuler de mon formulaire (Unload Me), et bien cela boucle sur le message
"La taille de votre nom doit être au minimum de 5 lettres". Ceci que
j'utilise l'évènement Exit ou BeforeUpdate. Comment faire pour ne pas en
tenir compte ? Merci d'avance

Steph D

Avatar
MPi
Il faudrait alors que tu mettes
MaVar = True
dans le code de ton bouton "Annuler"
Et ça devrait bien fonctionner, en principe...

Michel

"Steph_D" a écrit dans le message de
news:def3af$c1g$
"MPi" a écrit dans le message de
news:KjCOe.59967$
Salut,

Essaie comme ceci
Private Sub tbMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If MaVar = True Then Exit Sub
If Len(tbMonNom.Text) <= 4 Then
MsgBox "La taille de votre nom doit être au minimum de 5
lettres",


vbOKOnly, "Destroy"
Cancel = True
End If

End Sub

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

Rep = MsgBox("Voulez-vous vraiment quitter ?", vbYesNo)
If Rep = vbYes Then
MaVar = True
Unload Me
Else
MaVar = False
Cancel = True
End If
End Sub


Merci, cela marche bien quand je quitte le formulaire avec la croix.
En revanche, si j'essaie d'abandonner la saisie en cliquant sur le bouton
Annuler de mon formulaire (Unload Me), et bien cela boucle sur le message
"La taille de votre nom doit être au minimum de 5 lettres". Ceci que
j'utilise l'évènement Exit ou BeforeUpdate. Comment faire pour ne pas en
tenir compte ? Merci d'avance

Steph D