VBA : Contrôle de validité dans un formulaire



Cette semaine voyons comment programmer simplement divers contrôles de validité sur les objets Textbox d’un formulaire (saisie obligatoire, type de données, longueur de chaîne…). Différentes fonctions de type String nous serons d’un grand secours…


-1 - Réalisons d’abord le formulaire VB suivant :
 
-2 – Puis affectons la macro OpenForm() à  un bouton de commande « Annuler » de la feuille de calcul pour ouvrir le formulaire. Le code a été saisi dans une feuille de module de code (Module 1)
Sub OpenForm()
'Rendre toutes les zones vide
FormTest.TextBox1.Text = ""
FormTest.erreur1.Caption = ""
FormTest.TextBox2.Text = ""
FormTest.erreur2.Caption = ""
FormTest.TextBox3.Text = ""
FormTest.erreur3.Caption = ""
FormTest.TextBox4.Text = ""
FormTest.erreur4.Caption = ""
FormTest.TextBox5.Text = ""
FormTest.TextBox6.Text = ""
FormTest.erreur6.Caption = ""
'avant l'ouverture du formulaire
  FormTest.Show
End Sub

-3 – Programmons maintenant par sécurité le  bouton de commande SORTIR du formulaire
Private Sub Sortir_Click()
'Fermons le formulaire en cas de click sur le bouton Annuler
FormTest.Hide
End Sub

- 4 – Premier contrôle très simple pour savoir si l’utilisateur a bien renseigné ce textbox. 
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'L'événement Exit se déclenche lorsque le focus sort de la zone de texte
If TextBox1.Text = "" Then
erreur1.Caption = "Vous n'avez pas rempli ce champ"
'Un simple message pour attirer l'attention de l'utilisateur
Else
erreur1.Caption = ""
End If
End Sub

-5 – Convertissons maintenant une saisie en MAJUSCULE
Private Sub TextBox2_Change()
'L'événement Change se déclenche lorsque la valeur de la zone de texte est modifiée
TextBox2.Text = UCase(TextBox2.Text)
'ou LCase() pour mettre en minuscule
erreur2.Caption = "Conversion réussie"
End Sub

- 6 – Vérifions la longueur d’une chaîne, ici 5 caractères
 Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox3.Text) = 5 Then
'Len() retourne la longueur d'une chaîne de texte
erreur3.Caption = "Cette zone contient bien 5 caractères"
Else
erreur3.Caption = "Cette zone ne contient pas 5 caractères mais " _
  & Len(TextBox3.Text) & "caractère(s)"
End If
End Sub

- 7 – Vérifions que la saisie est bien de type texte et qu’il ne s’agit pas d’un nombre ou d’une date.
 Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox4.Text) Or IsDate(TextBox4.Text) Then
'isNumeric() et isDate() renvoie VRAI si la zone contient un nombre ou une date
erreur4.Caption = "Ceci n'est pas un texte"
Else
erreur4.Caption = "Ceci est  un texte"
End If
End Sub

- 8 – Associons dans la même procédure les 4 contrôles précédents
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox5.Text = "" Or Len(TextBox5.Text) <> 5 _
Or IsNumeric(TextBox5.Text) Or IsDate(TextBox5.Text) Then
       MsgBox "Veuillez remplir cette zone avec" _
 & Chr(10) & "un texte de 5 caractères"
'Chr() simule un touche clavier ici le retour ligne
Else
TextBox5.Text = UCase(TextBox5)
MsgBox "Ceci est  un texte de 5 caractères" _
& Chr(10) & "converti en majuscule"
End If
End Sub
 
- 9 – Dernier exemple, vérifions si une chaîne 1 est comprise dans une chaîne 2, ici nous voulons savoir si la valeur 1 ou 2 se trouve en première  position de la saisie
Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(1, TextBox6.Text, 1) Or InStr(1, TextBox6.Text, 2) Then
'InStr(départ, chaîne, comparaison) permet de savoir si comparaison est présent
' dans chaîne à partir de la position départ
erreur6.Caption = "La saisie commence par le chiffre 1 ou 2"
Else
erreur6.Caption = "La saisie ne commence pas par le chiffre 1 ou 2"
End If
End Sub



2 commentaires:

Anonyme a dit…

Merci pour tous ses exemples

Unknown a dit…

très instructif.

Enregistrer un commentaire

top