Obligation de remplir les textbox pour valider

Bonjour

D'abord je voudrais remercier le génies de ce forum qui nous apportent des solutions à nos problèmes.

Voila la situation:

Comment obliger un utilisateur à remplir toutes les textbox d'un formulaire pour le valider, car avec mes connaissances je peux valider avec des textbox vides.

Et si une des textbox est vide sortir le bouton valider ne doit pas fonctionner et sortir un message approprié pour avertir l'utilisateur de remplir la textbox vide.

Je joint in fichier test pour se rapprocher de la situation.

merci d'avance pour votre aide.

222fichier-test.xlsm (22.73 Ko)

Bonjour Youness, bonjour le forum,

Essaie comme ça :

Private Sub CommandButton1_Click()
Dim CTRL As Control

For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.TextBox Then
        If CTRL.Value = "" Then
            CTRL.SetFocus
            MsgBox "Vous devez remplir ce champ !"
            Exit Sub
        End If
    End If
Next CTRL
Sheets("Accueil").Range("B1") = TextBox1.Value
Sheets("Accueil").Range("B2") = TextBox2.Value
Sheets("Accueil").Range("B3") = TextBox3.Value
Sheets("Accueil").Range("B4") = TextBox4.Value
Unload Me
UserForm1.Hide
UserForm2.Show
End Sub

Merci beaucoup pou votre réactivité. Ça marche super bien.

juste une précision pour la textbox qui doit contenir une date comment limiter la saisei au format date et sortir un avertissent en cas d'erreur.

Encore merci

Bonsoir Youness, bonsoir le forum,

Pas sûr à 100 % mais quand même bien efficace et relativement simple.

  • D'abord on limite à 10 le nombre de caractères que peut contenir la TextBox à 10 maximum
  • Puis, on limite les touches du clavier pour la TextBox aux seuls caractères {/, 1, 2, 3, 4, 5, 6, 7, 8 ou 9}
  • Et enfin on vérifie que le texte de la TextBox correspond bien à une date (31/02/2016 par exemple sera interdit)
Si tous cela n'est pas respecté, un message invite l'utilisateur à recommencer...

Le code :

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Me.TextBox1.MaxLength = 10 'définit le nombre maximum de caractères dans la TextBox1
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'à l'appui sur une touche du clavier dans la TextBox1
If KeyAscii = 47 Then Exit Sub 'si caractère {/}, sort de la procédure
'si toute autre caractère que {0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9}, le caractère est effacée
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 8
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'à la sortie de la Textbox1
If Len(Me.TextBox1.Value) <> 10 Then GoTo suite 'si elle ne contient pas 10 caractères, va à l'étiquette "suite"
If Not IsDate(Me.TextBox1.Value) Then GoTo suite 'si ce n'est pas une date, va à l'étiquette "suite"
msgbox CDate(Me.TextBox1.Value) 'affiche la date éditée (ligne à supprimer après les tests)
Exit Sub 'sort de la procédure
suite: 'étiquette
Cancel = True 'annule la sortie de la TextBox1
msgbox "Date non valide. Vous devez respecter le format JJ/MM/AAAA ! Recommencez..."
With Me.TextBox1 'prend en compte la TextBox1
    .SelStart = 0 'début de la selection
    .SelLength = Len(.Value) 'longueur de la sélection
End With 'fin de la prise en compte de la TextBox1
End Sub

Private Sub CommandButton1_Click() 'bouton "Valider"
'renvoie toujours les dates d'une UserForm vers une cellule, avec format américain (yyyy/mm/dd)
'et applique à la cellule qui reçoit la date, le format de date que tu désires. Tu n'auras pas de problème d'inversion jour/mois
'car il est courrant qu'en tapant 01/02/2016, ça affiche 02/01/2016
'dans l'exemple la date sera affichée : JOUR DE LA SEMAINE JJ/MM/AAAA (tu adapteras à ton cas)
Range("A1").Value = Format(CDate(Me.TextBox1.Value), "yyyy/mm/dd") 'renvoie la date dans la cellule A1
Unload Me 'vide et ferme l'UserForm
End Sub

Un fichier exemple :

173youness-v01.xlsm (26.21 Ko)

Bonsoir,

Merci pour les efforts et le temps que vous avez consacré à ma demande.

De mon coté j'ai cherché un peu partout et j'ai trouvé une solution qui marche:

Dim DerLig As Integer

If Not IsDate(TextBox4) Then

MsgBox "Il faut saisir une date valide:(jj/mm/aaaa)"

TextBox4 = ""

TextBox4.SetFocus

Exit Sub

End If

Et utiliser CDate pour ne pas inverser les dates à l'anglaise

Sheets("Accueil").Range("B4") = CDate(TextBox4)

J'ai testé ça marche relativement bien. Qu'en pensez vous?

Bonsoir Youness, bonsoir le forum,

Si ça marche et que ça te convient utilise ça bien sûr !

Tape quand même : 45/08/12 ou 23/5/201... Il est évident que ce ne sont pas des dates valides mais tu auras des surprises avec le code que tu proposes car tu n'es pas à l'abri d'une erreur de saisie.

Bonjour

Merci mille fois pour vos avertissements, car quand j'ai testé ces codes c'était avec les bonnes formes de dates sans essayer celles que vous m'avez indiqué. Encore merci.

Je vais maintenant voir les code que vous m'avez proposé et je vous tiens au courant

Bonjour

Je viens de terminer les essais et les résultats avec vos codes sont plus stricts qu'avec les miens.

Merci pour vos orientations.

Rechercher des sujets similaires à "obligation remplir textbox valider"