IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

[VBA] Exporter automatiquement au format MS Access 97


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut [VBA] Exporter automatiquement au format MS Access 97
    Bonjour et meilleurs voeux a tous !

    Je developpe une appli VBA 6.3 sous MS Access 2002 SP3 et je suis confronte a un probleme :

    Comment exporter ma base vers le format MS Access 97 grace a du code VBA ?

    ( Habituellement on utilise le menu "Outils" puis "Utilitaires de base de donnees" puis "Convertir une base de donnees" et enfin "Vers le format de fichiers Access 97 ... " )

    Merci !

    Clem.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Peux-tu détailler le but de la manoeuvre.

    Que contient ta base ? Uniquement des tables ou beaucoup de code avec des formulaires etc..., car dans ce cas tu risques d'avoir des problèmes de compatibilité entre les deux versions.

    Il nous faut donc plus de détails.

    Starec

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Le but de la manoeuvre est de pouvoir lire les donnees des tables avec MS Access 97 (qui sont tres simples d'un point de vue relationnel : pas de lien entre les tables, pas de cles etrangeres, pas de requetes stoquees etc...), il n'y aura pas besoin d'avoir acces aux formulaires ni au code, donc pas de soucis du cote compatibilite... j'ai fait des tests manuels (avec le menu "Outils" ...) qui donnent un resultat a la hauteur de ce que j'attend !!!

    Je ne sais pas quels details je pourrais fournir en plus ... en fait je cherche juste un moyen d'effectuer l'action VBA correspondante a celle effectuee par le menu "Outils" puis "Utilitaires de base de donnees" etc ... le reste (compatibilite ...) je m'en charge !

    Merci pour ton attention Starec !

    Clem.

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    J'ai ça qui traine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    '*******************************************************************************************************
    ' Script permettant d'extraire au format CSV les tables d'une base Access
    '
    '*******************************************************************************************************
     
    connstring = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=BS.mdb"
    set m_RS = CreateObject("ADODB.Recordset")
    Set DBConn = CreateObject("ADODB.Connection")
    DBConn.Open connstring
    Set rstSchema = DBConn.OpenSchema(20)
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    DEF_EXPORT_SEP = ";"
     
    Do Until rstSchema.EOF
    	If rstSchema("TABLE_TYPE") = "TABLE" Then
                    chemin = rstSchema("TABLE_NAME") & ".CSV"
                    Set Fic = fso.CreateTextFile(chemin, True)
     
            	txtSQL = "select * from " & rstSchema("TABLE_NAME")
                    m_RS.open txtSQL, connstring
     
                    ' Entête
                    sLine = ""
                    for i = 0 to m_RS.Fields.count - 1
                        sLine = sLine & m_RS.Fields(i).Name & DEF_EXPORT_SEP
                    next
                    if sLine <> "" then
                        sLine = Left(sLine, Len(sLine) - 1)
                        Fic.writeLine sLine
                    end if
                    ' Données
                    Do Until m_RS.EOF
                        sLine = ""
                        for i = 0 to m_RS.Fields.count - 1
                             sLine = sLine & m_RS.Fields(i).Value & DEF_EXPORT_SEP
                        next
                        if sLine <> "" then
                             sLine = Left(sLine, Len(sLine) - 1)
                             Fic.writeLine sLine
                        end if
                        m_RS.MoveNext
                    Loop
                    Fic.Close
                    Set Fic = Nothing
                    m_RS.Close
    	End If
    	rstSchema.MoveNext
    Loop
    Set fso = Nothing
    Set rstSchema = Nothing
    DBConn.Close
    Set DBConn = Nothing
    set m_RS = Nothing
     
    msgbox "Extraction terminée."

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    '*******************************************************************************************************
    ' Script permettant d'extraire au format CSV les tables d'une base Access
    '
    '*******************************************************************************************************
    ... Bonjour pc75, ce n'est pas exactement ce que je cherche.

    Je cherche precisement un moyen d'effectuer l'action VBA correspondante a celle effectuee par le menu "Outils" puis "Utilitaires de base de donnees" puis "Convertir une base de donnees" et enfin "Vers le format de fichiers Access 97 ... "

    Merci quand meme pour ton attention.

    Clem.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si j'ai bien compris tu veux réaliser l'opération plusieurs fois et non une seule, et c'est donc pour cela que tu veux l'automatiser. N'est-ce-pas ?

    As-tu pensé à essayer de transférer les données dans une base Access 97 à partir d'instructions SQL du type INSERT INTO ?

    Starec

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Si j'ai bien compris tu veux réaliser l'opération plusieurs fois et non une seule, et c'est donc pour cela que tu veux l'automatiser. N'est-ce-pas ?
    Exactement !

    As-tu pensé à essayer de transférer les données dans une base Access 97 à partir d'instructions SQL du type INSERT INTO ?
    En fait, toutes les tables du document Access sont a exporter au format MS Access 97, et leur nombre peut varier, ce qui rend la commande SQL plus difficile (detection des tables non-systeme, boucle sur le nombre de tables etc ... ) d'autant plus que le nombre d'enregistrement par table peut etre eleve (env. 900 000 enreg.) ce qui rendrai l'opperation vraiment longue ...
    De plus il faudrait auparavant creer un nouveau document MS Access au format 97, est ce possible ?

    Je cherche precisement un moyen d'effectuer l'action VBA correspondante a celle effectuee par le menu "Outils" puis "Utilitaires de base de donnees" puis "Convertir une base de donnees" et enfin "Vers le format de fichiers Access 97 ... "
    Pendant un moment j'avais pense a l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.DoMenuItem acFormBar, XXX, YYY, ZZZ, acMenuVer70
    Mais je ne sais pas quels sont les index a placer dans XXX, YYY et ZZZ ... et il me semble que la barre d'outil est contextuée au formulaire, et non pas a l'application (i.e. ce menu n'est pas accessible en mode formulaire).

    Merci encore pour votre disponibilite !

    Clem.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    ^^ Up svp !

  9. #9
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour....
    ..toutes les tables..... au format MS Access 97, et leur nombre peut varier..... (detection des tables non-systeme, boucle sur le nombre de tables etc ... ) ...
    Pour ne sélectionner QUE les tables non système, tu peux t'inspirer de ce code.... (Liste1 = Zone de liste..)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    'Affiche dans une ZdL toutes les tables non système
    Dim DB As DAO.Database
    Dim ListeTable As String
    Dim Tdf As DAO.TableDef
    Set DB = CurrentDb
    For Each Tdf In DB.TableDefs
        If Left(Tdf.Name, 4) <> "MSYS" Then
            ListeTable = ListeTable & Tdf.Name & " ;"
        End If
    Me.Liste1.RowSource = ListeTable
     
    Next
     
    Set DB = Nothing
    Set Tdf = Nothing
    ......ensuite, tu peux (sauf erreur..) essayer de créer une base au format AC97..:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim NomBase As String
    NomBase = "BaseAC97" & ".mdb"
    'Création nouvelle base
    Dim dbsNew As Database
    Set dbsNew = CreateDatabase(CurrentProject.Path & "\" & NomBase, dbLangGeneral, dbVersion30)
    Set dbsNew = Nothing
    .....puis tu utilise le premier code pour récupérer le nom de toutes tes tables pour les copier vers la nouvelle base....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferDatabase acExport,........
    ...ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.CopyObject.........
    ......ce ne sont que quelques pistes......
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set dbsNew = CreateDatabase(CurrentProject.Path & "\" & NomBase, dbLangGeneral, dbVersion30)
    Merci FreeAccess pour toutes ces pistes !!

    ... ca m'en a fait decouvrir une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBEngine.CompactDatabase olddb, newdb, locale, options, password
    qui a l'air tres simple d'utilisation car dans option on peut specifier la version de MS Jet a utiliser !!! ... mais le seul probleme c'est que cette methode ne peut compacter qu'une base fermée. Donc pas la base en cours ... !! Quelqu'un a une idee ?

    En attendant je vais essayer les autres pistes qui m'ont l'air tout de meme plus fastidieuses.

    Merci encore !

    Clem.

  11. #11
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour...

    Content que tu trouve ton bonheur dans tout cela....

    Par contre, évite de poser différentes questions dans un même post.....
    ...cette methode ne peut compacter qu'une base fermée. Donc pas la base en cours ... !! Quelqu'un a une idee ?
    ..pour cela fais une recherche dans la ...: "Comment compacter la base de données en cours ?"

    ...
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

Discussions similaires

  1. [VBA] Export table access vers fichier.txt
    Par fabiolous dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/04/2007, 17h55
  2. Export automatique VBA dans Excel
    Par eddyG dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/12/2006, 23h34
  3. Import Export automatique ACCESS => MYSQL
    Par friiitz dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 11/10/2006, 18h38
  4. Réponses: 2
    Dernier message: 03/03/2006, 09h21
  5. [VBA] exportation vers excel - filtres automatiques?
    Par Christophe93250 dans le forum Access
    Réponses: 10
    Dernier message: 06/01/2006, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo