Validation dans un USF

  • Initiateur de la discussion Jeff
  • Date de début
J

Jeff

Guest
Bonjour le forum,

Je sèche sur un problème de validation de données dans un userform.

Dans le USF en question, il faut saisir différentes données (sexe, nom, prénom, réf., etc), puis cliquer sur un bouton de commande de validation.

Tant que l'ensemble des données n'est pas renseigné, un MSB Box affiche un petit message d'erreur. Je souhaiterais que lorsque l'ensemble des données est saisi, le clic sur le bouton de commande ferme le USF.

Ci-dessous, le code VBA actuel :

Sub Nom()
If UserForm1.ComboBox4.Value = "" Or UserForm1.ComboBox1.Value = "" Or UserForm1.ComboBox2.Value = "" Or UserForm1.ComboBox3.Value = "" Or UserForm1.TextBox1.Value = "" Or UserForm1.TextBox2.Value = "" Or UserForm1.TextBox3.Value = "" Then
MsgBox "Vous n'avez pas saisi toutes les données de base"
Else
If UserForm1.ComboBox4.Value = "Homme" Then
If UserForm1.TextBox3.Value < 1 Or UserForm1.TextBox3.Value > 36000 Then
Else
MsgBox "Le numéro de référence saisi est incorrect"
End If
Else
If UserForm1.TextBox3.Value < 100000 Or UserForm1.TextBox3.Value > 360000 Then
Else
MsgBox "Le numéro de référence saisi est incorrect"
End If
End If
Sheets(1).Range("P1") = UserForm1.TextBox1.Value
Sheets(1).Range("Q1") = UserForm1.TextBox2.Value
Sheets(1).Range("R1") = UserForm1.TextBox3.Value
Sheets(1).Range("R2") = UserForm1.ComboBox1.Value
Sheets(1).Range("P6") = UserForm1.ComboBox2.Value
Sheets(1).Range("Q6") = UserForm1.ComboBox3.Value
Sheets(1).Range("S1") = UserForm1.ComboBox4.Value
End If
End Sub

Merci par avance de votre aide et bravo et merci à toutes et celles et ceux qui font partager leur savoir sur Excel sur le forum...

A+
 
@

@Christophe@

Guest
Bonsoir Jeff,

Ben ton code à l'air OK, y a moyen de modifier certaine choses, mail il doit fonctionner.

Afin de fermer le userform en fin de validation, ajoute le ligne suivante avant End Sub

Unload Userform1


Ton code:

Sub Nom()
If UserForm1.ComboBox4.Value = "" Or UserForm1.ComboBox1.Value = "" Or UserForm1.ComboBox2.Value = "" Or UserForm1.ComboBox3.Value = "" Or UserForm1.TextBox1.Value = "" Or UserForm1.TextBox2.Value = "" Or UserForm1.TextBox3.Value = "" Then
MsgBox "Vous n'avez pas saisi toutes les données de base"
Else
If UserForm1.ComboBox4.Value = "Homme" Then
If UserForm1.TextBox3.Value < 1 Or UserForm1.TextBox3.Value > 36000 Then
Else
MsgBox "Le numéro de référence saisi est incorrect"
End If
Else
If UserForm1.TextBox3.Value < 100000 Or UserForm1.TextBox3.Value > 360000 Then
Else
MsgBox "Le numéro de référence saisi est incorrect"
End If
End If
Sheets(1).Range("P1") = UserForm1.TextBox1.Value
Sheets(1).Range("Q1") = UserForm1.TextBox2.Value
Sheets(1).Range("R1") = UserForm1.TextBox3.Value
Sheets(1).Range("R2") = UserForm1.ComboBox1.Value
Sheets(1).Range("P6") = UserForm1.ComboBox2.Value
Sheets(1).Range("Q6") = UserForm1.ComboBox3.Value
Sheets(1).Range("S1") = UserForm1.ComboBox4.Value
End If
Unload Userform1
End Sub


J'espère avoir bien compris

bonne soirée

@Christophe@
 
@

@Christophe@

Guest
Re,

Pascal bonsoir,

Nous nous sommes croisée

Pascal, je crois pas que Unload Me marchera. D'après moi, mais je peux me tromper, le sub Nom est dans un module! Donc unload me donnera erreur

Il faut utiliser Unload Userform1

Biensur Unload me si le code est dans le userform est 100% Correct

bonne soirée

@Christophe@
 
P

Pascal76

Guest
SAlut

Oui exact Christophe j'avais pas fait attention. J'ai tellement l'habitude d'avoir ma commande de validation dans un privatesub de l'USF que j'ai pas trop regardé en tout cas pas assez.

Donc jeff suis la méthode de Christophe

Pascal
 
J

Jeff

Guest
Bonsoir Pascal76, @Christophe@,

Merci de votre réponse on ne peut plus rapide !!!

Le sub figure effectivement dans un module, donc Unload Me renvoie un message d'erreur.

Problème avec la solution de @Christophe@, Unload Userform1 ferme le USF, même si les différentes conditions pour la validation ne sont pas remplies. Le MSGBox renvoie le message d'erreur concerné, mais en cliquant sur OK, le USF se ferme sans attendre que toutes les conditions soient remplies...

Ne faudrait-il pas passer par une boucle ??

Merci de votre aide.

A+
 
@

@Christophe@

Guest
Re

Voila comment modifie ton code, il suffit d'ajouter un Exit sub si ta condition n'est pas remplie

Sub Nom()
If UserForm1.ComboBox4.Value = "" Or UserForm1.ComboBox1.Value = "" Or UserForm1.ComboBox2.Value = "" Or UserForm1.ComboBox3.Value = "" Or UserForm1.TextBox1.Value = "" Or UserForm1.TextBox2.Value = "" Or UserForm1.TextBox3.Value = "" Then
MsgBox "Vous n'avez pas saisi toutes les données de base"; exit sub
Else
If UserForm1.ComboBox4.Value = "Homme" Then
If UserForm1.TextBox3.Value < 1 Or UserForm1.TextBox3.Value > 36000 Then
Else
MsgBox "Le numéro de référence saisi est incorrect"; exit sub
End If
Else
If UserForm1.TextBox3.Value < 100000 Or UserForm1.TextBox3.Value > 360000 Then
Else
MsgBox "Le numéro de référence saisi est incorrect"; exit sub
End If
End If
Sheets(1).Range("P1") = UserForm1.TextBox1.Value
Sheets(1).Range("Q1") = UserForm1.TextBox2.Value
Sheets(1).Range("R1") = UserForm1.TextBox3.Value
Sheets(1).Range("R2") = UserForm1.ComboBox1.Value
Sheets(1).Range("P6") = UserForm1.ComboBox2.Value
Sheets(1).Range("Q6") = UserForm1.ComboBox3.Value
Sheets(1).Range("S1") = UserForm1.ComboBox4.Value
End If
Unload Userform1
End Sub


bonne soirée

@Christophe@
 
J

Jeff

Guest
Re-re,

Désolé, mais cela ne fonctionne toujours pas. En ajoutant ;Exit sub à la fin des lignes comme indiqué dans ton post, j'ai une erreur de compilation VBA "Attendu: fin d'instruction"

Merci encore de ton aide et bonne soirée.

A+
 

Discussions similaires

Réponses
6
Affichages
287
Réponses
1
Affichages
267

Statistiques des forums

Discussions
312 500
Messages
2 089 010
Membres
104 004
dernier inscrit
mista