Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/11/2012, 13h46   #1
anto520
Invité de passage
 
Homme antoine
technicien
Inscription : novembre 2012
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme antoine
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : technicien

Informations forums :
Inscription : novembre 2012
Messages : 8
Points : 0
Points : 0
Par défaut Inventaire d'une base Access

Bonjour,

Je débute sur Access et je dois exploiter une base avec 45 tables composées de plusieurs champs.
Je souhaiterais lister tous les noms des tables et des champs pour les insérer dans un tableur.
Comment créer avec Access, une table "inventaire" avec dans la 1ère colonne la liste des noms des tables, dans la 2ème colonne les noms des champs1, dans la 3ème les noms des champs2 et ainsi de suite.

Merci pour votre aide
anto520 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 14h44   #2
jpcheck
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Homme Jean-Philippe ANDRÉ
Développeur freelance
Inscription : juillet 2007
Messages : 8 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe ANDRÉ
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur freelance
Secteur : Finance

Informations forums :
Inscription : juillet 2007
Messages : 8 511
Points : 14 809
Points : 14 809
Envoyer un message via MSN à jpcheck
Salut,

pour la liste des tables, tu peux utiliser une requête du type
Code SQL :
1
2
3
SELECT MSysObjects.Name, MSysObjects.Type
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND (LEFT(MSysObjects.Name,4)<>"Msys"));

Pour la liste des champs, une bout de code VBA fera-t-il l'affaire ?
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 19h55   #3
anto520
Invité de passage
 
Homme antoine
technicien
Inscription : novembre 2012
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme antoine
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : technicien

Informations forums :
Inscription : novembre 2012
Messages : 8
Points : 0
Points : 0
Oui merci, mais je ne maîtrise pas très bien Access et je suis novice en code SQL ou VBA.
J’ai utilisé le fichier pour lister les tables et champs d’une base :
message du 08/02/2005 http://access.developpez.com/sources/?page=dev
Cela fonctionne parfaitement, mais je ne peux pas recopier les noms des tables et des champs pour les insérer dans un tableur.
Je t'envoie la base allégée, avec dans la table "1_Table inventaire" un exemple du résultat que je recherche.

Merci pour ton aide
Fichiers attachés
Type de fichier : zip Exemple Base.zip (52,2 Ko, 10 affichages)
anto520 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 23h32   #4
tee_grandbois
Membre Expert
 
Avatar de tee_grandbois
 
Homme
Ingénieur-Consultant
Inscription : novembre 2004
Messages : 667
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Ingénieur-Consultant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 667
Points : 1 188
Points : 1 188
Bonsoir,
je te propose ce code qui alimente tes 2 tables 1_Table_inventaire et 2_Comptage_données (renommées avec des soulignés, ayant horreur des nom d'objets avec des espaces !). Tu dois ajouter la référence Microsoft DAO 3.6 Object Library
Code :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Function StatsTables()
Dim oTdf As TableDef        ' objet table
Dim oTdfNew As TableDef     ' objet table
Dim oRst1 As DAO.Recordset  ' Recordset stat 1
Dim oRst2 As DAO.Recordset  ' Recordset stat 2
Dim oRst3 As DAO.Recordset  ' Recordset requète comptage
Dim stSql As String         ' construction requète comptage
Dim iNbMaxi As Integer      ' Nombre maxi de champs dans la collection tables
 
On Error GoTo GestErr
' Suppression des anciennes statistiques
CurrentDb.Execute ("drop table 1_Table_inventaire")
CurrentDb.Execute ("drop table 2_Comptage_données")
 
' Récupération du nombre de champs le plus grand dan la collection tables
For Each oTdf In CurrentDb.TableDefs
    If oTdf.Attributes = 0 And Left(oTdf.Name, 2) <> "1_" And Left(oTdf.Name, 2) <> "2_" Then
       If oTdf.Fields.Count > iNbMaxi Then iNbMaxi = oTdf.Fields.Count
    End If
Next
 
' Création table statistique 1
    Set oTdfNew = CurrentDb.CreateTableDef("1_Table_inventaire")
    With oTdfNew
' Nom de la table
        .Fields.Append .CreateField("Nom_Table", dbText, 255)
' Nom des champs
        For I = 1 To iNbMaxi
            .Fields.Append .CreateField("Nom_Champ" & I, dbText, 255)
        Next I
    End With
    CurrentDb.TableDefs.Append oTdfNew
 
' Création table statistique 2
   Set oTdfNew = CurrentDb.CreateTableDef("2_Comptage_données")
    With oTdfNew
        .Fields.Append .CreateField("Nom_Table", dbText, 255)
        For I = 1 To iNbMaxi
            .Fields.Append .CreateField("Nom_Champ" & I, dbLong)
        Next I
    End With
    CurrentDb.TableDefs.Append oTdfNew
 
Set oRst1 = CurrentDb.OpenRecordset("1_Table_inventaire", dbOpenDynaset)
Set oRst2 = CurrentDb.OpenRecordset("2_Comptage_données", dbOpenDynaset)
 
For Each oTdf In CurrentDb.TableDefs
 
    If oTdf.Attributes = 0 And Left(oTdf.Name, 2) <> "1_" And Left(oTdf.Name, 2) <> "2_" Then
 
' Statistiques inventaire des tables
        With oTdf
            oRst1.AddNew
            oRst1.Fields(0) = oTdf.Name
 
            For I = 0 To .Fields.Count - 1
                oRst1.Fields(I + 1) = .Fields(I).Name
            Next
            oRst1.Update
 
' Statistiques inventaire des données
 
' Construction de la requête
            stSql = "SELECT"
            For I = 0 To .Fields.Count - 1
                stSql = stSql & " count([" & .Fields(I).Name & "]) AS Expr" & I & ","
            Next I
 
' Exécution de la requète de comptage
            stSql = Left(stSql, Len(stSql) - 1) & " FROM [" & .Name & "];"
            Set oRst3 = CurrentDb.OpenRecordset(stSql)
            oRst3.MoveLast
' Alimentation de la table de comptage
            If oRst3.EOF = False Then
                oRst2.AddNew
                oRst2.Fields(0) = .Name
                For I = 0 To oRst3.Fields.Count - 1
                    oRst2.Fields(I + 1) = oRst3.Fields(I)
                Next
            oRst2.Update
            End If
 
        End With
    End If
Next oTdf
 
FinFonction:
On Error Resume Next
    oRst1.Close
    oRst2.Close
    Set oRst1 = Nothing
    Set oRst2 = Nothing
 
    Exit Function
 
GestErr:
Select Case Err.Number
Case 3376  ' table inexistante
    Resume Next
 Case Else
    MsgBox Err.Number & " : " & Err.Description
End Select
 
 Resume FinFonction
 
End Function
Tu pourras ensuite exporter les tables créées vers Excel.
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2012, 13h57   #5
anto520
Invité de passage
 
Homme antoine
technicien
Inscription : novembre 2012
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme antoine
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : technicien

Informations forums :
Inscription : novembre 2012
Messages : 8
Points : 0
Points : 0
Bonjour,

Merci beaucoup pour le code.
Je début avec Access et je souhaiterais connaître la marche à suivre pour faire fonctionner ce code. Faut-il le mettre dans une requête ?
Et est-ce que la base doit avoir les 2 tables "1_Table_inventaire" et "2_Comptage_données" de crées pour que le code fonction ?
Est-il possible d’avoir un exemple avec la base ?

Merci d’avance
anto520 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 23h08   #6
tee_grandbois
Membre Expert
 
Avatar de tee_grandbois
 
Homme
Ingénieur-Consultant
Inscription : novembre 2004
Messages : 667
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Ingénieur-Consultant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 667
Points : 1 188
Points : 1 188
Bonsoir,
Voici la base exemple que tu avais posté.
Il suffit de cliquer sur le bouton "Création statistiques" du formulaire qui s'ouvre à l'ouverture de la base, la procédure crée dynamiquement les tables résultat.
Fichiers attachés
Type de fichier : zip Exemple BASE.zip (50,8 Ko, 15 affichages)
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/11/2012, 10h20   #7
anto520
Invité de passage
 
Homme antoine
technicien
Inscription : novembre 2012
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme antoine
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : technicien

Informations forums :
Inscription : novembre 2012
Messages : 8
Points : 0
Points : 0
Merci beaucoup, cela fonctionne parfaitement une fois la référence "MANQUANT : Microsoft Excel 12.0 Object Library" décoché.
Tu m'enlèves une grosse épine du pied, je vais pouvoir maintenant faire l'inventaire de ma base en seulement 2 clics.

Je pense que cette base peut intéresser beaucoup de monde, il suffirait de la modifier pour choisir le chemin vers la base que l'on souhaite faire l'inventaire.
anto520 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 10h28   #8
loufab
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 846
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 846
Points : 14 120
Points : 14 120
Bonjour,

Il y a l'excellent Analyzer de Crystal.
C'est ici

http://www.accessmvp.com/strive4peace/Analyzer.htm

Cordialement,
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2012, 20h09   #9
marot_r
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 6 467
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 6 467
Points : 9 362
Points : 9 362
C'est un peu en dehors de ta question mais il y a aussi l'outil de documentation de Access qui s'il ne génère pas un Excel peut être utiliser pour générer un pdf (ou xps) et ensuite on peut faire des recherches dans ce fichier.

Je déconseille de l'imprimer c'est généralement long et quasiment inexploitable sous sa forme papier complète.

C'ets par contre très utiles pour touver dans quel formulaire, état ou programme un message particulier est affiché.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h06.


 
 
 
 
Partenaires

Hébergement Web