Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer : 
Remplir automatiquement un formulaire 
Ce nouveau sujet est l'occasion de débuter une nouvelle aventure en 
VBA Word . Nous proposons de développer une solution de 
facturation complètement automatisée  par le biais d'un 
formulaire  se connectant à une 
base de données Access . Cette solution, nous allons la décomposer en six volets car il y a du pain sur la planche. Dans ce premier chapitre, nous devons nous contenter de 
remplir les champs  d'un 
formulaire VBA Word , au choix d'une référence à 
ajouter à la facture .
L'exemple illustré par la capture présente la solution finalisée. L'utilisateur choisit une référence, émanant d'une 
base de données Access , avec une 
liste déroulante . Instantanément, les informations attachées sont rapatriées dans les 
zones de texte . Il définit une 
quantité achetée  et clique sur le 
bouton Ajouter . Dès lors, une nouvelle ligne se crée dans le 
tableau de la facturation , en arrière-plan du 
formulaire  sur le 
document Word . Puis, il poursuit avec une nouvelle référence et ainsi de suite. A l'issue, il clique sur le 
bouton Créer . La 
facture  est alors générée au 
format PDF  et les 
stocks  sont 
mis à jour  dans la 
base de données  source.
Document Word et base Access à télécharger 
Pour la création de cette 
application de facturation , nous proposons de nous appuyer sur des sources existantes. Elles offrent le 
document Word  avec son 
formulaire  ainsi que la 
base de données Access  et un sous dossier pour 
archiver les factures  au 
format PDF .
La décompression livre en effet le 
document Word  avec l'
extension docm  pour le 
VBA , la 
base de données Access  et le 
sous dossier  nommé 
archives .
La base de données Access 
Concernant cette base de données, il est important de connaître sa structure pour pouvoir la questionner. 
Double cliquer sur le fichier articles.accdb  pour l'ouvrir dans Access , 
Comme l'indique le volet de navigation sur la gauche de l'écran, cette petite 
base de données  n'est constituée que de 
deux tables . Nous exploiterons la 
table TempProduits  dans les volets suivants. Elle est destinée à mémoriser les 
quantités d'articles achetés  pour réaliser la 
mise à jour des stocks  dans la 
table Produits  une fois la 
facture validée . 
Double cliquer sur la table Produits  pour l'afficher en mode feuille de données , 
Comme vous pouvez le voir, elle propose des 
articles vestimentaires  à la vente.
La 
référence  est cruciale. C'est elle qui doit permettre à l'opérateur de désigner un produit acheté. Son champ se nomme 
produit_ref . Et pour construire la 
facture sur le document Word , nous aurons besoin de rapatrier les informations attachées, respectivement stockées dans les 
champs produit_nom  , 
produit_prix  et 
produit_stock .
Le formulaire Word de facturation 
Il est temps de découvrir le 
formulaire  existant et qu'il est question d'implémenter par le 
code VBA .
Fermer la base de données Access , 
Dans le dossier de décompression, double cliquer sur le fichier remplir-formulaire.docm , 
Cliquer sur les boutons des bandeaux de sécurité pour accéder aux ressources complètes, 
Comme vous pouvez le voir, un 
formulaire  est d'ores et déjà programmé pour s'imposer à l'
ouverture du document Word .
Dans cette première phase, nous devons faire en sorte que la 
liste déroulante  soit chargée des 
références  issues de la 
table Produits  de la 
base de données Access . Ensuite, au choix de l'une de ces 
références , nous devons rapatrier les informations attachées dans les 
champs correspondants  du 
formulaire .
C'est ainsi que nous disposerons de toutes les données pour permettre à l'utilisateur d'
ajouter une nouvelle ligne à la facture  qui se propose sur le 
document Word , en arrière-plan du 
formulaire .
Charger la liste déroulante avec les données Access 
Nous l'avons dit, la première étape consiste à 
charger la liste déroulante . Elle est le départ de tout. Et pour cela, nous devons 
établir la connexion à la base de données Access  par le 
code VBA Word .
Fermer le formulaire Word  en cliquant sur la croix de son onglet,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  en 
mode conception . 
Dès lors, double cliquer sur un emplacement vide du formulaire , 
Nous basculons ainsi dans la feuille de code entre les bornes de la 
procédure événementielle UserForm_Click . Mais le 
chargement de la liste déroulante  des références ne doit pas intervenir au clic sur le formulaire. Il doit intervenir au 
chargement  de ce dernier. Et pour cela, il existe un événement dédié. Il se nomme 
Activate .
En haut de l'éditeur de code, déployer la liste déroulante de droite , 
Puis, choisir l'événement Activate , 
Cette action a pour effet de créer la 
procédure événementielle UserForm_Activate . C'est elle qui va déterminer le 
chargement du formulaire .
De fait, la précédente procédure n'est plus utile. 
Sélectionner l'intégralité de la procédure UserForm_Click , 
Puis, la supprimer (Touche Suppr), 
En haut de l'éditeur VBA , cliquer sur le menu Outils , 
Dans les propositions, cliquer sur la rubrique Références , 
Il existe une librairie essentielle que nous avons pris soin d'ajouter au projet en amont. Elle se nomme 
Microsoft Office 16.0 Access database engine Object . Le numéro (16.0) dépend de votre 
version d'Access . Sans elle, il n'est pas possible de piloter les 
objets de base de données Access  par le 
code VBA . Donc, si elle n'est pas déclarée dans votre projet, vous devez la cocher.
Cliquer sur le bouton Ok pour revenir sur la feuille de code, 
Dans les bornes de la procédure UserForm_Activate , ajouter les déclarations de variables  ... 
Nous déclarons la 
variable cheminBd  comme un 
String , soit comme un texte. Son rôle est de mémoriser le 
chemin d'accès  à la 
base de données Access  pour pouvoir l'attaquer. C'est par anticipation que nous déclarons la 
variable requete , elle aussi comme un 
String . Dans l'une des phases de ce projet, nous l'utiliserons pour vider la 
table temporaire  destinée à mémoriser les quantités à mettre à jour dans les stocks. Enfin, nous déclarons deux 
variables de base de données , grâce à la référence ajoutée au projet. La seconde, nommée 
base  et de 
type Database , est destinée à prendre possession de la 
base de données Access , identifiée par son chemin d'accès. La première, nommée 
enr  et de 
typeRecordset , est vouée à 
piloter les enregistrements  de cette base.
Après les déclarations de variables , ajouter les initialisations  suivantes :... 
C'est la 
propriété Path  de l'
objet ThisDocument  qui renseigne sur le 
chemin d'accès  à l'
application locale . Nous lui concaténons un antislash (\) pour entrer dans le dossier, et le nom de la base de données à piloter. Ensuite, nous procédons aux 
instanciations de classes  grâce au 
mot clé Set . Grâce à la 
méthode OpenDatabase  de l'
objet DBEngine , l'
objet base  hérite des 
propriétés et méthodes  pour manipuler la 
base de données  dont le 
chemin d'accès  est passé en paramètre de la méthode. Dès lors, cet 
objet  peut exploiter la 
méthode OpenRecordset  avec une 
requête Sql  en paramètre. Elle livre l'accès aux références (produit_ref) de la 
table Produits . C'est donc l'
objet enr , ainsi initialisé, qui pilote désormais ces 
enregistrements . Grâce à lui, nous allons pouvoir 
charger la liste déroulante .
Maintenant, nous devons placer le pointeur de lecture sur le 
premier enregistrement  résultant de cette 
requête . Ensuite, nous devons les 
parcourir tous  grâce à une 
boucle  pour récupérer 
chaque référence  tour à tour et les ajouter dans la 
liste déroulante .
A la suite du code, ajouter les instructions VBA  suivantes : ... 
Grâce à la précédente instanciation, l'
objet enr  a lui aussi hérité de 
propriétés et méthodes . La 
méthode MoveFirst  est très parlante. Elle permet de placer le point de lecture sur le 
premier enregistrement , soit sur la 
première référence . Ensuite, nous engageons une 
boucle de lecture  (Do) sur l'
intégralité des enregistrements  (Loop Until enr.EOF). La 
propriété EOF  de l'
objet enr  signifie 
End Of File , soit 
fin du fichier . Comprenez : Jusqu'au 
dernier enregistrement . Et donc, à chaque passage dans cette boucle, nous ajoutons la nouvelle référence grâce à la 
méthode AddItem  de l'
objet de liste déroulante  que nous avons nommé 
Ref . Vous pouvez le vérifier en sélectionnant le contrôle sur le formulaire en conception et en consultant la 
fenêtre propriétés . C'est la 
propriété Fields  de l'
objet enr  qui permet de désigner un champ par son nom passé en paramètre. Dès lors, la 
propriété enfant Value  permet d'accéder à son contenu pour le récupérer, sur l'
enregistrement en cours  de lecture bien sûr.
Nous n'en avons pas tout à fait terminé avec le développement de cette procédure. Comme nous l'avons déjà appris, notamment au travers des 
développements en VBA Excel , les 
objets de base de données  doivent être déchargés à l'issue.
A la suite du code, ajouter les instructions suivantes : ... 
Nous exploitons tout d'abord la 
méthode Close  sur les 
deux objets de base de données , afin de les 
fermer . Puis, nous les réinitialisons à 
Nothing  (Rien) pour les 
vider  complètement de la 
mémoire  de l'ordinateur.
Enregistrer les modifications (CTRL + S), 
Puis, exécuter le code avec la touche F5 du clavier , 
Sur le formulaire qui apparaît, déployer la liste déroulante des références , 
Comme vous pouvez l'apprécier, la 
base de données Access  a été questionnée en un temps record pour livrer 
toutes les références  qui vont nous permettre de construire pas à pas l'
application de facturation en VBA Word .
Remplir les champs du formulaire Word 
Désormais, le choix de l'une de ces références doit permettre de 
remplir les champs du formulaire  avec les informations qui lui sont attachées. Ces données devront figurer sur les lignes de la 
facture Word . Nous devons donc nous reconnecter à la 
base de données , lorsqu'une référence est choisie.
Fermer le formulaire Word  en cliquant sur la croix de son onglet,Sur le formulaire en conception , double cliquer sur la liste déroulante , 
Grâce à cette action, nous retournons dans la 
feuille de code  mais cette fois, entre les bornes de la 
procédure événementielle Ref_Change . Son code se déclenchera à chaque fois qu'une nouvelle référence est choisie.
Puisqu'il s'agit de récolter les données attachées à la référence désignée, nous devons commencer par déclarer les mêmes variables que précédemment.
Dans les bornes de la procédure, ajouter les déclarations  et affectations  suivantes : ... 
C'est la 
requête sélection  qui change pour que l'
objet enr  puisse prélever le 
nom , le 
prix  et le 
stock  de la référence choisie. Donc, une 
clause Where  doit être envisagée.
A la suite du code, initialiser la variable enr  comme suit : ... 
Nous récupérons donc les informations sur le nom, le prix et le stock à partir de la 
table Produits  mais pour lesquelles la 
référence produit  est identique à celle désignée par l'utilisateur avec la liste déroulante (WHERE produit_ref='" & Ref.Value & "'"). Attention de bien respecter l'alternance des simples et doubles côtes pour encadrer la valeur de la référence, qui est une information de type texte.
Un seul enregistrement résultera de cette requête. Pour prélever ses informations, nous avons néanmoins besoin de placer le pointeur de lecture dessus, grâce à la même méthode que précédemment.
A la suite du code, ajouter les instructions VBA  suivantes : ... 
Les 
champs du formulaire  se nomment respectivement 
Nom , 
Prix  et 
Stock . Grâce à leur 
propriété Value , nous les remplissons des informations correspondantes prélevées dans les champs respectifs grâce à la 
propriété Fields  de l'
objet enr .
Pour finir, nous ne devons pas oublier de décharger les 
objets de base de données .
A la suite du code, ajouter les instructions VBA  suivantes : ... 
Enregistrer les modifications (CTRL + S) et exécuter le code (F5), 
Sur le formulaire, choisir une référence  avec la liste déroulante, 
Comme vous pouvez le voir, les informations concordantes sont aussitôt importées dans les champs respectifs du formulaire.
La donnée sur le 
stock disponible  est une indication qu'il nous faudra contrôler à l'avenir par le 
code VBA . C'est la raison pour laquelle elle apparaît grisée. C'est sa 
propriété Enabled  qui a été réglée à 
False  en amont. L'utilisateur n'a plus qu'à saisir une quantité achetée. C'est alors un 
code VBA  que nous devons développer, qui doit se déclencher au 
clic sur le bouton Ajouter , pour implémenter la 
facture Word  avec ces informations ajoutées au coup par coup.