Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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 .
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.
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 .