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 tables et les requêtes
Dans le volet précédent, nous avons appris Ã
exporter les objets Access vers une autre base de données, par le
code VBA . Dans ce nouveau volet, nous allons voir, entre autres, comment exporter les tables et les requêtes, mais avec une méthode plus simple et donc un code VBA allégé.
Bases de données Access à télécharger
Nous suggérons d'appuyer les travaux sur une base source et une base de destination.
La décompression livre deux fichiers. Le premier,
base-destination , doit accueillir les exportations de tables et de requêtes. Si vous double cliquez sur son nom pour l'ouvrir dans
Access , vous constatez que cette base de données est effectivement vide à ce stade. Il convient de cliquer sur le bouton Activer le contenu du bandeau de sécurité, pour la suite des opérations.
Fermer cette base et double cliquer sur le fichier nommé exporter-tables-requetes.accdb ,
Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Dans le volet de navigation, double cliquer sur le formulaire F_Export pour l'exécuter,
Comme dans le volet précédent, 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 s'ouvre. Elle permet de choisir une
base de données pour accueillir les
exportations . A validation, son
chemin d'accès complet s'affiche dans la
zone de texte du dessus. Dès lors, un clic sur le deuxième bouton, intitulé
Exporter , doit permettre de
transférer les tables et les requêtes de la
base de données en cours vers cette
base de données de destination . Mais bien sûr pour l'instant, le
code VBA de ce deuxième bouton est inerte.
La procédure du bouton
Nous devons commencer par créer la
procédure événementielle devant déclencher le
traitement VBA au clic sur ce
bouton intitulé
Exporter .
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 mode conception, cliquer sur le bouton Exporter pour le sélectionner,
Dans sa feuille de propriétés , activer l'onglet Evénement ,
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,
De cette manière, nous basculons 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 de la
procédure designer_Click . C'est elle qui est associée au premier bouton et qui déclenche l'ouverture d'une
boîte de dialogue standard pour stocker le chemin d'accès de la base désignée par l'utilisateur dans la
zone de texte nommée
chemin .
La librairie externe
Pour piloter les objets de la base de données et les exporter vers une autre, nous avons besoin d'ajouter une
librairie spécifique au projet. Mais elle existe déjà car nous avions anticipé.
Elle se nomme
Microsoft Office 16.0 Access database engine Object Library . Vous pouvez le constater en déployant le
menu Outils en haut de l'éditeur et en choisissant l'option
Références dans les propositions.
Les variables
Pour
exporter les tables et les requêtes de cette
base de données , nous avons besoin d'
objets les représentant. Nous devons donc les déclarer.
Dans les bornes de la nouvelle procédure événementielle, ajouter les déclarations suivantes :
...
Dim table As TableDef: Dim requete As QueryDef
...
Nous déclarons un objet (table) représentant une table au sens large (TableDef). Puis, nous en déclarons un autre (requete) représentant une requête au sens large (QueryDef).
Vérifier le chemin
Comme à l'occasion du volet précédent, avant de lancer le
code VBA d'exportation , nous devons d'abord nous assurer que l'utilisateur a bien défini une
base de données de destination . Pour cela, nous devons vérifier que la zone de texte nommée
chemin , n'est pas vide.
Après les variables, créer l'instruction conditionnelle suivante :
...
If chemin.Value <> "" Then
End If
...
Parcourir les requêtes
Dès lors, c'est une première
boucle For Each que nous devons engager sur la
variable requete pour la faire parcourir la
collection des requêtes de la
base de données en cours .
...
For Each requete In CurrentDb.QueryDefs
If Left(requete.Name, 1) <> "~" Then
End If
Next requete
...
C'est la
propriété QueryDefs de l'
objet VBA Access CurrentDb qui renvoie la
collection des requêtes de la
base de données en cours . Grâce à la
boucle For Each et à l'
objet requete , nous les parcourons toutes. A chaque passage néanmoins, nous déployons une
instruction conditionnelle pour nous assurer qu'il ne s'agit pas d'une requête générée par le système. Elles sont signées d'un tilda (~) en préfixe.
Copier les requêtes
Dans le volet précédent, nous avons exploité la
méthode TransferDatabase de l'
objet DoCmd pour envoyer les objets dans la base externe désignée par l'utilisateur. Avec cette nouvelle technique, plus simple, c'est toujours l'
objet DoCmd qui est à l'honneur, mais avec sa
méthode CopyObject qui demande moins de renseignements à paramétrer.
Dans le If de la boucle, ajouter la ligne VBA suivante :
...
DoCmd.CopyObject chemin.Value, requete.Name, acQuery, requete.Name
...
Les quatre paramètres que nous passons à la méthode CopyObject, sont respectivement les suivants :
Chemin de la destination ,
Nouveau nom ,
Type d'objet ,
nom de la source .
Copier les tables
Pour
transférer les tables dans la
base de données de destination , le principe est le même. Mais il s'agit maintenant de
parcourir la collection des tables .
Dans le If parent, après la première boucle, créer la nouvelle boucle suivante :
...
Next requete
For Each table In CurrentDb.TableDefs
If Left(table.Name, 4 ) <> "MSys " Then
DoCmd.CopyObject chemin.Value, table.Name , acTable , table.Name
End If
Next table
MsgBox "L'exportation des objets Access est terminée."
End If
...
Cette fois, ce sont les quatre premiers caractères de la table que nous analysons, à chaque passage dans la boucle. De cette manière, nous écartons les tables système (MSys) de l'exportation. Ensuite, dans la
méthode CopyObject , nous adaptons le
type et les
noms d'objets à exporter. Enfin, nous adressons un message à l'utilisateur (MsgBox) pour lui indiquer que le processus d'exportation est terminé.
Détruire les objets de programmation
Avant de tester ce
code VBA d'exportation des objets , nous devons décharger les objets de programmation de la mémoire pour libérer les ressources.
A la fin du code, après l'instruction conditionnelle parente, ajouter les lignes suivantes :
...
MsgBox "L'exportation des objets Access est terminée."
End If
Set table = Nothing
Set requete = Nothing
End Sub
...
Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
Exécuter ce dernier en enfonçant par exemple la touche F5 du clavier,
Cliquer sur le bouton Désigner pour afficher la boîte de dialogue standard,
Dans le dossier de décompression, double cliquer sur le fichier base-destination.accdb ,
De retour sur le formulaire, cliquer sur le bouton Exporter ,
Comme vous pouvez le constater, le message de confirmation apparaît très vite.
Maintenant, si vous ouvrez la base de destination, vous constatez que son volet de navigation n'est plus vide. Cette base de données a bien été enrichie des tables et des requêtes de la base de données d'origine et ce, par un code VBA très simple.