Msg Box lorsqu'une Text_box d'un formulaire est non renseigné

Résolu
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012 - 5 avril 2012 à 13:48
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012 - 6 avril 2012 à 23:16
Bonjour,

Je me permets de solliciter votre aide en VBA.
J'ai créé un formulaire avec plusieurs text_box a remplir par l'utilisateur.
Cependant je voudrai créé un msg_box lorsque un textbox n'a pas été renseigner.

J'ai donc fait :
If tb_nom="" then
Do
Msg_box("veuillez entrer un nom?")
loop until tb_nom<>""
end if

Cependant une fois qu'il affiche le 1er msg_box, il ne me laisse plus la possibilité de renseigner le nom et ne sort donc jamais de la boucle Do.

Merci pour votre aide
A voir également:

18 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 avril 2012 à 15:34
Bonjour,

Si tu ne souhaites pas utiliser d'input box, tu peux utiliser l'évènement Exit du textbox et tu joues avec cancel pour annuler la sortie de la textbox et ainsi forcer l'utilisateur à entrer quelque chose

l'exemple suivant te montre comment forcer une textbox à ne pas être vide

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = vbNullString Then
        Call MsgBox("Veuillez entrer un nom", vbCritical Or vbOKOnly, "Erreur de saisie")
        Cancel = True
    End If
End Sub


@+: Ju£i€n
Pensez: Réponse acceptée
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 avril 2012 à 21:24
Bon,
je veux bien aller dans ce sens incroyable, mais tu fais là une usine à gaz !
(c'est comme dans la chanson .... "tu veux ou tu veux pas ? etc ...)
alors voilà, en imaginant que commandbutton1 est tyon bputon de validation :
Private ret As Integer

Private Sub CommandButton1_Click()
 If Not ret = vbCancel Then
   MsgBox "d'accord, alors " ' ====>>> remplace par tes instructions à exécuter si tout est OK
 End If
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If TextBox1.Text = "" Then
   ret = MsgBox("ici ton message d'alerte", vbOKCancel)
    If ret <> vbCancel Then Cancel True Else ret 999
 End If
End Sub





____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
5 avril 2012 à 14:28
Utilise une inputbox dans ce cas

If tb_nom="" then 
Do 
tb_nom=Inputbox("veuillez entrer un nom?") 
loop until tb_nom<>"" 
end if
0
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012
5 avril 2012 à 15:50
Merci pour vos réponse,

En effet je souhaiterai ne pas utiliser d'inputbox. Ainsi je dois créer dans mon module la procédure :

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Text = vbNullString Then
Call MsgBox("Veuillez entrer un nom", vbCritical Or vbOKOnly, "Erreur de saisie")
Cancel = True
End If
End Sub

et je dois ensuite appeler cette procédure dans mon bouton_click ? Si oui, quelle paramètre mettre pour l'appeler ?
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 avril 2012 à 18:13
Re,
Il faut que tu comprennes quand intervient l'évènement Exit du Textbox.
Ce dernier arrive lorsque Ce textbox à le focus et l'utilisateur passe ensuite à un autre contrôle. c'est un peu comparable à la perte de focus.

Ce que je te proposais convient si tu souhaites faire le contrôle lors de la saisie de chaque Txbox et non lors dela validation du formulaire.

est ce plus clair?
@+: Ju£i€n
Pensez: Réponse acceptée
0
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012
5 avril 2012 à 19:03
Merci pour votre précision, cela est plus clair pour moi.
D'ailleurs cela marche comme je le veux. Seul petit bemol, si l'utilisateur ne met pas le focus sur le textBox en question et valide son formulaire, alors il n'y aura pas de message d'erreur ?

Encore merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 avril 2012 à 19:32
Seul petit bemol, si l'utilisateur ne met pas le focus sur le textBox en question et valide son formulaire, alors il n'y aura pas de message d'erreur


Et comment pourrait-il le valider sans quitter la textbox ? Et s'il quitte la textbox, il y retourne
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012
5 avril 2012 à 19:38
Je viens de m'apercevoir que je pouvais forcer à mettre le focus par défaut .

En tout cas ça marche parfaitement !!
Thanks
0
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012
5 avril 2012 à 20:03
Comme vous pouvez le voir, je suis novice en informatique. J'ai encore un soucis, le fait de forcer le focus dans le 1er textbox, alors je ne peux pas quitter mon Userform avec le bouton "Annuler" que j'ai créer.
Est-il possible de mettre ce bouton "annuler" prioritaire ? Ce que je veux dire c'est que même si je n'ai pas renseigner un Textbox, je peux quand même accéder à mon bouton "annuler" mais toujours pas à mon bouton "valider" ?
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
6 avril 2012 à 00:27
Bonsoir,

Je pense que pour le CommandButton, il y' a la propriété TakeFocusOnClick qu' il faut mettre à False.
TextBox1 ne perdera pas le focus.

Je crois que c' est à peu près la même chose avec CausesValidation en VB6.




[] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2012 à 07:03
On évite toutes ces acrobaties de manière simple.
Il suffit de donner la valeur false au bouton de validation, en mode création.
Et ce code à la textbox :
Private Sub TextBox1_Change()
  If TextBox1.Text = "" Then
    CommandButton1.Enabled = False
    CommandButton1.Caption = "textbox à compléter"
 Else
    CommandButton1.Enabled = True
    CommandButton1.Caption = "valider"
 End If
End Sub

et plus besoin du reste (msgbox etc...)
C'est simple et c'est propre






____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2012 à 07:06
Ouais ...
il suffit de donner la valeur False à la propriété Enabled etc ....



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
6 avril 2012 à 13:50
Bonjour ucfoutu

"Est-il possible de mettre ce bouton "annuler" prioritaire ? Ce que je veux dire c'est que même si je n'ai pas renseigner un Textbox, je peux quand même accéder à mon bouton "annuler" mais toujours pas à mon bouton "valider" ?

iL parle du boutton "Annuler"..
Si tu le désactives, tu ne peux plus annuler la saisie.

Il faut juste l'empêcher de recevoir le focus (TakeFocusOnClick=False).
Ainsi, en cliquant sur ce boutton Annuler, Annuler_Click se declechera sans que TextBox_Exit ne se produit.

[] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2012 à 15:06
Bonjour, LIBRE_MAX,
Je cois qu'il voulait parler du bouton annuler de la msgbox


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012
6 avril 2012 à 17:10
Je parlais du bouton annuler de mon userform. Il suffisait donc de mettre Takefocusonclik=false.

Cependant j'ai un autre problème, imaginons que j'ai 2 textbox à remplir pour pouvoir valider.
Mon focus se place donc sur mon 1er textbox automatique, si je clique sur valider sans rien rentré j'ai mon message d'erreur. Parfait.
Cependant, si je rentre une valeur a ce textbox et que je garde mon focus sur ce même textbox et que je clique ensuite sur valider, mon 2ème textbox est vide mais je n'est pas de message d'erreur.
Ainsi, existe-t-il un propriété obligeant à passer par tout les textbox avant de pouvoir valider ?

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2012 à 17:20
Je m'y attendais un peu ... On commence à avoir l'habitude de sujets qui "avancent pas à pas" ...
Je te conseille alors de changer complètement ton fusil d'épaule et de faire une boucle sur tes textboxes concernées dans leur évènement Change ===>> si nb de remplies (<> "") = nombre de textboxes à saisir ===>> bouton de validation hamilité. Si non : bouton inhibé.
Et ne plus te servir de l'évènement exit, qui devient alors superfétatoire.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2012 à 17:37
Tiens : juste pour s'amuser un peu : une autre méthode rigolote :
3 textboxes et un bouton de commande commandbutton1 dont la propriété enables est à false (en mode création)
essaye et tu vas voir
le bouton ne sera accessible que si les 3 textboxes sont remplies.
Private Type remplies
  T1 As String
  T2 As String
  T3 As String
End Type
Private toto As remplies

Private Sub TextBox1_Change()
  toto.T1 = Left(Trim(TextBox1.Text), 1)
  verifions
End Sub

Private Sub TextBox2_Change()
  toto.T2 = Left(Trim(TextBox2.Text), 1)
  verifions
End Sub
Private Sub TextBox3_Change()
  toto.T3 = Left(Trim(TextBox3.Text), 1)
  verifions
End Sub

Private Sub verifions()
 CommandButton1.Enabled Len(toto.T1 & toto.T2 & toto.T3) 3
End Sub




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
merzhin67 Messages postés 7 Date d'inscription jeudi 5 avril 2012 Statut Membre Dernière intervention 6 avril 2012
6 avril 2012 à 23:16
Effectivement j'avance pas à pas, normal je découvre la programmation.

J'ai utiliser la méthode d'un compteur:


Private Sub TB_nom_Exit(ByVal cancel As MSForms.ReturnBoolean)
If TB_nom.Text = "" Then
Call MsgBox("Veuillez entrer un nom.", vbCritical Or vbOKOnly, "Erreur de saisie")
cancel = True
Else
rempli = rempli + 1
Call verif
End If
End Sub


Private Sub verif()
If rempli >= 13 Then
BUTTON_ok.Enabled = True
End If
End Sub

Merci pour votre aide
0
Rejoignez-nous