Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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,
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 ,
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 ,
Très rapidement, un message de confirmation surgit.
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.