formateur informatique

Connaître le nombre de champs par table en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Connaître le nombre de champs par table 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 :


Nombre des champs dans les tables

Nous avions déjà appris à parcourir les champs des tables d'une base Access pour en récolter les noms afin de pouvoir les questionner. Ici et plus directement, nous proposons de démontrer comment connaître le nombre de champs embarqués dans chaque table de la base de données.

Lister les tables Access avec leurs nombres de champs

Sur l'exemple illustré par la capture, l'utilisateur clique sur un bouton de formulaire. Aussitôt, une synthèse est dressée dans une zone de texte enrichie. Elle liste les noms de chaque table et pour chacune, le nombre de champs qui la composent.

Base de données Access à télécharger
Nous proposons d'appuyer l'étude sur une base de données Access constituée de quelques tables hébergeant des champs différents. Nous découvrons le formulaire destiné à récolter les informations sur le nombre de champs contenus dans chaque table de cette base de données. En consultant le volet de navigation sur la gauche de l'écran, vous remarquez que cette base est composée de six tables et de deux requêtes. Nous parcourrons aussi les requêtes puisqu'après tout, ce ne sont que des tables spéciales.

Code VBA au clic sur le bouton
Le traitement que nous devons entreprendre doit intervenir au clic sur le bouton du formulaire intitulé Récupérer. Les nombres de champs avec les noms des tables correspondantes doivent être restitués dans la zone de texte à gauche du bouton. Nous devons donc commencer par associer une procédure événementielle à ce bouton.
  • 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 Récupérer 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, 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 recuperer_Click. Son code se déclenchera au clic sur ce bouton.

La déclaration des variables
Maintenant, nous avons besoin de variables pour piloter la base de données ainsi que ses tables et requêtes.
  • Dans les bornes de la procédure, ajouter les déclarations et affectations suivantes :
...
Dim base As Database
Dim table As TableDef: Dim requete As QueryDef

donnees.Value = ""
Set base = CurrentDb()
...


Nous déclarons tout d'abord un objet de type Database (base) pour pouvoir contrôler la base de données en cours. Et afin de manipuler ses tables et requêtes, nous créons un objet de type TableDef (table) ainsi qu'un objet de type QueryDef (requete). Puis, nous exploitons la fonction VBA Access CurrentDb pour initialiser l'objet base sur la base de données en cours. Avant cela, nous prenons soin de vider le potentiel précédent contenu de la zone de texte enrichi, nommée donnees.

Parcourir les tables de la base
Maintenant que la variable base est initialisée sur la base de données en cours, nous pouvons exploiter la variable table dans une boucle For Each, déclarée en conséquence, pour parcourir la collection des tables de cette base.
  • A la suite du code VBA, créer la boucle For Each suivante :
...
For Each table In base.TableDefs
If Left(table.Name, 4) <> "MSys" Then

End If
Next table
...


Nous parcourons donc la collection des tables (TableDefs) de la base de données en cours. A chaque passage dans la boucle, nous nous assurons que la table analysée n'est pas une table système. En effet, le code VBA y a accès contrairement à l'utilisateur Lambda. Pour cela et grâce à la fonction Left, nous vérifions que les quatre premiers caractères du nom de la table en cours (table.Name) ne correspondent pas à la suite de lettre MSys. C'est seulement lorsque ce critère est validé que nous entendons en effet analyser la table en cours pour en extirper l'information sur le nombre de champs qu'elle contient.

Noms de tables et nombre de champs
Grâce aux propriétés héritées par l'affectation implicite de notre objet table, nous allons maintenant pouvoir restituer pour chaque table, son nom et le nombre de champs qu'elle héberge. Bien sûr, nous souhaitons inscrire ces informations dans la zone de texte enrichi du formulaire. Nous l'avons vu, elle se nomme donnees. Et comme il s'agit d'une zone de texte enrichi, ce sont des balises Html classiques qui permettent de réaliser quelques facéties de mises en forme.
  • Dans les bornes de l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
donnees.Value = donnees.Value & "<br /><strong>" & table.Name & "</strong>"
donnees.Value = donnees.Value & "<br />" & table.Fields.Count & " champs<br />"
...


A la suite des informations déjà récoltées (donnees.Value = donnees.Value & ...), nous inscrivons le nom de la table (table.Name) en gras (<strong>...</strong>) avec en dessous (<br />) le nombre de champs qu'elle contient. En effet, plutôt que d'engager une nouvelle boucle For Each, comme nous l'avions fait à l'occasion d'une formation précédente pour récolter leurs noms, nous exploitons la collection Fields de l'objet table. Elle représente tous les champs de la table. Et grâce à elle, nous pouvons atteindre la propriété Count qui renseigne sur leur nombre.

Requêtes et nombres de champs
Pour les requêtes, le procédé est similaire. Mais comme nous l'avons déjà appris, nous devons cette fois parcourir la collection des requêtes (QueryDefs).
  • Toujours à la suite du code VBA, créer la nouvelle boucle For Each suivante :
...
For Each requete In base.QueryDefs
If Left(requete.Name, 1) <> "~" Then
donnees.Value = donnees.Value & "<br /><strong>" & requete.Name & "</strong>"
donnees.Value = donnees.Value & "<br />" & requete.Fields.Count & " champs<br />"
End If
Next requete
...


Cette fois, nous exerçons la fonction Left sur le premier caractère du nom de la requête. Si celui-ci est préfixé du symbole du tilda (~), nous ne considérons pas la requête. Ce préfixe désigne une requête temporaire due à de précédentes et potentielles nombreuses manipulations. Ensuite, nous utilisons les mêmes propriétés que celles des tables pour récolter les noms et les nombres de champs.

Décharger l'objet de base
Pour finir proprement et comme il est de coutume, nous devons décharger l'objet de base de données pour libérer la mémoire.
  • A la toute fin du code, après la seconde boucle, ajouter les deux instructions VBA suivantes :
...
base.Close
Set base = Nothing
...


Il est temps de tester cette procédure.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • L'exécuter par exemple avec la touche F5 du clavier,
  • Puis, cliquer sur le bouton intitulé Récupérer,
Aussitôt et comme vous pouvez l'apprécier, tous les noms de tables et requêtes sont listés dans la zone de texte avec pour chacune d'elles, les nombres de champs qu'elles renferment.

Lister les nombres de champs des tables et requêtes en VBA Access

Et si vous voulez en avoir le coeur net, il vous suffit d'ouvrir les tables les unes après les autres pour constater que les nombres de champs coïncident avec ceux rapportés par le code VBA Access.

 
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