Liste des tables – Version 2
Voici une suite à l’article « Liste des tables » paru l’année dernière. Dans cette article, il était question d’afficher la liste des tables Access dans la fenêtre Exécution. Question d’un lecteur sur cet article : « peut-on faire autre chose de cette liste, au lieu de simplement l’afficher dans la fenêtre Exécution ? ». Voici qui devrait donner de nouvelles pistes…
Application 1 : afficher les tables dans une liste de formulaire
Dans cet exemple, on choisit afficher les tables sur un formulaire, dans une liste (ListBox
). Pour cela :
- Construisez le formulaire.
- Placez sur le formulaire une liste (ou une liste déroulante) : objets
ListBox
ouComboBox
. - A l’aide des propriétés, nommez cette liste
lstTables
. - Toujours dans les propriétés de la liste, onglet Données, réglez la propriété
Origine Source
surListe Valeurs
. Sinon, il sera impossible d’ajouter des éléments à la liste de façon dynamique. - Programmez ceci dans l’événement
Sur ouverture
du formulaire :
1 2 3 4 5 6 7 8 9 10 11 |
Private Sub Form_Open(Cancel As Integer) Dim db As DAO.Database, tdf As DAO.TableDef Set db = CurrentDb For Each tdf In db.TableDefs If (tdf.Attributes And dbSystemObject) = 0 Then Me.lstTables.AddItem tdf.Name End If Next tdf Set db = Nothing End Sub |
A l’ouverture, vous obtenez ceci :
Reste maintenant à trouver quoi faire des tables, mais ce n’est pas le sujet de cet article ! 🙂
AddItem
n’existe pas dans les Access antérieurs à 2002. Si c’est votre cas, consultez cet autre article du blog.Application 2 : stocker la liste des tables… dans une table
Dans l’exemple précédent, la liste de tables est alimentée directement en VBA. Vous pouvez aussi stocker la liste des tables dans une autre table. Comme beaucoup de « constructions » Access sont basées sur des tables, on peut imaginer toutes sortes de traitements ensuite (voir plus bas).
- Dans mon cas, j’ai préparé une table
tbl Tables
(ben oui, le nom est moyen :-)), qui comporte au moins un champNom Table
. - Recopiez ce code dans un module standard de la base de données :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Function StockageListeTables() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim rst As DAO.Recordset ' La base de données en cours Set db = CurrentDb ' Vider la liste actuelle des tables db.Execute "DELETE * FROM [tbl Tables];" ' La table de stockage Set rst = db.OpenRecordset("tbl Tables", dbOpenDynaset) ' Parcourir la liste des tables et les stocker ' On stocke toutes les tables sauf : ' - les table systèmes ' - la table tbl Tables For Each tdf In db.TableDefs If ((tdf.Attributes And dbSystemObject) = 0) _ And (tdf.Name <> "tbl Tables") Then rst.AddNew rst("Nom Table") = tdf.Name rst.Update End If Next tdf ' On ferme ! rst.Close Set rst = Nothing Set db = Nothing End Function |
Pour exécuter ce code, vous pouvez ensuite :
- Placer un bouton sur un formulaire.
- Programmer l’événement
Sur clic
du bouton en y tapant :
1 2 3 |
Private Sub MonBouton_Click() StockageListeTables End Sub |
Une fois le bouton cliqué, la table de stockage contient :
Applications dérivées
Maintenant que les tables sont listées… dans une table, on peut utiliser tbl Tables
pour :
- Construire des requêtes
- Construire des formulaires
- Construire des états
- D’autres idées ?
Voici par exemple un état vite fait basé sur tbl Tables
:
Bonjours,
Comment stocker la liste :
des Requêtes … dans une table
des Formulaire … dans une table
des Macros … dans une table
des Etats … dans une table
des Modules … dans une table
cela est possible ?
Merci
Bien Cordialement
Cet article donne le principe, en parcourant la liste des containers d’une base Access.
Bonsoir,
Merci de votre réponse
J’ai testé ça fonctionne.
Mon besoin précis serait d’obtenir la liste imprimable des tables avec tous les objets associés comme dans le navigateur
Ma base regroupe : la gestion du temps, des finances, des biens, mes contacts ext .
Je ne sais pas comment je vais faire
Merci
Cordialement
Quand vous dites « comme dans le navigateur », vous parlez du Gestionnaire de dépendances ?
Bonjour,
Dans un formualaire je cherche a créer une liste de tâches. le formulaire est basé sur une Table qui contient divers champs ( description de la tâche, date, une combo box…). quand on appuie sur exporter le code prend toute les données du formulaire et ensuite envoie ces données dans une nouvelle table( historique)
Je n’arrive pas a extraire un champ en particulier, ou il y a le nom des utilisateurs avec plusieurs valeurs, en liste déroulante dans la nouvelle table. et VBA me donne comme erreur : ne peut pas insérer dasn un champ, de multiples valeurs…
D’avance merci!
Quel est le code VBA ?