formateur informatique

Trouver dans quelle table se trouve un champ Access cherché

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Trouver dans quelle table se trouve un champ Access cherché
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 :


Trouver la table d'un champ

Avec cette nouvelle astuce VBA Access, nous allons découvrir comment débusquer la table hébergeant un champ cherché par son nom. Lorsqu'un code VBA sait quel champ il doit engager dans une requête SQL pour récupérer ses informations mais qu'il ne connaît pas la table qui l'abrite, cette technique est donc essentielle.

Connaître les noms des tables hébergeant des champs précis en VBA Access

Sur l'exemple illustré par la capture, l'utilisateur saisit le nom d'un champ recherché dans une zone de texte, en haut du formulaire. Puis, il clique sur le bouton intitulé Trouver. Aussitôt, dans la grande zone du dessous, les tables qui abritent ce champ sont énumérées les unes sous les autres. Dans cet exemple, elles ne sont que deux.

Base de données Access à télécharger
Pour la découverte de cette astuce, nous suggérons d'appuyer l'étude sur une base de données abritant plusieurs tables hébergeant elles-mêmes un certain nombre de champs. Nous trouvons bien la zone de saisie pour le champ de recherche, la zone de texte pour restituer le résultat et le bouton pour lancer le processus.

Code VBA au Clic
Pour commencer, nous devons associer une procédure événementielle capable de se déclencher au clic sur le bouton du formulaire.
  • 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 le bouton intitulé Trouver,
  • Dès lors, activer 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, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous basculons dans l'éditeur VBA Access entre les bornes de la procédure événementielle Trouver_Click. Son code se déclenchera au clic sur ce bouton.

La déclaration des variables
Pour trouver la table du champ cherché, nous avons besoin d'un objet pour piloter la base de données en cours mais aussi de deux autres pour piloter respectivement les tables et les champs de cette base.
  • Dans les bornes de la procédure, ajouter les déclarations et affectations suivantes :
...
Dim base As Database: Dim champ As Field
Dim table As TableDef: Dim leChamp As String

Set base = CurrentDb()
leChamp = nomChamp.Value
resultat.Value = "La ou les tables qui hébergent le champ : <strong>" & leChamp & "</strong><br/><br />"
...


Nous déclarons donc un objet (base) de type base de données (Database), un autre (table) de type table de base de données (TableDef) et un dernier (champ) de type champ (Field). Enfin, nous déclarons une variable de type texte (leChamp) pour prélever le nom du champ cherché, inscrit dans la zone de texte sur le formulaire, qui est nommée nomChamp.

Ensuite, nous initialisons (Set) l'objet base sur la base de données en cours grâce à la fonction Access CurrentDb. Nous récoltons le nom de champ saisi dans la variable leChamp. Puis, nous amorçons le message d'accueil dans la zone de texte centrale (resultat) pour informer sur les résultats trouvés pour le champ indiqué.

Parcourir les tables de la base
Pour trouver le champ dans l'une des tables, nous devons parcourir ces dernières à l'aide d'une boucle For Each. Pour cela, nous devons engager notre objet table sur la collection des tables de la base de données en cours.
  • A la suite du code VBA, créer la boucle For Each suivante :
...
For Each table In base.TableDefs

Next table
...


C'est en effet la propriété TableDefs héritée par l'objet base qui représente la collection des tables de la base de données en cours.

Parcourir les champs de chaque table
Dans cette première boucle, nous devons en imbriquer une seconde. Son rôle et pour chaque table est de parcourir chaque champ à la recherche de correspondances avec le nom de champ inscrit sur le formulaire.
  • A l'intérieur de la première boucle, ajouter la seconde boucle For Each suivante :
...
For Each champ In table.Fields

Next champ
...


Cette fois, c'est la propriété Fields héritée implicitement par l'objet table qui représente la collection des champs contenus dans la table en cours d'analyse par la première boucle For Each.

Tester les noms des champs
A chaque passage dans cette seconde boucle, nous devons confronter le nom du champ en cours d'analyse avec celui inscrit sur le formulaire. S'ils coïncident, nous devons restituer le nom de la table qui l'héberge, en cours d'analyse par la première boucle. Nous avons donc besoin d'enclencher une instruction conditionnelle.
  • Dans cette seconde boucle For Each, créer l'instruction conditionnelle suivante :
...
If champ.Name = leChamp Then
resultat.Value = resultat.Value & "- " & table.Name & "<br />"
End If
...


C'est la propriété Name exercée sur un objet de type Field qui renvoie le nom du champ. S'il correspond à celui stocké dans la variable leChamp, alors nous ajoutons le nom de la table parente à la suite des résultats dans la zone de texte nommée resultat.

Décharger les objets
Avant de tester le code, nous devons détruire les objets pour libérer la mémoire de l'ordinateur.
  • A la fin du code VBA, après la double boucle, ajouter les instructions suivantes :
...
Next champ
Next table

base.Close

Set base = Nothing
Set table = Nothing
Set champ = Nothing


End Sub
...


La méthode Close permet tout d'abord de fermer la base de données exploitée en mémoire par le code VBA. Ensuite les réinitialisations (Set) successives des objets à Nothing permettent de les détruire et donc de les sortir de 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,
  • Dans la zone de saisie du dessus, taper par exemple le nom de champ : Designation,
  • Puis, cliquer sur le bouton Trouver,
Trouver les noms des tables hébergeant un champ en VBA Access

Comme vous pouvez le voir, deux tables ressortent. Si vous les ouvrez, vous constatez qu'elles hébergent effectivement chacune un champ ainsi nommé. Nous avons donc donné la solution pour trouver les tables en fonction d'un nom de champ cherché.

 
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