Msg Box lorsqu'une Text_box d'un formulaire est non renseigné [Résolu]

merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 13:48 - Dernière réponse : merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 15:34
3
Merci
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

Merci jrivet 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de jrivet
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 avril 2012 à 21:24
3
Merci
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de ucfoutu
Genildf 273 Messages postés lundi 12 janvier 2009Date d'inscription 30 décembre 2015 Dernière intervention - 5 avril 2012 à 14:28
0
Merci
Utilise une inputbox dans ce cas

If tb_nom="" then 
Do 
tb_nom=Inputbox("veuillez entrer un nom?") 
loop until tb_nom<>"" 
end if
Commenter la réponse de Genildf
merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 15:50
0
Merci
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 ?
Commenter la réponse de merzhin67
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 18:13
0
Merci
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
Commenter la réponse de jrivet
merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 19:03
0
Merci
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
Commenter la réponse de merzhin67
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 avril 2012 à 19:32
0
Merci
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
Commenter la réponse de ucfoutu
merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 19:38
0
Merci
Je viens de m'apercevoir que je pouvais forcer à mettre le focus par défaut .

En tout cas ça marche parfaitement !!
Thanks
Commenter la réponse de merzhin67
merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 20:03
0
Merci
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" ?
Commenter la réponse de merzhin67
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 6 avril 2012 à 00:27
0
Merci
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.
Commenter la réponse de LIBRE_MAX
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 avril 2012 à 07:03
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 avril 2012 à 07:06
0
Merci
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
Commenter la réponse de ucfoutu
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 6 avril 2012 à 13:50
0
Merci
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.
Commenter la réponse de LIBRE_MAX
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 avril 2012 à 15:06
0
Merci
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
Commenter la réponse de ucfoutu
merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 6 avril 2012 à 17:10
0
Merci
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
Commenter la réponse de merzhin67
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 avril 2012 à 17:20
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 avril 2012 à 17:37
0
Merci
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
Commenter la réponse de ucfoutu
merzhin67 7 Messages postés jeudi 5 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 6 avril 2012 à 23:16
0
Merci
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
Commenter la réponse de merzhin67

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.