formateur informatique

Valider les saisies avec une fonction Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Valider les saisies avec une fonction Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Tester la saisie de lettres

Grâce aux expressions régulières, le code VBA Access est capable de vérifier les saisies de l'utilisateur de façon chirurgicale. Ces techniques s'avèrent précieuses sur tout type de formulaire attendant des informations précises.

Contrôler la saisie sur un formulaire Access grâce à une fonction VBA

Sur l'exemple illustré par la capture, nous débutons simplement dans ce premier volet sur les expressions régulières. Dans la première zone de texte, dès que l'utilisateur inscrit des chiffres au milieu des lettres, sa saisie est sanctionnée par un message de refus. En revanche, s'il la corrige en supprimant les chiffres, sa saisie est accueillie par un message de conformité. Et c'est une fonction VBA qui scrute automatiquement la zone de texte.

Base de données Access à télécharger
Pour la démonstration de cette nouvelle astuce Access, nous suggérons d'appuyer l'étude sur une base de données hébergeant ce formulaire avec ces zones de texte. Trois zones de texte vierges sont proposées. Dans ce premier volet, nous allons concentrer l'étude sur la première. Elle ne doit accepter que des lettres. Bien sûr à ce stade, le formulaire ne réagit pas encore aux inscriptions.

La fonction de vérification
Pour que la saisie soit vérifiée en temps réel, nous proposons de créer une fonction que nous connecterons ensuite à la zone de texte à scruter. Et cette fonction, si elle est publique, pourra être utilisée par n'importe quel formulaire de l'application. C'est la raison pour laquelle, nous allons la créer dans un module indépendant.
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
  • Tout à fait à droite du ruban, cliquer sur le bouton Module,
Nous basculons ainsi dans l'éditeur VBA Access dans une page de code vierge, effectivement associée à un module indépendant, comme en atteste l'explorateur de projet sur la gauche de l'écran.
  • Dans cette feuille de code, créer la fonction estLettres comme suit :
Option Compare Database

Public Function estLettres(saisie As Variant) As String

End Function


C'est une fonction de type String puisqu'elle doit retourner des informations textuelles, à inscrire dans des zones de saisie du formulaire. Le paramètre saisie correspond à la donnée inscrite dans la zone de texte à scruter par la fonction. Il est typé comme un Variant car rien n'indique que la donnée est un texte.

L'objet d'expression régulière
Pour exploiter les propriétés et méthodes associées aux expressions régulières, nous devons créer un objet classique dans un premier temps. Mais en instanciant ensuite la classe RegExp, il héritera des pouvoirs pour manipuler ces chaînes aux séquences remarquables.
  • Dans les bornes de la fonction, ajouter la déclaration suivante :
...
Dim expReg As Object
...


Si la saisie n'est pas nulle
Avant d'entrer dans le vif du sujet, nous devons enclencher le traitement de la fonction, si et seulement si des caractères ont bien été tapés dans la zone de texte. Ce n'est pas le cas par exemple au premier chargement du formulaire ou encore si l'utilisateur décide d'effacer sa saisie.
  • A la suite du code, ajouter le test suivant :
...
If IsNull(saisie) = False Then

Else
estLettres = ""
End If
...


C'est donc une instruction conditionnelle exploitant la fonction IsNull qui permet de savoir si le contenu de la zone de saisie n'est pas vide.

Dans le cas contraire, nous affectons le nom de la fonction à une chaîne vide (""). Comme vous le savez en effet en VBA, le résultat du traitement d'une fonction est retourné par le nom de la fonction elle-même. De la sorte, nous ne donnons aucune indication en regard de la zone de texte scrutée quand il n'y a rien à dire.

La classe des expressions régulières
Désormais, nous allons pouvoir instancier la classe des expressions régulières grâce à la fonction VBA CreateObject.
  • Dans la première branche de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
If IsNull(saisie) = False Then
Set expReg = CreateObject("VBScript.RegExp")
expReg.Pattern = "^[a-z A-Z]+$"

Else
...


Nous initialisons notre variable objet (Set) en instanciant (CreateObject) la classe des expressions régulières (VBScript.RegExp). Dans l'enchaînement, nous sommes d'ores et déjà en mesure d'exploiter ses propriétés et méthodes avec la propriété Pattern qui permet de définir la séquence remarquable acceptée à la saisie. Entre crochets, nous indiquons que seules les lettres de l'alphabet, qu'elles soient en majuscules ou minuscules, sont autorisées, sans oublier l'espace au milieu. Le symbole + indique que cette inscription est susceptible de se répéter une ou plusieurs fois. L'accent circonflexe (^) détermine que la saisie doit ainsi débuter, soit par des lettres et le dollar ($) que c'est ainsi qu'elle doit se terminer, soit par des lettres. En d'autres termes, les chiffres et tout ce qui ne correspond pas à une lettre de l'alphabet ou à un espace, est proscrit.

Tester la saisie
Ensuite, c'est une méthode précise qui permet de confronter la saisie de l'utilisateur avec la séquence remarquable définie par la propriété Pattern de l'expression régulière. Cette méthode se nomme Test.
  • A la suite du code de la branche du If, ajouter les instructions suivantes :
...
If (expReg.Test(saisie)) Then
estLettres = "Saisie acceptée."
Else
estLettres = "* Saisie refusée. Seules les lettres sont acceptées."
End If
...


Nous passons l'inscription de l'utilisateur à la méthode Test par le biais du paramètre transmis à la fonction (saisie), soit les caractères tapés dans la zone à scruter. Si elle répond favorablement (True), nous affichons un message de succès. Dans le cas contraire (Else), nous refusons la saisie par un message sans équivoque.

Contrôler la saisie avec la fonction
Le code de la fonction est terminé certes et vous en conviendrez, il est très simple. Mais pour l'instant, à aucun moment nous ne l'exploitons pour scruter les caractères frappés par l'utilisateur dans la première zone de texte du formulaire. Il est maintenant question d'établir la liaison.
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire en exécution (ALT + Tab),
  • En haut de la fenêtre Access, cliquer sur l'onglet Accueil pour activer son ruban,
  • A gauche du ruban, cliquer alors sur la flèche du ruban Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire, cliquer sur la zone de texte à droite de la première zone de saisie,
Sélectionner une zone de texte sur un formulaire Access

De cette manière, nous la sélectionnons. C'est elle qui doit guider l'utilisateur pour confirmer ou infirmer sa saisie.
  • Activer alors l'onglet Données de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à sa propriété Source contrôle,
Cette action a pour effet de déclencher le générateur d'expression.
  • Dans la zone de saisie, inscrire l'expression suivante :
=estLettres([lettresSeules])

Liaison entre une zone de texte de formulaire et une fonction VBA Access

Nous appelons notre fonction estLettres et nous la faisons agir sur la première zone de texte du formulaire qui est nommée lettresSeules. Comme vous le savez, dans lasyntaxe Access, les noms de contrôles doivent être mentionnés entre crochets, comme ici.
  • Cliquer sur le bouton Ok du générateur pour valider l'expression,
  • Puis, enregistrer les modifications (CTRL + S),
  • Dès lors, exécuter le formulaire par exemple avec la touche F5 du clavier,
  • Dans la première zone, taper un texte avec des chiffres et valider avec la touche Tab,
Saisie refusée sur le formulaire Access par le code VBA car contient des chiffres

Comme vous pouvez le voir, la fonction réagit instantanément et refuse l'inscription.
  • Transformer la saisie précédente comme suit : ceci est un essai,
  • Puis, valider par la touche Tab (Tabulation) du clavier,
Saisie validée par la fonction VBA Access car ne comporte que des lettres

Là encore, la fonction réagit parfaitement mais cette fois pour autoriser la saisie.

Il s'agit donc d'un moyen fort efficace pour contrôler l'intégrité des informations entrées sur un formulaire avant de les valider et de les insérer dans une table. Le code complet de la fonction VBA que nous avons construite est le suivant :

Public Function estLettres(saisie As Variant) As String
Dim expReg As Object

If IsNull(saisie) = False Then
Set expReg = CreateObject("VBScript.RegExp")
expReg.Pattern = "^[a-z A-Z]+$"
If (expReg.Test(saisie)) Then
estLettres = "Saisie acceptée."
Else
estLettres = "* Saisie refusée. Seules les lettres sont acceptées."
End If
Else
estLettres = ""
End If

Set expReg = Nothing
End Function


 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn