formateur informatique

Remplir un formulaire Word avec une base de données Access

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Remplir un formulaire Word avec une base de données Access
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 :


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.

Formulaire VBA Word de facturation automatisée

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.

Table de base de données Access à questionner par le code VBA Word

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,
Formulaire VBA Word de facturation

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,
Afficher le formulaire (UserForm) VBA Word en mode création

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.

Procédure VBA pour exécuter un code au chargement du formulaire Word

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,
Ajouter la référence à Access dans un projet VBA Word

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 :
...
Dim cheminBd As String: Dim requete As String
Dim enr As Recordset: Dim base As Database
...


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 :
...
cheminBd = ThisDocument.Path & "\articles.accdb"
Set base = DBEngine.OpenDatabase(cheminBd)
Set enr = base.OpenRecordset("SELECT produit_ref FROM Produits", dbOpenDynaset)
...


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 :
...
enr.MoveFirst
Do
Ref.AddItem enr.Fields("produit_ref").Value
enr.MoveNext
Loop Until enr.EOF
...


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 :
...
enr.Close
base.Close
Set enr = Nothing
Set base = Nothing
...


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,
Remplir la liste déroulante du formulaire Word avec les références de la table Access par le code VBA

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 :
...
Dim cheminBd As String
Dim enr As Recordset: Dim base As Database

cheminBd = ThisDocument.Path & "\articles.accdb"
Set base = DBEngine.OpenDatabase(cheminBd)
...


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 :
...
Set enr = base.OpenRecordset("SELECT produit_nom, produit_prix, produit_stock FROM Produits WHERE produit_ref='" & Ref.Value & "'", dbOpenDynaset)
...


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 :
...
enr.MoveFirst
Nom.Value = enr.Fields("produit_nom").Value
Prix.Value = enr.Fields("produit_prix").Value
Stock.Value = enr.Fields("produit_stock").Value
...


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 :
...
enr.Close
base.Close
Set enr = Nothing
Set base = Nothing
...
  • 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.

Importer les données Access attachées à la référence choisie depuis un formulaire VBA Word

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.

 
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