Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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é,
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,
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.