formateur informatique

Exporter les objets d'une base Access à une autre en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Exporter les objets d'une base Access à une autre 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    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Exporter les objets d'une base Access

Avec cette nouvelle astuce VBA Access, nous allons apprendre à transférer les tables, les requêtes et les formulaires d'une base de données à une autre, par le code VBA.

Bases de données Access à télécharger
Pour démontrer cette nouvelle solution, nous suggérons d'appuyer l'étude sur deux bases de données. La décompression livre deux bases de données. Celle qui est nommée base-fin est vide. Vous pouvez le constater en double cliquant sur son nom de fichier pour l'ouvrir dans Access. C'est elle qui doit recevoir les objets de l'autre base de données, nommée base-depart.
  • Double cliquer sur le fichier base-depart.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, double cliquer sur le formulaire F_Export pour l'exécuter,
Formulaire Access pour exporter les objets dans une autre base de données

Comme vous pouvez le voir, il est fait d'une zone de texte et de trois boutons. Si vous cliquez sur le premier bouton, intitulé Désigner, une boîte de dialogue d'Office s'ouvre. Elle permet de choisir une base de données. Si vous en sélectionnez une, son chemin d'accès complet s'affiche dans la zone de texte. Cela signifie qu'un code VBA fonctionnel est déjà associé à ce bouton.

Dans l'enchainement, un clic sur le bouton intitulé Exporter doit transférer les tables, les requêtes et les formulaires de la base de données en cours vers la base de données spécifiée par le biais de cette boîte de dialogue. Bien entendu, le code VBA de ce bouton n'existe pas encore. Il s'agit de l'enjeu de ce développement.

La procédure d'exportation
La première action que nous devons entreprendre consiste à créer la procédure événementielle à associer au bouton d'exportation. C'est ainsi que nous déclencherons le code VBA.
  • 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 intitulé Exporter pour le sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
Nous basculons ainsi dans l'éditeur VBA Access entre les bornes de la procédure événementielle exporter_Click. A ce titre et juste au-dessus, vous notez la présence du code VBA associé au premier bouton. Sa procédure se nomme designer_Click. Elle permet de récolter le chemin d'accès à la base de données de destination, désignée par l'utilisateur par le biais d'une boîte de dialogue standard.

La référence aux objets de bases de données
Maintenant, pour manipuler les objets des bases de données avec toutes leurs propriétés, nous devons ajouter une référence au projet. Il s'agit d'une librairie externe. Mais nous avions anticipé et nous proposons de le constater.
  • En haut de l'éditeur, cliquer sur le menu Outils pour le déployer,
  • Dans les propositions, choisir l'option Références,
Référence VBA Access pour piloter les objets de bases de données externes

Comme vous pouvez le voir, une ligne spécifique est cochée. Elle se nomme Microsoft Office 16.0 Access databse engine Object Library. C'est de cette librairie dont nous avons besoin pour exporter les objets d'une base Access à une autre.

Les variables
Maintenant, nous avons besoin de déclarer des variables pour représenter les tables de la base de données en cours, ses requêtes et ses formulaires.
  • Cliquer sur le bouton Ok de la boîte de dialogue pour revenir sur la feuille de code,
  • Dans les bornes de la procédure, ajouter les déclarations de variables suivantes :
...
Dim table As TableDef: Dim requete As QueryDef
Dim formulaire As Object
...


L'objet TableDef représente une table au sens large. L'objet QueryDef représente une requête au sens large. L'objet Object représente un objet non typé qui se transformera en un formulaire lorsque nous en parcourrons la collection sur la base de données en cours.

Vérifier le chemin
Avant de déclencher l'exécution du code VBA, nous devons nous assurer qu'une base de données de destination a bien été désignée. Pour cela, nous devons vérifier que le contenu de la zone de texte du formulaire, n'est pas vide. Cette zone de texte se nomme chemin.
  • A la suite du code, créer l'instruction conditionnelle suivante :
...
If chemin.Value <> "" Then

End If
...


C'est la propriété Value d'un contrôle TextBox qui renseigne sur son contenu.

Parcourir tous les formulaires
Avant de penser à exporter les formulaires vers la base de données externe, faut-il encore être en mesure de parcourir tous ces objets. Une formation nous avait appris à passer en revue tous les formulaires d'une base de données Access.
  • Dans l'instruction conditionnelle, créer la boucle For Each suivante :
...
For Each formulaire In CurrentProject.AllForms

Next formulaire
...


La propriété AllForms de l'objet CurrentProject représente la collection des formulaires de la base de données active. C'est ainsi, engagé dans une boucle For Each, que notre objet formulaire adopte ce type, pour représenter les formulaires de la base, tour à tour, au gré des itérations de la boucle.

Exclure le formulaire en cours
Dans cette analyse circulaire, une exception doit néanmoins être observée. Comme le formulaire en cours est ouvert, il ne peut pas faire partie du voyage. Il se nomme F_Export et nous devons l'exclure.
  • A l'intérieur de la boucle, créer l'instruction conditionnelle suivante :
...
If formulaire.Name <> "F_Export" Then

End If
...


C'est la propriété Name d'un objet de type formulaire qui renvoie son nom.

Transférer les formulaires
Nous atteignons le point crucial de la solution à livrer. Nous connaissons bien l'objet VBA Access DoCmd. Il est souvent incontournable pour réaliser toutes sortes d'actions. Il offre de nombreuses méthodes. L'une d'entre elles nous intéresse tout particulièrement. Elle se nomme TransferDatabase. C'est elle qui permet d'exporter des objets d'une base à une autre. Mais pour cela, certains de ses arguments doivent être correctement renseignés.
  • Dans l'instruction conditionnelle de la boucle, ajouter la ligne VBA suivante :
...
DoCmd.TransferDatabase acExport, "Microsoft Access", chemin.Value, acForm, formulaire.Name, formulaire.Name, False
...


En premier paramètre, nous indiquons le mode de transfert (acExport) pour réaliser une exportation et non une importation qui est possible avec la valeur acImport. Ensuite, nous renseignons le type de base de données ciblée, Microsoft Access ici. Puis, nous lui indiquons l'adresse de cette base externe, le type d'objet à exporter (acForm), le nom de l'objet dans la source et celui qu'il doit avoir dans la destination. La dernière valeur concerne le paramètre StructureOnly. En le réglant à False, nous transférons la structure et les données.

Transférer les requêtes
Pour exporter les requêtes, la méthode est bien sûr la même. Mais forcément, la collection à parcourir change. De plus, le type et les noms d'objets à transférer doivent être adaptés dans les paramètres de la méthode TransferDatabase. Enfin, une exception doit être gérée pour ne pas envoyer les potentielles requêtes temporaires. Leurs noms sont préfixés du symbole du tilda (~).
  • Dans l'instruction conditionnelle parente et après la première boucle, créer la suivante :
...
For Each requete In CurrentDb.QueryDefs
If Left(requete.Name, 1) <> "~" Then
DoCmd.TransferDatabase acExport, "Microsoft Access", chemin.Value, acQuery, requete.Name, requete.Name, False
End If
Next requete
...


Transférer les tables
Bien sûr, pour exporter les tables, les adaptations à entreprendre sont similaires. Il faut adapter la collection à parcourir ainsi que le type et le nom d'objet à exporter.
  • Dans l'instruction conditionnelle, sous la deuxième boucle, créer la nouvelle boucle suivante :
...
For Each table In CurrentDb.TableDefs
If Left(table.Name, 4) <> "MSys" Then
DoCmd.TransferDatabase acExport, "Microsoft Access", chemin.Value, acTable, table.Name, table.Name, False
End If
Next table

MsgBox "L'exportation des objets Access est terminée."
...


Nous ajoutons une boîte de message (MsgBox) en fin de processus pour informer l'utilisateur sur le bon déroulement des exportations.

Décharger les objets
Pour finir et comme toujours à l'issue du traitement, nous devons libérer la mémoire en déchargeant les objets de programmation.
  • Après l'instruction conditionnelle parente, ajouter les trois lignes VBA suivantes :
...
MsgBox "L'exportation des objets Access est terminée."
End If

Set table = Nothing
Set requete = Nothing
Set formulaire = Nothing


End Sub
...
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • Exécuter ce dernier, par exemple avec la touche F5 du clavier,
  • Cliquer sur le bouton Désigner,
  • Avec la boîte de dialogue, ouvrir le sous dossier sources du dossier de décompression,
  • Puis, double cliquer sur le fichier base-fin.accdb pour désigner cette base de données,
Comme vous le constatez, le chemin d'accès s'inscrit effectivement dans la zone de texte placée en haut du formulaire.
  • Maintenant, cliquer sur le bouton Exporter,
Fin du processus d-exportation des objets Access en VBA

Très rapidement, un message de confirmation surgit.

Formulaires, tables et requêtes importés dans une autre base Access en VBA

Maintenant, si vous double cliquez sur la base de destination pour l'ouvrir dans Access, vous constatez que son volet de navigation n'est plus vide. Toutes les tables, les requêtes et les formulaires y ont été importés.

 
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