formateur informatique

Récupérer les noms des bases de données d'un dossier

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Récupérer les noms des bases de données d'un dossier
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 :


Noms des bases de données d'un dossier

Le VBA est définitivement puissant. Avec Access, nous avons déjà appris à accéder aux ressources de fichiers Excel et Word mais aussi aux ressources de fichiers PDF. Ici, nous proposons d'entrer dans le coeur des bases de données externes pour manipuler toutes leurs informations. Dans ce premier des quatre volets, nous allons démontrer comment récolter tous les noms des bases de données hébergées par un dossier.

Récolter les informations de bases de données externes en VBA Access

Sur l'exemple complètement finalisé illustré par la capture, au clic sur un bouton matérialisé par l'icône d'un dossier, l'utilisateur récolte tous les noms des bases de données dans une première zone de liste, placée sur la gauche du formulaire. Dès lors, au clic sur l'un des noms ainsi importés, il récolte les noms de tous les objets composant cette base de données, dans quatre zones de liste distinctes, placées sur la droite. Enfin, lorsqu'il clique sur l'une des tables de la base de données choisie, il récupère tous les enregistrements de cette dernière, dans une zone de texte enrichie, placée en bas du formulaire.

Base de données Access à télécharger
Pour développer ces techniques VBA Access, nous suggérons d'appuyer l'étude sur une base de données hébergeant ce formulaire avec ces zones de liste, prêtes à réceptionner les informations externes.
  • Double cliquer sur le fichier compressé lister-autres-bdd.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire fParcourir,
Ainsi, nous l'exécutons. Il offre bien les différentes zones de liste pour récolter les informations ainsi que la zone de texte enrichi, sur la partie inférieure, pour récupérer les enregistrements d'une table externe désignée. La première action de l'utilisateur doit consister à cliquer sur le bouton à l'icône d'un dossier pour désigner un emplacement dans lequel sont hébergées des bases de données externes à étudier. Mais à ce stade bien sûr, si vous cliquez sur ce dernier, rien ne se produit encore.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
Maintenant, si vous sélectionnez tour à tour les contrôles et que vous consultez la feuille de propriétés, vous constatez que les zones de liste sont respectivement nommées : lesBases, lesTables, lesFormulaires et lesEtats. De même, vous apprenez que la zone de texte enrichi se nomme lesEnregistrements. C'est par ces noms que nous piloterons ces contrôles en VBA Access de manière à les enrichir des informations externes.

La déclaration des variables
Pour débuter, nous avons besoin d'un jeu de variables. Nous devons déclencher une boîte de dialogue permettant de désigner un dossier dans lequel sont stockées des bases de données à analyser. Nous avons besoin de mémoriser ce chemin et grâce à lui, nous devons piloter des objets capables de manipuler les fichiers et dossiers du disque. Mais avant tout et sachez-le, une référence est nécessaire pour piloter les boîtes de dialogue standard d'Office.
  • Sur le formulaire en conception, cliquer sur le bouton à l'icône du dossier pour le sélectionner,
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
  • Cliquer ensuite 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 parcourir_Click. Son code VBA se déclenchera au clic sur ce petit bouton à l'icône du dossier.
  • En haut de l'éditeur, cliquer sur le menu Outils puis choisir la rubrique Références,
Référence VBA Access pour piloter les boîtes de dialogue Office standard

Comme vous le constatez, la librairie Microsoft Office 16.0 est cochée. Elle est donc ajoutée au projet VBA Access. C'est elle qui va nous permettre de piloter les boîtes de dialogue standard d'Office, une fois que nous aurons déclaré les variables que nous avons évoquées précédemment.
  • Cliquer sur le bouton Ok de la boîte de dialogue pour revenir sur la feuille de code,
  • Dans la procédure parcourir_Click, ajouter les déclarations de variables suivantes :
Private Sub parcourir_Click()
Dim boite As FileDialog: Dim chemin As String
Dim objetFichier As Object: Dim leDossier As Object: Dim chaqueFichier As Object


End Sub


L'objet FileDialog est précisément celui qui doit être utilisé pour instancier la classe permettant de piloter ces boîtes de dialogue standards. Nous stockerons le chemin d'accès au dossier ainsi désigné par l'utilisateur dans la variable chemin. C'est la raison pour laquelle, nous la typons comme un texte (As String). Puis, étant donné que nous allons devoir parcourir tous les fichiers du dossier mentionné, à la recherche des fichiers de bases de données, nous déclarons trois variables comme des objets au sens large (As Object). Le premier doit permettre d'instancier la classe offrant les propriétés et méthodes pour manipuler les fichiers et dossiers du système. Grâce à elle, les deux suivantes pourront pointer sur le dossier en question pour la première et sur les fichiers de ce dossier pour la seconde.

La boîte de dialogue des dossiers
Maintenant que les variables et les objets sont déclarés, nous allons pouvoir commencer par initialiser celui qui doit représenter la boîte de dialogue permettant de naviguer au travers des dossiers dans l'arborescence du disque.
  • A la suite du code de la procédure, ajouter les instructions VBA suivantes :
...
lesBases.RowSource = ""
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)

If chemin <> "" Then
MsgBox chemin
End If
...


Tout d'abord, nous réinitialisons la zone de liste nommée lesBases pour la purger des précédentes importations, si d'aventure plusieurs clics successifs avaient été effectués sur le bouton à l'icône du dossier. Il est à noter que pour pouvoir la piloter ainsi, sa propriété Origine source est réglée à Liste valeurs et non sur Tables/Requêtes. Elle est ainsi indépendante et nous pouvons la manipuler en VBA.

Ensuite, nous initialisons (Set) l'objet boite grâce à la propriété FileDialog de l'objet Application et à son argument msoFileDialogFolderPicker. C'est ainsi qu'il hérite des propriétés et méthodes pour piloter ces boîtes. D'ailleurs dans l'enchaînement, nous exploitons la méthode héritée Show pour afficher la boîte de dialogue des dossiers. Le chemin au dossier désigné par l'utilisateur (boite.SelectedItems(1)) est ainsi stocké dans la variable chemin. En effet, c'est la collection SelectedItems de cet objet boite qui renvoie un tableau de tous les dossiers choisis par l'opérateur. Comme nous n'avons pas autorisé la multi-sélection, nous savons que ce chemin est rangé en première position (1) dans la collection.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • Exécuter ce dernier en enfonçant la touche F5 du clavier par exemple,
  • Cliquer alors sur le petit bouton à l'icône d'un dossier,
  • Dans la boîte de dialogue, désigner un dossier contenant des bases de données Access,
  • Dès lors, cliquer sur le bouton Ok de la boîte de dialogue Standard,
Comme vous pouvez le voir, la réponse est fournie par une autre boîte de dialogue déclenchée par la fonction VBA MsgBox. Elle restitue le chemin d'accès complet au dossier désigné par l'utilisateur. C'est ce chemin que nous devons exploiter pour pointer sur le répertoire à piloter et à parcourir par le code VBA pour restituer tous les noms de fichiers des bases de données dans la zone de liste nommée lesBases.

Nom du dossier et chemin d-accès en VBA Access

Accéder aux fichiers d'un dossier
La deuxième instanciation doit désormais intervenir dans la branche de l'instruction conditionnelle. En effet, nous avons choisi de vérifier que l'utilisateur n'avait pas cliqué sur le bouton Annuler et donc, qu'il avait bien désigné un dossier (If chemin <> "" Then).
  • Revenir dans l'éditeur VBA Access,
  • Passer l'instruction du MsgBox en commentaire en la préfixant d'une apostrophe ('),
  • Dans les bornes de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
acces.Value = chemin
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)
...


Il y a deux zones de texte masquées sur ce formulaire. Elles se nomment respectivement acces et laBdd. Dans la première (acces), nous stockons le chemin d'accès au dossier désigné. Nous le verrons, ces données seront utiles pour les développements qui suivront. Ensuite et nous en avons l'habitude désormais, nous exploitons la fonction VBA CreateObject avec l'argument scripting.filesystemobject pour instancier la classe permettant de manipuler les fichiers et dossiers du système. C'est ainsi que nous initialisons (Set) notre objet objetFichier. Dès lors, il offre instantanément la méthode getfolder à laquelle nous passons le chemin d'accès au dossier (chemin) pour initialiser l'objet leDossier.

Parcourir les fichiers du dossier sélectionné
C'est cet objet qui va maintenant offrir une propriété héritée, ou plutôt une collection permettant de désigner tous les fichiers du dossier ainsi spécifié. Et c'est ainsi que doit entrer en action une boucle For Each pour les passer en revue tour à tour. Pour cela, nous devons utiliser l'objet chaqueFichier que nous avions déclaré à cet effet.
  • A la suite de l'instruction conditionnelle, créer la boucle For Each suivante :
...
For Each chaqueFichier In leDossier.Files
If (Right(chaqueFichier.Name, 6) = ".accdb") Then
lesBases.AddItem chaqueFichier.Name
End If
Next chaqueFichier
...


C'est donc la collection héritée Files qui retourne un tableau de tous les fichiers contenus dans le dossier. Nous les parcourons tous grâce à notre objet chaqueFichier qui prend son type au moment de cette affectation implicite. Mais à chaque passage, nous émettons un critère pour vérifier que l'extension du fichier en cours d'analyse est bien celle d'une base de données Access. Pour cela, nous exploitons la fonction VBA Right afin d'analyser les six derniers caractères. Si cette condition est honorée, nous ajoutons le nom du fichier à la suite dans la zone de liste déroulante, grâce à sa méthode AddItem.

Décharger les objets
Pour finir et comme vous le savez, à l'issue du traitement, nous devons décharger les objets qui ne sont plus utilisés, afin de libérer les ressources.
  • Après l'instruction conditionnelle englobant la boucle, ajouter les instructions suivantes :
...
End If

Set boite = Nothing
Set chaqueFichier = Nothing
Set objetFichier = Nothing
Set leDossier = Nothing


End Sub
...


Il ne nous reste plus qu'à tester le code qui rappelons-le n'est qu'une étape de l'application finale.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • Cliquer sur le petit bouton à l'icône du dossier,
  • Dans la boîte de dialogue standard, pointer sur un dossier contenant des bases de données,
  • Puis, valider en cliquant sur le bouton Ok,
Noms des bases de données Access d-un dossier sur un formulaire Access

De retour sur le formulaire et comme vous pouvez l'apprécier, la zone de liste rend effectivement compte de toutes les bases de données figurant dans le dossier choisi par l'utilisateur.

Dans le prochain volet, nous exploiterons ces travaux préliminaires. Il sera question d'être en mesure de questionner la base de données cliquée par l'utilisateur dans la première zone de liste, pour restituer toutes les tables et requêtes qu'elle renferme, dans deux autres zones de liste prévues à cet effet.

Le code VBA Access complet que nous avons construit pour récupérer tous les noms des bases de données externes, est le suivant :

Private Sub parcourir_Click()
Dim boite As FileDialog: Dim chemin As String
Dim objetFichier As Object: Dim leDossier As Object: Dim chaqueFichier As Object

lesBases.RowSource = ""
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)

If chemin <> "" Then
'MsgBox chemin
acces.Value = chemin
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)

For Each chaqueFichier In leDossier.Files
If (Right(chaqueFichier.Name, 6) = ".accdb") Then
lesBases.AddItem chaqueFichier.Name
End If
Next chaqueFichier
End If

Set boite = Nothing
Set chaqueFichier = Nothing
Set objetFichier = Nothing
Set leDossier = Nothing

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