formateur informatique

Vérifier tous les contrôles du formulaire VBA Word

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Vérifier tous les contrôles du formulaire VBA Word
Livres à télécharger


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


Inscription Newsletter    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Vérifier tous les contrôles du formulaire Word

Notre application de facturation automatisée en VBA Word progresse à chaque étape. Un choix d'une référence permet de récolter toutes les informations attachées sur le formulaire. Un clic sur le bouton Ajouter permet d'insérer la ligne de l'article dans la facture sur le document Word en arrière-plan. Et depuis le volet précédent, les montants HT et TTC sont actualisés à chaque nouvelle insertion. Dans ce nouveau volet, nous devons nous assurer que tous les champs du formulaire sont correctement renseignés avant d'implémenter la facture. Mais soyons franc, cette nouvelle étape est surtout un prétexte pour apprendre à parcourir tous les contrôles spécifiques d'un formulaire, ici en l'occurrence les zones de texte (TextBox), avec une boucle For Each.



Classeur Excel et BDD Access à télécharger
Comme il est de coutume désormais, nous devons commencer par réceptionner les sources au dernier indice de développement pour poursuivre la conception de cette application de facturation. Comme lors des volets précédents, après décompression, nous obtenons le document Word, la base de données Access et le sous dossier pour archiver les factures.
  • Double cliquer sur le fichier Word pour l'ouvrir,
  • Puis, cliquer sur les boutons des bandeaux de sécurité,
Formulaire de facturation VBA Word

Le formulaire de facturation apparaît aussitôt au-dessus du document présentant la facture. Si vous choisissez une référence avec la liste déroulante, toutes les informations attachées, issues de la base de données Access, s'inscrivent dans les champs correspondants du formulaire. Et si vous cliquez sur le bouton Ajouter, vous créez la ligne de l'article acheté dans la facture en arrière-plan.

Les variables
Mais avant de valider cet ajout, nous devons nous assurer que tous les champs du formulaire sont bien renseignés. Cette étape est surtout un prétexte pour apprendre à parcourir tous les contrôles spécifiques d'un formulaire nous l'avons dit, ici en l'occurrence les zones de texte, avec une boucle For Each. Et pour cela, nous devons déclarer une variable objet s'apparentant à un contrôle de formulaire au sens large.
  • Fermer le formulaire en cliquant sur la croix de son onglet,
  • Puis, réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Facturation,
Ainsi, nous affichons le formulaire dans sa vue en conception.
  • Sur le formulaire, double cliquer sur le bouton Ajouter,
De cette manière, nous basculons dans la feuille de code, entre les bornes de la procédure événementielle Valider_Click. C'est elle qui procède à la création de la nouvelle ligne dans la facture, à l'achat d'une nouvelle référence depuis le formulaire. C'est donc avant ce traitement que nous devons intervenir pour vérifier que toutes les zones de texte portent bien un contenu.
  • Au début de la procédure, ajouter les deux déclarations et l'affectation suivantes :
...
Private Sub Valider_Click()
Dim Zone As Control
Dim test As Boolean

test = True

If (laLigne > 2) Then
...


Zone est donc une variable objet qui peut représenter n'importe quel contrôle du formulaire. Nous allons l'exploiter pour les parcourir tous. Et nous verrons l'astuce qui nous permettra de cibler uniquement les zones de texte (Contrôles TextBox). La variable test est déclarée comme un booléen initialisé à True. Sans preuve du contraire, nous partons du principe que le formulaire est intégralement renseigné.



Parcourir tous les contrôles du formulaire
C'est dans la boucle que nous devons basculer à False la valeur de ce booléen, si d'aventure nous vérifions que l'une des zones de saisie est vide. C'est cet indicateur qui nous permettra d'avorter le traitement et d'en avertir l'utilisateur pour qu'il complète le formulaire avant d'ajouter l'article à la facture.
  • Juste après l'affectation du booléen, créer la boucle For Each, comme suit :
...
Dim test As Boolean

test = True

For Each Zone In Facturation.Controls
If TypeName(Zone) = "TextBox" Then
If Zone.Value = "" Then test = False
End If
Next Zone


If (laLigne > 2) Then
...


La propriété Controls d'un objet de type formulaire renvoie la collection des contrôles qu'il contient. C'est ainsi que notre variable Zone du même type et placée à gauche de l'instruction, permet de les parcourir tous. C'est alors la fonction TypeName, avec le contrôle en cours d'analyse en paramètre, qui permet de déceler sa nature, par son nom de contrôle. S'il s'agit d'un TextBox, alors nous testons si son contenu est vide (If Zone.Value = ""). Si c'est le cas, nous basculons le booléen à False (test = False). Au passage, vous remarquez la construction sur une ligne de l'instruction conditionnelle, sans le End If. Cette construction est permise lorsqu'une seule action est entreprise.

Poursuivre ou stopper la construction de la facture
Nous devons maintenant exploiter cet indicateur booléen pour décider de la suite du traitement.
  • Après la boucle For Each, ajouter le test suivant :
...
If test = True Then
If (laLigne > 2) Then
'Sélectionner avant d'insérer en-dessous
ActiveDocument.Tables(1).Cell(laLigne - 1, 5).Select
...


Ainsi donc, nous décidons de poursuivre le processus d'implémentation de la facture lorsque le booléen est resté réglé à True. Il indique donc qu'aucune anomalie n'a été détectée sur le formulaire.

Ensuite, nous devons borner cette instruction tout en prévoyant une branche Else pour informer l'utilisateur du défaut à corriger. Cette branche doit intervenir lorsque tout le reste du traitement est passé.
  • Avant le End Sub, ajouter la branche Else suivante :
...
laLigne = laLigne + 1
Qte.Value = 1
Else
MsgBox "Tous les renseignements ne sont pas complétés"
End If

End Sub
...


Nous nous contentons simplement d'informer l'utilisateur que l'ajout ne peut pas être réalisé tant qu'il n'a pas renseigné tous les champs du formulaire. Et pour cela, nous affichons une boîte de dialogue grâce à la fonction MsgBox.
  • Enregistrer les modifications (CTRL + S) et exécuter le formulaire (F5),
  • Sur le formulaire qui surgit, cliquer directement sur le bouton Ajouter,
Instantanément, vous voyez se dresser l'alerte que nous avons programmée dans la branche Else de l'instruction conditionnelle. En l'absence de référence, les champs du formulaire sont forcément vides et l'ajout de l'article ne doit pas être exécuté.
  • Choisir une référence avec la liste déroulante et supprimer le chiffre dans la zone Quantité,
  • Puis, cliquer de nouveau sur le bouton Ajouter,
Contrôler que tous les champs sont renseignés sur un formulaire VBA Word



La sentence est la même alors que seule la quantité n'est pas renseignée cette fois. Cela confirme le parfait fonctionnement de notre boucle For Each. Elle scrute et analyse tour à tour chacune des zones de texte présentes sur le formulaire.

Par contre, si vous définissez une quantité, la construction de la facture peut reprendre normalement. Nous avons donc sécurisé quelque peu l'application de facturation. Dans la prochaine étape, nous allons voir comment dresser des alertes pour empêcher l'utilisateur de commettre des commandes d'articles dont la quantité en stock n'est pas suffisante.

 
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