Ouvrir table de données Access dans Excel avec code VBA

Bonjour à tous,

Je sollicite une nouvelle fois votre aide.

Malgré mes recherches je n'arrive pas à trouver où comprendre les codes VBA que je trouve pour l'adapter à ma situation.

Voilà mon problème, je souhaite tout simplement ouvrir une table de données fait sous Access dans une feuille déjà existante dans excel.

Quelqu'un peut t'il m'aider?

Merci

Bonjour à tous,

Voila ce que j'ai réussit à faire avec excel via "données" => "nouvelle requête"=>"à partir d'une base de données"=>"à partir d'une base de données microsoftAcces"

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.Queries.Add Name:="Data_base_test", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Access.Database(File.Contents(""H:\Downloads\config type\config type\test\Database_test.accdb""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    _Data_base_test = Source{[Schema="""",Item=""Data_base_test""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    _Data_base_test"
    Sheets.Add After:=ActiveSheet
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Data_base_test" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Data_base_test]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True

        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .ListObject.DisplayName = "Data_base_test"
        .Refresh BackgroundQuery:=False
    End With
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub

en mettant .RefreshOnFileOpen = False à True j'ai bien ma base de données qui ce met à jour à l'ouverture du fichier.

Mon premier problème est le chemin d’accès "H:\Downloads\config type\config type\test\Database_test.accdb"

j'aimerais le remplacer par"chemin_bd ", ayant déclarer comme ceci le "chemin_bd"

Dim chemin_bd As String
chemin_bd = ThisWorkbook.Path & "\database_test"

ce qui donne

Sub Macro1()

' Macro1 Macro
Dim chemin_bd As String
chemin_bd = ThisWorkbook.Path & "\Database_test.accdb"

'
    ActiveWorkbook.Queries.Add Name:="Data_base_test", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Access.Database(File.Contents(""chemin_bd""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    _Data_base_test = Source{[Schema="""",Item=""Data_base_test""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    _Data_base_test"
    Sheets.Add After:=ActiveSheet
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Data_base_test" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Data_base_test]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True

        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .ListObject.DisplayName = "Data_base_test"
        .Refresh BackgroundQuery:=False
    End With
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub

en gros voici le changement

Source = Access.Database(File.Contents(""chemin_bd"") à la palce de Source = Access.Database(File.Contents(""H:\Downloads\config type\config type\test\Database_test.accdb"")

Mais lors du lancement de la macro j'ai une erreur de type "erreur d’exécution de type '1004'.

[dataformaterror] le chemin d'aces spécifier dois être un chemin d’accès absolu valide

Mon deuxième problème est que je voudrais que ma macro s’exécute toute seul ,car c'est pour des gens qui ne connaisse vraiment rien à l'informatique.

Mais si je met mon code dans un

"Private Sub Workbook_Open()" lors de la deuxième ouverture j'ai un message d'erreur me disant que la table existe déjà.Comment palier à ce problème, tout en étant sur qu'excel vas automatiquement créer le lien avec acces?

je vous joints 2 fichiers excel , mais je ne peut pas vous joindre le fichier acces car le site ne veut pas .

Mais c'est un fichier acces des plus simple (pour test), juste avec 3 colonnes.

merci pour votre aide

11classeur1.xlsm (23.52 Ko)
4classeur2.xlsm (13.31 Ko)

Bonjour,

fait un essai en enlevant les 2 guillemets avant et après la variable chemin_bd

Bonjour à tous,

Voici un fichier Excel qui récupère le contenu de tables Access (1 onglet par table)

Pierre

Bonjour, merci pierrep56 pour ton travail

Cela vas bien chercher la table, pas de soucis merci

Mais je n'ai pas de mise à jour automatique de la table à chaque ouverture d'excel

De plus je souhaite protéger ma table de données par un mot de passe dans un premier temps, puis créer plusieurs utilisateur avec un mot de passe différents.

Aurais-tu une solution pour cela?

Cordialement

Si le .accdb est protégé par mot de passe, il suffit de compléter la chaine de connexion, du type :

"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=chemin_fichier;UID=login;PWD=motdepasse;"

Pour la mise à jour à l'ouverture, il suffit d'ajouter un appel dans un Workbook_Open en indiquant le chemin et le nom du fichier directement. Et ajouter un Raz dans un Workbook_BeforeClose.

Rien que du classique

Pierre

Bonsoir, merci pierrep56.

Désolé de répondre aussi tardivement mais cela fait plusieurs jour que j'essaie de trouver la solution mais sans succès.

J'aimerais ne pas écrire le chemin d'accès dans le workbook, car si le chemin changé le fichier ne ce met plus a jour.

As tu une solution a me proposer ?

Merci encore pour ton aide.

Rechercher des sujets similaires à "ouvrir table donnees access code vba"