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
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
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.