formateur informatique

Ajouter dans une autre base de données en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Ajouter dans une autre base de données en VBA Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Ajouter dans une base externe

Avec les deux précédents volets, nous avons appris à articuler des listes déroulantes entre elles et sur cette base à produire l'extraction des informations concordantes à partir d'une source externe. Dans ce nouveau chapitre, nous proposons de faire le cheminement inverse pour insérer de nouvelles informations, depuis un formulaire local, dans une base de données distante.

Base de données Access à télécharger
Pour produire cette solution, nous suggérons d'appuyer les travaux sur un formulaire Access d'ajout, mais n'agissant qu'en local pour l'instant. Comme vous pouvez le voir, la décompression livre deux fichiers Access. Le premier se nomme formulaire-d-ajout-original.accdb. Il permet déjà l'ajout d'enregistrements dans une table locale et ce, sans l'appui du code VBA Access. Le second se nomme source.accdb. Il s'agit de la base externe dans laquelle nous devons insérer les nouvelles informations, issues des demandes réalisées depuis le formulaire local de la première base de données. Il héberge la même table que le premier fichier.
  • Double cliquer sur le fichier formulaire-d-ajout-original.accdb pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire Ajout_biens,
Nous découvrons un formulaire permettant de créer un nouveau bien immobilier à archiver dans la table nommée Biens.

Formulaire Access pour ajouter de nouvelles données sans code VBA

Si vous remplissez tous les champs, que vous cliquez sur le bouton Ajouter et que vous affichez les derniers enregistrements de la table Biens, vous constatez que la nouvelle ligne d'informations a parfaitement été insérée. Ce formulaire Access d'ajout, nous l'avions conçu à l'occasion d'une précédente formation.

Nouveaux enregistrements ajoutés dans la table Access par un formulaire d-insertion

Et cette solution ne fait pas appel au code VBA comme nous l'avons dit. Ce sont des macros qui l'articulent. Mais désormais, la problématique est toute autre. Par le biais de ce formulaire, nous souhaitons continuer de créer de nouveaux biens immobiliers mais à archiver cette fois dans la table de la base de données externe, la base source.accdb.

La procédure VBA
La première action que nous devons entreprendre consiste à remplacer la macro associée au clic sur le bouton par une procédure de code VBA.
  • Fermer la table Biens,
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton Ajouter pour le sélectionner,
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
  • Supprimer la macro incorporée associée au clic sur le bouton,
Supprimer la macro incorporée du bouton pour la remplacer par du VBA Access

C'est ainsi que nous allons pouvoir la remplacer par un code VBA.
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
Nous basculons dans l'éditeur VBA Access entre les bornes de la procédure Commande43_Click. Ce bouton n'avait donc pas été nommé. En effet, jusqu'alors la solution était animée par des actions de macro. Avec le VBA, il est toujours judicieux d'apporter des noms explicites sur les objets pour les piloter plus facilement. Qu'à cela ne tienne, nous continuerons ainsi.

La référence d'Access
Pour piloter les objets d'une base de données externe, une référence doit être ajoutée au projet. Mais nous avions anticipé et nous proposons de le constater.
  • En haut de l'éditeur, cliquer sur le menu Outils,
  • Dans les propositions, choisir la rubrique Références,
Référence au projet Access pour piloter les objets de base de données en VBA

Comme vous le voyez, la référence à la librairie Microsoft Office 16.0 Access database engine Object Library est effectivement cochée.
  • Cliquer sur le bouton Ok pour revenir sur la feuille de code,
Les variables
Pour débuter, nous avons besoin de quelques variables, notamment pour prendre possession de la base de données externe.
  • Dans les bornes de la procédure, ajouter les déclarations suivantes :
...
Dim base As Access.Application: Dim requete As String
Dim chemin As String
...


La variable base est typée comme un objet Access.Application. Cette déclaration est rendue possible grâce à la référence ajoutée au projet. C'est grâce à cet objet que nous allons pouvoir créer une nouvelle instance d'Access pour pointer sur la base de données externe.

Nous typons les deux autres variables comme des textes (As String). La première (requete) doit stocker la syntaxe de la requête SQL d'insertion à exécuter ensuite sur la source externe. La seconde (chemin) doit mémoriser le chemin d'accès à cette source d'informations. C'est grâce à ce chemin que la nouvelle instance d'Access pourra pointer sur la base de données à attaquer.

L'instance d'Access
Ensuite et nous le savons, c'est la fonction VBA CreateObject qui permet d'instancier des classes selon la valeur qui lui est transmise en paramètre. Avec l'argument Access.Application, elle permet de créer une nouvelle instance d'Access. C'est ce que nous allons faire.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
Set base = CreateObject("Access.Application")
chemin = CurrentProject.Path & "\source.accdb"
base.OpenCurrentDatabase chemin
base.Visible = False
...


Nous initialisons (Set) donc l'objet base sur une nouvelle instance d'Access. C'est ainsi qu'il hérite des propriétés et méthodes nécessaires pour piloter les objets d'une base de données. Grâce à la propriété Path de l'objet CurrentProject, nous récupérons le chemin d'accès à la base de données en cours. Puis, nous lui associons le nom de la source externe (\source.accdb). C'est ainsi que nous pouvons passer ce chemin à la méthode héritée (OpenCurrentDatabase). Désormais, notre objet base pointe sur la source externe. Ensuite, nous réglons la propriété héritée Visible à False pour qu'aucune nouvelle fenêtre d'Access ne s'affiche à l'écran.

La requête insertion
Maintenant, il est question de construire la requête SQL d'insertion permettant d'enregistrer chaque information du formulaire dans chaque champ respectif de la table Biens. Certes, il serait tout d'abord opportun de contrôler la saisie sur ce formulaire et de vérifier qu'aucune donnée n'est manquante. Mais nous avons déjà réalisé des travaux sur ces sujets à l'occasion de précédentes formations. Donc ici, nous choisissons de rester focalisés sur la technique permettant d'enrichir une base externe.
  • A la suite du code, ajouter l'instruction VBA suivante :
...
requete = "INSERT INTO Biens(bien_ville, bien_superficie, bien_nb_pieces, bien_prix, bien_distance, bien_terrain, bien_garage, bien_excl) VALUES ('" & Ville.Value &"'," & superficie.Value & "," & nb_pieces.Value & "," & prix.Value & "," & distance.Value & "," & Terrain.Value & "," & garage.Value& "," & Exclu.Value & ")"
...


Nous engageons donc une classique requête d'insertion sur la table Biens (INSERT INTO Biens). Nous énumérons tous les champs à renseigner dans cette table, en les séparant les uns des autres par une virgule. Puis, nous indiquons quelles sont les valeurs à y insérer (Values). Il s'agit d'une succession d'assemblages entre des parties statiques (notamment pour les virgules de séparation) et de parties dynamiques pour énumérer les valeurs des zones du formulaire, dans le même ordre que les champs de la table.

Attention à la première donnée. La ville est un texte. Elle doit donc être encadrée de simples côtes ('" & Ville.Value & "'). Toutes les autres sont des valeurs numériques ou booléennes. Donc les côtes ne doivent pas intervenir pour ces informations.

Exécuter la requête
Il nous reste encore à exécuter cette requête sur la base de données externe. Et pour cela, notre objet base a hérité d'une méthode dédiée.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
base.CurrentDb.Execute requete

base.Quit
Set base = Nothing
...


L'objet CurrentDb de notre objet base permet de déployer la méthode Execute à laquelle nous passons la syntaxe SQL d'insertion et le tour est joué. Ensuite, nous fermons l'instance (Quit) et nous détruisons l'objet en le réinitialisant (Set) à Nothing.

Il est temps de tester la solution.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • Exécuter ce dernier, par exemple en enfonçant la touche F5 du clavier,
  • Renseigner tous les champs et cliquer sur le bouton Ajouter,
Alimenter une base de données Access externe avec un formulaire en VBA

L'injection s'effectue très rapidement. Certes, un message de confirmation (MsgBox) aurait été opportun à l'issue. Mais encore une fois, nous focalisons l'étude sur l'objectif que nous nous sommes fixés.

Si vous affichez la table Biens de la base de données en cours, vous remarquez, contrairement au résultat de la solution initiale, qu'aucune insertion n'y a été réalisée. En revanche, si vous affichez la table Biens de la source externe, vous constatez l'intégration distante du nouvel enregistrement, grâce à ce code VBA Access.

Enrichir une table Access distante par le code VBA

 
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