Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Champs des tables externes
Grâce au développement précédent, nous avons appris à récolter les 
noms des tables composant une 
base de données externe. Ici, nous allons plus loin. Il est question de récupérer tous les 
noms des champs d'une 
table choisie depuis une 
base de données externe.

Sur l'exemple illustré par la capture, l'utilisateur clique sur un 
bouton intitulé 
Ouvrir. Dans la boîte de dialogue standard qui suit, il désigne un 
fichier de base de données. Aussitôt, 
tous les noms des tables qui composent cette dernière sont restitués dans une première zone de liste. Dès lors, lorsque l'utilisateur clique sur l'un de ces noms, il dévoile 
tous les champs qui composent cette 
table, dans une seconde zone de liste. L'intérêt est de pouvoir connaître automatiquement la 
structure d'une base de données pour être en mesure de réaliser des extractions chirurgicales à distance.
Base de données Access à télécharger
Pour poursuivre le développement, nous devons appuyer l'étude sur les travaux précédents.
- Télécharger le fichier compressé noms-champs-tables-externes.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 alors sur le bouton Activer le contenu du bandeau de sécurité,
- Dans le volet de navigation sur la gauche, cliquer sur le formulaire fParcourir pour l'ouvrir,
- Sur le formulaire, cliquer sur le bouton Ouvrir,
- Dans la boîte de dialogue, sélectionner un fichier de base de données puis cliquer sur Ouvrir,

Comme vous pouvez le voir, 
tous les noms des tables de cette 
base de données sont aussitôt rapatriés dans la première zone de liste sur la gauche du formulaire. Naturellement à ce stade, si vous cliquez sur l'une de ces tables, les champs qui la composent ne sont pas encore extraits.
Action VBA au clic sur un nom de table
La première mesure que nous devons prendre consiste à associer une procédure à la première zone de liste pour déclencher l'exécution d'un 
code VBA au clic sur l'un des noms qu'elle contient.
- 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 la première zone de liste pour la sélectionner,
Comme l'indique sa 
feuille de propriétés, elle se nomme 
listeTables. La seconde se nomme 
listeChamps.
- Dans sa feuille de propriétés justement, activer l'onglet Evénement,
- Dès lors, 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 fait, nous basculons dans l'
éditeur VBA Access entre les bornes de la 
procédure événementielle listeTables_Click.
Les objets de base de données
Nous devons maintenant nous intéresser à la 
déclaration des variables. En réalité, ce sont 
trois objets qui sont nécessaires pour piloter une 
base distante, ses 
tables et les 
champs de ses tables.
- Dans les bornes de la procédure, ajouter les déclarations suivantes :
...
Dim base As Database: Dim table As TableDef: Dim champ As Field
...
Nous déclarons effectivement un 
objet de base de données (As Database), un autre pour représenter une 
table (As TableDef) et un dernier pour représenter un 
champ (As Field).
Initialiser les objets
Ensuite, nous devons initialiser deux de ces objets pour pointer sur la 
base de données choisie avec la boîte de dialogue et pour représenter la 
table cliquée par l'utilisateur dans la première zone de liste.
- A la suite du code, ajouter les initialisations suivantes :
...
listeChamps.RowSource = ""
Set base = OpenDatabase(nomBdd.Value)
Set table = base.TableDefs(listeTables.Value)
...
Tout d'abord, nous purgeons la seconde zone de liste des potentielles précédentes importations afin de laisser la place aux nouvelles. Pour cela, nous réglons sa 
propriété RowSource sur une 
chaîne vide. Ensuite, nous initialisons (Set) l'
objet base sur la 
base de données choisie (nomBdd.Value), grâce à la 
fonction VBA Access OpenDatabase. En effet, grâce au développement précédent, son 
chemin d'accès complet est mémorisé dans la zone de texte en haut du formulaire. Elle est nommée 
nomBdd. Puis, grâce à la 
propriété TableDefs dont a hérité l'
objet base, nous initialisons (Set) l'
objet table, sur la 
table cliquée par l'utilisateur dans la première zone de liste (listeTables.Value).
Parcourir les champs de la table cliquée
L'
objet table ainsi initialisé a lui aussi hérité de propriétés et méthodes, mais pour 
piloter la table cliquée cette fois. Notamment, il propose désormais la 
propriété Fields qui représente la 
collection de ses champs. C'est elle que nous devons parcourir en impliquant l'
objet champ dans une 
boucle For Each.
- Toujours à la suite du code VBA, créer la boucle For Each suivante :
...
For Each champ In table.Fields
listeChamps.AddItem champ.Name
Next champ
...
Pour 
chaque champ (For Each champ) parcouru 
dans la collection des champs de la 
table cliquée (In table.Fields), nous ajoutons son 
nom à la suite dans la seconde zone de liste (listeChamps.AddItem champ.Name).
Détruire les objets de programmation
Pour terminer proprement et comme il est de coutume, nous devons 
détruire les objets de programmation à l'issue du traitement, soit lorsqu'ils ne sont plus utilisés.
- A la fin du code, ajouter les instructions VBA suivantes :
...
base.Close
Set champ = Nothing
Set table = Nothing
Set base = Nothing
...
Grâce à sa 
méthode Close, nous fermons l'
objet de base de données. Puis, nous réinitialisons (Set) chacun des 
trois objets à 
Nothing. C'est ainsi que nous les détruisons tour à tour et que nous libérons la mémoire de l'ordinateur.
- Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
- L'exécuter par exemple avec la touche F5 du clavier,
- Cliquer sur le bouton Ouvrir du formulaire,
- Dans la boîte de dialogue, double cliquer sur un fichier de base de données,
- De retour sur le formulaire, cliquer dans la première zone de liste sur un nom de table,
Comme vous pouvez l'apprécier, la 
structure de la table distante est aussitôt dévoilée. 
Tous les noms de ses champs sont rapatriés dans la seconde zone de liste. C'est ainsi que le 
code VBA Access peut désormais facilement accéder aux ressources d'une 
base de données inconnue.