formateur informatique

Formulaire d'inscription Word en base de données Access

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Formulaire d'inscription Word en 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 :


Inscription en base Access

Dans le précédent volet, nous avons appris à parcourir tous les contrôles ActiveX composant un formulaire sur le document Word. Grâce à cette technique, nous avons pu vérifier le contenu de chaque champ pour nous assurer que toutes les informations requises étaient bien renseignées. Dans la suite logique, nous devons maintenant déployer le code VBA Word pour récupérer les données de ces champs et les archiver en base de données Access.



Document et base à télécharger
Pour la mise en place de cette nouvelle astuce VBA Word, nous devons récupérer ce formulaire avec la base de données permettant l'archivage des informations saisies. Comme vous pouvez le voir, la décompression livre un document Word et une base de données Access.
  • Double cliquer sur le fichier inscrits.accdb pour l'ouvrir dans Access,
  • Puis, dans le volet de navigation sur la gauche, double cliquer sur la table t_inscrits,
Nous affichons ainsi son contenu en mode feuille de données.

Table Access pour inscrire les informations depuis le formulaire Word

Les informations doivent être respectivement inscrites dans les champs ins_civilite, ins_nom, ins_prenom, ins_age et ins_logiciel. Il s'agit strictement des données à renseigner dans les contrôles ActiveX du formulaire Word.
  • Fermer la base de données Access,
  • Puis, double cliquer sur le fichier archiver-sondage-bdd.docm pour l'ouvrir dans Word,
  • Cliquer ensuite sur les boutons des bandeaux de sécurité,
Formulaire Word pour inscription en base de données Access par le code VBA

Nous retrouvons bien le formulaire du volet précédent avec ses contrôles ActiveX.
  • 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,
Ainsi, nous affichons la feuille de code associée au document actif au centre de l'écran. Nous retrouvons tout d'abord la procédure Document_Open pour charger les listes déroulantes à l'ouverture du document. Nous avions expliqué son fonctionnement lors du volet précédent. Ensuite, nous découvrons la présence d'une procédure un peu spéciale. Nous avons encapsulé le traitement consistant à parcourir tous les contrôles ActiveX dans une fonction :

Function verif() As Boolean
Dim controle As InlineShape

verif = True

For Each controle In ActiveDocument.InlineShapes
If (controle.OLEFormat.Object.Value = "") Then
verif = False
Exit For
End If
Next controle

End Function


Cette fonction se nomme verif. C'est elle qui indique si tous les champs ont bien été renseignés en retournant le booléen True. Cette fonction doit donc être appelée avant de procéder à l'inscription de l'utilisateur. En effet, en cas d'anomalie (False), le traitement doit être avorté.

Valider au clic sur le bouton
Pour engager la procédure d'inscription, nous devons déclencher un code VBA Word au clic sur le bouton Valider. Il s'agit du dernier contrôle ActiveX, tout en bas du formulaire.
  • Revenir sur le document Word (ALT + Tab),
  • En haut de la fenêtre Word, cliquer sur l'onglet Développeur pour afficher son ruban,
  • Dans la section Contrôles de ce ruban, cliquer sur le bouton Mode Création,
  • Dès lors, double cliquer sur le bouton Valider en bas du formulaire,
Nous retournons ainsi dans l'éditeur VBA Word mais cette fois dans les bornes de la procédure valider_Click ainsi créée. C'est cette procédure que nous devons implémenter pour engager le processus d'inscription en base de données Access, au clic sur le bouton Valider donc.



La déclaration des variables
Pour débuter le traitement, nous avons besoin de variables capables de récolter les informations saisies par l'utilisateur dans les contrôles ActiveX. Ce sont elles que nous utiliserons dans une requête pour insérer leurs données dans la table de la base de données Access. Et donc, dans un deuxième temps, nous aurons besoin de variables objets pour piloter la base de données distante et ses enregistrements.
  • Dans les bornes de la procédure valider_Click, ajouter les déclarations de variables suivantes :
...
Dim laCivilite As String
Dim leNom As String: Dim lePrenom As String
Dim lAge As String: Dim leLogiciel As String
...


Très simplement, nous déclarons les cinq variables correspondant aux cinq champs dont il s'agit de récupérer les informations. Naturellement, nous les typons comme des textes (As String).

Maintenant, il est question de déclarer les variables permettant de prendre possession de la base de données et des enregistrements de sa table. Mais pour cela, une référence doit tout d'abord être ajoutée au projet. Cette référence concerne Access. C'est elle qui offre les objets, propriétés et méthodes nécessaires pour piloter la base de données depuis Word.
  • En haut de l'éditeur, cliquer sur le menu Outils,
  • Dans les propositions, choisir la commande Références,
  • Dans la boîte de dialogue, cocher la case Microsoft Office 16.0 Access database ...,
Liaison entre une base de données Access et un projet VBA Word

Logiquement, cette référence doit déjà être intégrée car nous avions pris soin de l'ajouter au projet. Mais sachez que pour tout développement faisant appel aux ressources d'Access, elle doit être ajoutée.
  • Cliquer sur le bouton Ok de la boîte de dialogue,
  • A la suite des déclarations précédentes, ajouter les déclarations suivantes :
...
Dim cheminBd As String: Dim requete As String
Dim enr As Recordset: Dim base As Database
...


La variable cheminBd est typée comme un texte (String). Elle doit renseigner sur le chemin d'accès complet à la base de données Access dans laquelle il s'agit d'insérer les nouvelles informations. La variable requete doit recevoir la syntaxe d'insertion des données. Elle est donc typée naturellement elle aussi comme un texte. Ensuite, nous déclarons respectivement les variables objets enr et base, grâce à la référence que nous avons ajoutée au projet. La seconde, déclarée comme un objet de base de données (Database), doit instancier la classe Access pour hériter de ses propriétés et méthodes. De fait, elle livrera une méthode permettant à la première, déclarée comme un objet manipulant les enregistrements (Recordset), de précisément piloter ces enregistrements depuis la table distante.

Tester le formulaire
Maintenant que les variables existent, nous allons pouvoir les exploiter. Mais avant de lancer tout traitement, nous devons nous assurer que tous les renseignements ont bien été fournis. Pour cela, il suffit d'appeler la fonction verif, celle dont nous avons développé le code à l'occasion du volet précédent.
  • Après les variables, ajouter l'instruction conditionnelle suivante :
...
If (verif = True) Then

Else
MsgBox "Tous les renseignements sont requis." & Chr(13) & "L'inscription ne peut pas être finalisée."
End If
...


Si la fonction renvoie le booléen True, nous prévoyons la branche pour procéder au processus d'inscription. Dans le cas contraire (else), nous indiquons à l'utilisateur qu'il doit compléter le formulaire s'il souhaite s'inscrire.



Récolter les valeurs des contrôles
Si les informations sont correctement remplies donc, nous devons ensuite récolter les valeurs saisies dans les contrôles ActiveX pour les stocker dans les variables prévues à cet effet. Ces contrôles ActiveX sont respectivement nommés civilite, nom, prenom, tAge et logiciel. Sur le document Word, vous pouvez le constater en activant le mode création et en affichant la fenêtre de propriétés pour un contrôle sélectionné.
  • Dans la première branche de l'instruction conditionnelle, ajouter le code VBA suivant :
...
laCivilite = civilite.Value
leNom = nom.Value
lePrenom = prenom.Value
lAge = tAge.Value
leLogiciel = logiciel.Value
...


C'est effectivement la propriété Value d'un contrôle ActiveX qui permet d'accéder à son contenu. Et ces contenus sont désormais tous stockés dans les variables respectives.

Connexion à la base de données
Ces données, nous devons les insérer dans les champs correspondants de la base de données Access. Mais avant cela, nous devons nous assurer que l'utilisateur n'est pas déjà inscrit pour ne pas risquer des doublons. Et pour ce faire, nous devons commencer par établir la connexion à la base de données grâce aux variables objets que nous avons déclarées.
  • A la suite du code dans le If, ajouter les deux instructions VBA suivantes :
...
cheminBd = ThisDocument.Path & "\inscrits.accdb"
Set base = DBEngine.OpenDatabase(cheminBd)
...


Tout d'abord, nous stockons le chemin d'accès à la base de données dans la variable cheminBd. C'est la propriété Path de l'objet ThisDocument qui donne l'adresse du dossier. Nous la concaténons avec le nom du fichier préfixé d'un antislash pour bien entrer dans ce dossier. Ensuite, nous instancions la classe permettant de piloter une base de données grâce à la méthode OpenDatabase de l'objet DBEngine. Désormais, l'objet base pointe sur la base de données du dossier local grâce au chemin reconstitué qui est passé en paramètre de la méthode OpenDatabase. Et cet objet va offrir des méthodes pour piloter les enregistrements. Il faut bien comprendre que cette instanciation a été rendue possible grâce à la référence ajoutée au projet.

Vérifier l'existence de l'inscrit
Nous l'avons évoqué précédemment, avant de chercher à insérer ces données, nous devons nous assurer que l'utilisateur n'est pas déjà inscrit. Et pour cela, nous devons vérifier l'existence de la paire Nom/Prénom grâce à une requête Sql exécutée par la méthode OpenRecordset de l'objet base.
  • A la suite du code du If, ajouter les instructions VBA suivantes :
...
Set enr = base.OpenRecordset("SELECT ins_id FROM t_inscrits WHERE ins_nom='" & leNom & "' AND ins_prenom='" & lePrenom & "'", dbOpenDynaset)

If (enr.RecordCount = 0) Then

Else
MsgBox "Vous êtes déjà inscrit(e)"
End If
...


Nous initialisons donc l'objet enr grâce à la méthode OpenRecordset de l'objet base, lui-même fraîchement initialisé. En premier paramètre de cette méthode, nous passons une requête sélection classique sur la table t_inscrits de la base de données Access. Elle engage une double clause Where, soit un double critère sur le nom et le prénom (WHERE ins_nom='" & leNom & "' AND ins_prenom='" & lePrenom & "'"). Il faut veiller à bien respecter l'alternance des simples et doubles côtes dans cette syntaxe. Dans cet assemblage de parties statiques et dynamiques, il faut garder à l'esprit que ces champs sont des informations textuelles. Elles sont donc à encadrer. Désormais, la variable enr dispose des propriétés et méthodes pour piloter les enregistrements résultants de cette requête. C'est ainsi que nous exploitons sa propriété RecordCount pour connaître le nombre d'enregistrements correspondants. Si aucun enregistrement n'est retourné (=0), nous en concluons que nous pouvons poursuivre le processus d'inscription. Le cas échéant (else), nous en informons l'utilisateur avec une boîte de dialogue.



Inscription en base de données Access
C'est maintenant une nouvelle requête qui doit être exécutée. Mais il ne s'agit pas d'une banale requête sélection, il s'agit d'une requête Ajout. Son rôle est d'insérer chaque valeur récoltée par les variables, dans les champs correspondants de la table de la base de données. Et c'est une nouvelle méthode de l'objet base qui va permettre d'exécuter cette requête.
  • Dans la première branche de cette instruction conditionnelle, ajouter ces lignes VBA :
...
requete = "INSERT INTO t_inscrits (ins_civilite, ins_nom, ins_prenom, ins_age, ins_logiciel) VALUES ('" & laCivilite & "','" & leNom & "','" & lePrenom & "','" & lAge & "','" & leLogiciel & "')"
base.Execute requete
MsgBox "Vous êtes désormais inscrit(e)"
...


C'est l'instruction Sql INSERT INTO qui permet de désigner la table d'insertion et d'énumérer les champs ciblés. Seul le champ de la clé primaire n'est pas mentionné puisqu'il est auto-incrémenté. Ensuite, c'est l'instruction Sql VALUES qui permet d'énumérer les valeurs correspondantes à insérer dans les champs respectifs. Comme il s'agit de variables, nous sommes obligés de les concaténer, toujours en respectant l'alternance des simples et doubles côtes, pour les mêmes raisons que précédemment. Dès lors, la méthode Execute de l'objet base déclenche cette requête distante pour procéder à l'inscription des données Word dans la base de données Access. Ensuite, l'utilisateur est informé de son inscription par le biais d'une boîte de dialogue, grâce à la fonction MsgBox.

Fermer les objets de base de données
Ce n'est pas tout à fait terminé. Pour coder proprement, nous devons décharger les objets de base de données de la mémoire. Et ces instructions doivent intervenir à la fin du premier If, avant le Else.
  • Ajouter les quatre lignes VBA suivantes :
...
Else
MsgBox "Vous êtes déjà inscrit(e)"
End If

enr.Close
base.Close
Set enr = Nothing
Set base = Nothing

Else
MsgBox "Tous les renseignements sont requis." & Chr(13) &" L'inscription ne peut pas être finalisée."
End If
...




Inscrire un nouveau candidat
Il ne nous reste plus qu'à tester le fonctionnement de notre formulaire Word d'inscription.
  • Enregistrer les modifications (CTRL + S) et basculer sur le document Word (ALT + Tab),
Maintenant, si vous ne remplissez pas tous les champs et que vous validez l'inscription, le message de neutralisation intervient. En revanche, si vous remplissez correctement le formulaire et que vous cliquez sur le bouton Valider, c'est le message de confirmation qui apparaît.

Renseigner tous les champs du formulaire d-inscription VBA Word

Et si vous souhaitez vérifier que l'inscription s'est effectivement bien déroulée dans la table de la base de données Access, il vous suffit de l'ouvrir pour constater la présence du nouvel enregistrement, issu de Word.

Ajouter des informations dans la base de données Access depuis un formulaire VBA Word

Le code VBA complet que nous avons produit pour établir la connexion entre Word et Access est le suivant :

Private Sub valider_Click()
Dim laCivilite As String
Dim leNom As String: Dim lePrenom As String
Dim lAge As String: Dim leLogiciel As String
Dim cheminBd As String: Dim requete As String
Dim enr As Recordset: Dim base As Database

If (verif = True) Then
laCivilite = civilite.Value
leNom = nom.Value
lePrenom = prenom.Value
lAge = tAge.Value
leLogiciel = logiciel.Value

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

Set enr = base.OpenRecordset("SELECT ins_id FROM t_inscrits WHERE ins_nom='" & leNom & "' AND ins_prenom='" & lePrenom & "'", dbOpenDynaset)

If (enr.RecordCount = 0) Then
requete = "INSERT INTO t_inscrits (ins_civilite, ins_nom, ins_prenom, ins_age, ins_logiciel) VALUES ('" & laCivilite & "','" & leNom & "','" & lePrenom & "','" & lAge & "','" & leLogiciel & "')"
base.Execute requete
MsgBox "Vous êtes désormais inscrit(e)"
Else
MsgBox "Vous êtes déjà inscrit(e)"
End If

enr.Close
base.Close
Set enr = Nothing
Set base = Nothing
Else
MsgBox "Tous les renseignements sont requis." & Chr(13) & "L'inscription ne peut pas être finalisée."
End If

End Sub


 
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