formateur informatique

Exporter les tables et les requêtes en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Exporter les tables et les requêtes en VBA Access
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 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,
Formulaire Access pour exporter les tables et les requêtes vers une autre base de données

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.

Code VBA Access pour désigner une autre base de données avec une boîte de dialogue standard

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é.

Librairie nécessaire au projet VBA Access pour piloter les objets de bases de données

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èreboucle 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,
Exportation des tables et requêtes Access depuis un formulaire

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.

Tables et requêtes Access importées dans la base de données en VBA

 
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