Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Ouvrir une autre base de données
Avec cette nouvelle
astuce VBA Access, nous allons voir comment il est possible d'
ouvrir une autre base de données sur demande, tout en étant en mesure d'en prendre le contrôle. Et pour cela, nous allons piloter un
objet de base de données.
Bases de données Access à télécharger
Pour la mise en place de cette nouvelle astuce, nous proposons de récupérer
deux bases de données Access à faire communiquer.
Comme vous pouvez le voir, la décompression livre effectivement
deux fichiers de base de données.
- Double cliquer sur le fichier filtrer-sorties.accdb pour l'ouvrir dans Access,
- Cliquer sur le bouton Activer le contenu du bandeau de sécurité pour libérer les ressources,
- Dans le volet de navigation sur la gauche, double cliquer sur le formulaire Selection_Sql,
Nous l'affichons ainsi en mode exécution.
Il s'agit d'une interface que nous avions développée à l'occasion d'une
formation VBA Access pour démystifier et apprendre à domestiquer la
syntaxe SQL des requêtes. D'ailleurs, vous pouvez construire une syntaxe dans la zone de saisie et la valider en cliquant sur le
bouton Valider. Si elle est correcte, vous filtrerez les enregistrements de la table societes à votre convenance, dans le sous formulaire placé dans la partie inférieure de l'interface.
Mais le bouton qui nous intéresse ici est le
bouton Source du dessus. A ce stade, si vous cliquez dessus, rien ne se produit encore, fort naturellement. C'est lui qui doit ouvrir l'autre
base de données téléchargée.
La procédure VBA au clic sur le bouton
La première étape que nous devons accomplir consiste à créer la
procédure événementielle qui déclenchera un
code VBA au
clic sur ce bouton.
- 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 Source pour le sélectionner,
- Puis, activer l'onglet Evénement de sa feuille de propriétés,
Si elle n'est pas visible dans votre environnement, vous devez l'afficher en cliquant sur le
bouton Feuille de propriétés dans le
ruban Conception de formulaires ou
Création selon votre version.
- Dès lors, cliquer sur le petit bouton placé à droite de son événement Au clic,
- Dans la boîte de dialogue qui apparaît, choisir le générateur de code et valider par Ok,
Nous basculons ainsi dans l'
éditeur de code VBA Access, plus précisément entre les bornes de la
procédure événementielle Source_Click. Son code se déclenchera
au clic sur le bouton Source.
La variable de base de données
Nous devons maintenant
déclarer les variables nécessaires au traitement. L'une d'entre elles est particulière. Il s'agit d'une variable objet destinée à prendre possession d'une
autre instance d'Access.
- Dans les bornes de la procédure, ajouter les deux déclarations suivantes :
Dim autreBdd As Access.Application
Dim chemin As String
Nous déclarons la variable autreBdd comme un
objet d'application Access. C'est elle qui doit
instancier la classe permettant d'hériter des propriétés et méthodes pour piloter une
base de données tierce. Mais pour cela, il faut être en mesure de pointer sur cette base. C'est la raison de la déclaration de la
variable chemin comme un texte (As String). Elle doit mémoriser le
chemin d'accès complet à la base de données à ouvrir et à piloter.
Il est maintenant question d'initialiser ces deux variables.
- A la suite du code, ajouter les deux affectations suivantes :
chemin = Application.CurrentProject.Path & "\source-etat-sorties.accdb"
Set autreBdd = CreateObject("Access.Application")
Nous le savons parfaitement désormais. L'
objet enfant CurrentProject de l'
objet parent Application offre la
propriété Path qui renseigne sur le
chemin d'accès au dossier de l'
application Access. Nous lui concaténons le
nom de la base de données à ouvrir, préfixé d'un antislash pour bien entrer dans le dossier (\source-etat-sorties-fin.accdb). Ensuite, grâce à la
fonction VBA CreateObject, nous instancions (Set) la
classe Access passée en paramètre (Access.Application). Dès lors, l'
objet autreBdd hérite des propriétés et méthodes pour piloter une
autre instance Access. Et nous allons lui passer le
chemin d'accès pour pointer précisément sur celle que nous désirons.
Ouvrir la base de données sur un formulaire précis
Nous pouvons maintenant exploiter notre
objet de base de données avec ses propriétés et méthodes, pour
ouvrir un fichier spécifique et prendre le contrôle de ses objets comme un
formulaire en particulier. Et puisque cet objet va être mis à contribution à plusieurs reprises, pour
optimiser le code et comme nous l'avons appris à maintes reprises, nous allons
regrouper les instructions dans un
bloc With. Cette syntaxe nous permettra de ne pas répéter le nom de l'objet à outrance.
- A la suite du code de la procédure, ajouter le bloc With suivant :
With autreBdd
.OpenCurrentDatabase chemin
.Visible = True
.UserControl = True
.DoCmd.OpenForm "f_societes", acNormal, , , , acWindowNormal
End With
Nous exploitons tout d'abord la
méthode OpenCurrentDatabase de notre
objet de base de données pour lui spécifier en paramètre, le
chemin d'accès du fichier à contrôler. Sa
propriété Visible réglée Ã
True permet naturellement d'afficher la nouvelle instance à l'écran. La
propriété UserControl définie Ã
True permet d'indiquer que la base est ouverte par un utilisateur et non par une autre application en tâche de fond. C'est ainsi qu'elle peut se rendre disponible et visible. Enfin, l'
objet enfant DoCmd (DoCommand) de notre
objet parent de base de données permet d'appeler la
méthode OpenForm pour
ouvrir un formulaire spécifique de cette
autre base de données. Pour cela, nous lui indiquons le nom du formulaire en premier paramètre et le mode d'ouverture (acNormal) en deuxième argument. Nous ignorons les paramètres suivants pour atteindre le dernier argument concernant le mode d'affichage que nous choisissons de faire apparaître dans une fenêtre classique.
Tester l'ouverture de la base de données
Le code est terminé et demeure relativement sommaire. Il est temps de le tester.
- Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
- L'exécuter en enfonçant la touche F5 du clavier,
- Puis, cliquer sur le bouton Source,
Comme vous le constatez, c'est bien le
formulaire de la
nouvelle base de données qui s'ouvre directement par le
code VBA Access qui en a pris possession pour la piloter. Il convient néanmoins de maximiser sa fenêtre. Il s'agit d'un
formulaire que nous avons exploité à l'occasion d'une astuce précédente pour montrer comment
changer dynamiquement la source d'un état, au choix d'une valeur dans une liste déroulante.
Grâce à la
méthode d'instanciation que nous avons démontrée, vous l'aurez compris, les possibilités sont dès lors multiples pour notamment influer sur les enregistrements des tables de cette base. D'ailleurs et selon le même principe, nous verrons dans l'astuce suivante, comment influer sur les cellules d'un classeur Excel par le code VBA Access.
Le
code VBA Access complet que nous avons construit pour ouvrir et piloter une
autre base de données est le suivant :
Private Sub Source_Click()
Dim autreBdd As Access.Application
Dim chemin As String
chemin = Application.CurrentProject.Path & "\source-etat-sorties.accdb"
Set autreBdd = CreateObject("Access.Application")
With autreBdd
.OpenCurrentDatabase chemin
.Visible = True
.UserControl = True
.DoCmd.OpenForm "f_societes", acNormal, , , , acWindowNormal
End With
End Sub