formateur informatique

Ouvrir un formulaire d'une autre base Access en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Ouvrir un formulaire d'une autre base Access en VBA
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    Vidos astuces Instagram
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.

Formulaire Access pour ouvrir une autre base de données

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,
Ouvrir une autre base de données Access sur un formulaire précis en VBA

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


 
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