Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Parcourir tous les contrôles d'un document
Dans ce nouveau volet
VBA Word, nous proposons de développer une solution en deux étapes. Il est question de
valider un formulaire. Ce
formulaire peut être utilisé pour réaliser des
sondages, des
inscriptions ou encore des
identifications. Mais avant de le valider pour archiver les informations en
base de données Access, encore faut-il s'assurer que tous les champs sont bien renseignés. Et pour cela, cette nouvelle
astuce montre comment
parcourir tous les contrôles ActiveX d'un document Word, pour vérifier leurs contenus.
Document source et formulaire
Pour le développement du
code VBA, nous proposons d'appuyer l'étude sur un
document offrant déjà ces
contrôles ActiveX pour former un
formulaire.
Nous découvrons effectivement un
formulaire organisé par des
contrôles ActiveX. Nous dénombrons la présence de trois
listes déroulantes mais aussi de deux
zones de texte ainsi que d'un
bouton pour procéder à la
validation des informations saisies.
Les
listes déroulantes offrent des choix. Vous pouvez le constater en les déployant tour à tour. Elles se remplissent automatiquement à l'
ouverture du document grâce à un
code VBA placé dans une judicieuse
procédure événementielle. Et nous proposons de le constater.
- 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 ThisDocument,
Nous découvrons ainsi le
code VBA déjà présent et attaché au document actif. Il est inscrit dans la
procédure événementielle Document_Open. Il s'exécute donc à chaque ouverture du document. Les
listes déroulantes sont reconnues par leurs noms respectifs : civilite, tAge et logiciel. Et c'est leur
méthode AddItem qui permet de leur injecter les informations souhaitées.
Au clic sur le bouton
Pour débuter, nous devons commencer par créer la
procédure événementielle attachée au
bouton Valider. Le
code VBA de cette procédure doit se déclencher au clic sur ce dernier.
- Revenir sur le document Word (ALT + Tab),
- En haut de la fenêtre, cliquer sur l'onglet Développeur pour activer son ruban,
S'il n'est pas visible dans votre environnement, vous devez le rendre disponible. Pour cela, vous devez réaliser premièrement un clic droit, n'importe où sur le ruban Actif. Dans le menu contextuel, vous devez choisir la commande
Personnaliser le ruban. Dans la liste de droite de la boîte de dialogue qui suit, vous devez cocher la
case Développeur et valider par le bouton Ok.
Pour information, les contrôles que nous avons exploités sont des
contrôles ActiveX. Ils offrent en effet de riches
propriétés et
méthodes. C'est ainsi que nous pouvons les paramétrer et les piloter facilement par le
code VBA. Vous pouvez accéder à ces contrôles en déployant l'affichage du bouton
Outils hérités, en bas de la
section Contrôles du
ruban Développeur.
- Dans cette section Contrôles, cliquer maintenant sur le bouton Mode création,
Grâce à lui, nous pouvons atteindre chacun des contrôles du document en mode conception.
- Dès lors, double cliquer sur le bouton Valider,
Comme vous pouvez le voir, nous basculons aussitôt dans l'
éditeur VBA Word, entre les bornes de la
procédure événementielle valider_Click. Son
code VBA se déclenchera donc au clic sur le
bouton Valider.
Variables et contrôles
Maintenant, nous devons déclarer les variables nécessaires au traitement. Elles ne sont que deux. La première doit être une
variable objet. Elle doit représenter un
contrôle au sens large. C'est grâce à elle, encapsulée dans une
boucle For Each, que nous pourrons passer toutes les
zones de texte et
listes déroulantes en revue. En effet, il n'est pas question de les énumérer tour à tour pour vérifier leurs contenus. Le code serait fastidieux et ne s'ajusterait pas automatiquement si de nouveaux contrôles venaient à prendre place. La seconde variable doit être une
variable de test. Elle doit basculer son indicateur dès qu'un champ vide est détecté. C'est grâce à son indicateur que nous saurons prendre la bonne décision à la
validation du formulaire.
- Dans les bornes de la procédure événementielle, ajouter les deux déclarations suivantes :
...
Dim controle As InlineShape
Dim test As Boolean
...
Aussi surprenant que cela puisse paraître, un
contrôle ActiveX est considéré en effet comme une vulgaire
forme géométrique (InlineShape) comme le sont les formes de dessin, accessibles depuis le ruban insertion. Mais nous le verrons, ce type d'objet généraliste permet de descendre dans la hiérarchie pour préciser la nature de la forme et ainsi désigner chaque contrôle. De son côté, la
variable test est déclarée comme un
booléen. Elle ne peut prendre que deux valeurs (True ou False soit Vrai ou Faux). Et justement, nous devons initialiser l'état de départ de cette variable.
- A la suite du code VBA, ajouter l'affectation suivante :
...
test = True
...
C'est plutôt original mais nous partons du principe que tous les
champs du formulaire sont correctement renseignés. C'est la
boucle parcourant
chaque contrôle qui doit apporter la preuve du contraire. Et dans cette boucle, nous devons être en mesure d'accéder au contenu de chaque champ pour vérifier s'il est vide ou non.
Boucle For Each sur les contrôles du document
Nous l'avons déjà évoqué, maintenant que la variable représentant une forme au sens large existe, nous devons engager une
boucle capable de les parcourir toutes. L'avantage d'une
boucle For Each est qu'elle s'adapte automatiquement au nombre des contrôles présents.
- Toujours à la suite du code VBA, créer désormais la boucle For Each suivante :
...
For Each controle In ActiveDocument.InlineShapes
Next controle
...
Vous le savez, dans une
boucle For Each, l'objet utilisé (controle) doit être du même type que le groupe d'éléments qu'il parcourt. C'est donc le cas avec la
collection InlineShapes de l'
objet ActiveDocument. Désormais, cette boucle parcourt toutes les formes recensées dans le document actif.
Tester le contenu des contrôles ActiveX
Maintenant et nous l'avons annoncé, nous devons atteindre le
contenu textuel de
chaque forme ainsi parcourue. Une
instruction conditionnelle est donc nécessaire pour réaliser le test. Mais ces objets de forme ne proposent pas de propriété permettant d'atteindre leurs contenus. En revanche, elles offrent des
propriétés et
objets enfants qui permettent d'y descendre.
- Toujours à la suite du code et dans la boucle, ajouter l'instruction conditionnelle suivante :
...
If (controle.OLEFormat.Object.Value = "") Then
test = False
Exit For
End If
...
Nous descendons donc dans la hiérarchie grâce à la
propriété OLEFormat qui permet de désigner l'
objet ActiveX (Object) pour atteindre sa
propriété Value, soit son contenu. Nous testons s'il est vide. Si cette condition est vérifiée, nous basculons l'état de la
variable booléenne Ã
False et nous quittons la boucle (Exit For). En effet, il ne nous en faut pas plus. Nous savons d'ores et déjà qu'au moins l'un des champs n'a pas été renseigné. Nous devons donc stopper le traitement et en informer l'utilisateur.
Valider ou invalider l'inscription
L'issue de ce premier volet est toute trouvée pour cette application. Si le
booléen répond favorablement (True), nous devons engager l'
inscription des informations fournies en
base de données. Et ce morceau, nous l'aborderons dans la prochaine partie. Le cas échéant (False), le traitement doit être avorté et l'utilisateur doit en être informé pour renseigner les informations manquantes.
- Après la boucle, ajouter l'instruction conditionnelle suivante :
...
If (test = False) Then
MsgBox "Tous les champs doivent être renseignés pour valider l'inscription"
Else
MsgBox "Les réponses sont acceptées - Le formulaire est prêt à être validé"
End If
...
C'est donc une simple
fonction MsgBox qui signe le verdict à ce stade. Mais elle concrétise bien le cas dans la mesure où elle confirme que nous avons bien réussi Ã
parcourir tous les contrôles ActiveX du document. Et c'est ce que nous entendons vérifier.
- Basculer sur le document Word (ALT + Tab),
- Dans le ruban Développeur, cliquer sur le bouton Mode Création,
Ainsi, nous désactivons le mode conception pour exploiter le
formulaire en production.
- Renseigner quelques zones et listes déroulantes, mais pas complètement,
- Puis, cliquer sur le bouton Valider,
Comme vous pouvez le constater, la sentence est sans appel. Des informations manquantes ont été décelées grâce à notre
boucle permettant de
parcourir tous les contrôles ActiveX du document. En conséquence, la route est barrée et l'exécution est stoppée.
En revanche, si vous remplissez les champs manquants et que vous validez l'inscription, cette fois le message est beaucoup plus accueillant. Il annonce le traitement à suivre pour l'
injection en base de données. C'est un sujet à part entière. C'est la raison pour laquelle nous le développerons dans le volet suivant.
Le code complet de la
procédure VBA que nous avons construite est le suivant :
Private Sub valider_Click()
Dim controle As InlineShape
Dim test As Boolean
test = True
For Each controle In ActiveDocument.InlineShapes
If (controle.OLEFormat.Object.Value = "") Then
test = False
Exit For
End If
Next controle
If (test = False) Then
MsgBox "Tous les champs doivent être renseignés pour valider l'inscription"
Else
MsgBox "Les réponses sont acceptées - Le formulaire est prêt à être validé"
End If
End Sub