Exporter toutes les données d’une base de données Microsoft Access

S’applique à : Access 2024, Access 2021

Cette rubrique explique comment un administrateur informatique peut exporter toutes les données et objets d’une base de données Microsoft Access vers des fichiers texte, ce qui permet une utilisation avec d’autres outils et prend en charge la portabilité des données.

Pour les données stockées dans les tableaux, les données peuvent être exportées vers divers autres formats à l’aide d’Assistants Access, tels qu’Excel, voir Exporter des données vers Excel, ou texte, voir Exporter des données vers un fichier texte.

Les instructions suivantes montrent comment exporter des objets à l’aide du code VBA, à l’aide de la commande de la méthode DoCmd.TransferText pour exporter des données de table et de la commande Application.SaveAsText pour d’autres objets.

Le code fourni crée une fonction qui peut être appelée avec le chemin complet d’une base de données et d’un dossier de destination. Il crée ensuite un fichier texte pour chaque objet de la base de données, qui contient les données des tables et les définitions de tous les objets créés par l’utilisateur, tels que les formulaires ou les états.

Étant donné que ce processus utilise OLE Automation, le code peut également être écrit à l’aide de PowerShell ou d’un langage .NET tel que C#. Pour cet exemple, nous utilisons VBA.

  1. Créez une nouvelle base de données.
  2. Créez un module.
  3. Copiez et collez le code de base de données d’exportation suivant dans le module.
  4. Pour chaque base de données que vous souhaitez exporter, entrez la commande suivante dans la fenêtre immédiate :

    ExportAccessDatabase "_Full path to database_", "_Folder to contain exported objects_"
    1. Notez qu’un dossier sera créé dans le dossier cible avec le nom de la base de données exportée. Cela permet d’exporter plusieurs bases de données vers le même dossier cible tout en conservant le contenu de chaque base de données exportée dans un dossier distinct.
    2. Si la base de données à exporter contient un formulaire de démarrage ou une macro AutoExec, les actions de démarrage peuvent interférer avec le processus d’exportation. Vous devez donc réinitialiser la propriété Formulaire de démarrage de la base de données et supprimer ou renommer la macro AutoExec avant de tenter d’appeler ExportAccessDatabase.
  5. Si vous souhaitez automatiser davantage ce processus, vous pouvez écrire une fonction qui, en fonction du chemin d’accès à un dossier, énumère toutes les bases de données du dossier et appelle la fonction ExportAccessDatabase pour exporter chaque base de données Microsoft Access vers un dossier cible.

Exporter le code de base de données (VBA)

Option Compare Database
Option Explicit

' Pass in the location of the database to export, and the folder to export to
Sub ExportAccessDatabase(strDBPath As String, exportFolder As String)
    Dim objAccess As Object
    Dim db As Database
    Dim td As TableDef
    Dim qd As QueryDef
    Dim doc As Document
    Dim cont As Container

    On Error GoTo Err_ExportDatabase
    
    ' Create a new instance of Access
    Set objAccess = CreateObject("Access.Application")

    ' Open the database
    objAccess.OpenCurrentDatabase strDBPath
    
    ' Create a new folder using the name of the database to hold all the exported objects if it does not already exist
    exportFolder = exportFolder & Mid(strDBPath, InStrRev(strDBPath, "\"), InStr(strDBPath, ".") - InStrRev(strDBPath, "\")) & "\"
    
    If Dir(exportFolder, vbDirectory) = "" Then
        MkDir exportFolder
    End If

    Set db = objAccess.CurrentDb()

    ' Export all objects to export location with a name based on the type and name of the object

    ' Export Tables
    For Each td In db.TableDefs
        If Left(td.Name, 4) <> "MSys" Then ' Skip Microsoft Access system tables
            objAccess.DoCmd.TransferText acExportDelim, , td.Name, exportFolder & "Table_" & td.Name & ".txt", True
        End If
    Next td

    ' Export Forms
    For Each doc In db.Containers("Forms").Documents
        objAccess.SaveAsText acForm, doc.Name, exportFolder & "Form_" & doc.Name & ".txt"
    Next doc

    ' Export Reports
    For Each doc In db.Containers("Reports").Documents
        objAccess.SaveAsText acReport, doc.Name, exportFolder & "Report_" & doc.Name & ".txt"
    Next doc

    ' Export Macros
    For Each doc In db.Containers("Scripts").Documents
        objAccess.SaveAsText acMacro, doc.Name, exportFolder & "Macro_" & doc.Name & ".txt"
    Next doc

    ' Export Modules
    For Each doc In db.Containers("Modules").Documents
        objAccess.SaveAsText acModule, doc.Name, exportFolder & "Module_" & doc.Name & ".txt"
    Next doc

    ' Export Queries
    For Each qd In db.QueryDefs
        ' Skip Microsoft Access temporary queries
        If Left(qd.Name, 3) <> "~sq" Then
            objAccess.SaveAsText acQuery, qd.Name, exportFolder & "Query_" & qd.Name & ".txt"
        End If
    Next

    objAccess.Quit

    Set db = Nothing
    Set cont = Nothing
    Set objAccess = Nothing

    MsgBox "Export complete to " & exportFolder, vbInformation
    
GoTo Exit_Sub

Err_ExportDatabase:
    MsgBox Err.Number & ": " & Err.Description
 
Exit_Sub:
End Sub