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.