Softcoding macro pour importer des données depuis ACCESS

Bonjour,

Je ne suis pas très familier au code VBA permettant de faire des liens entre applications d'OFFICE. J'ai donc utilisé pour une fois, l'enregistreur de macro VBA. La macro fonctionne en soi très bien, la voici:

Sub GetData()

ActiveWorkbook.Queries.Add Name:="impact with measure", Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "  Source = Access.Database(File.Contents("" \\MONPC\MONFOLDER\MONFICHIER.ext""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    #""_impact with measure"" = Source{[Schema="""",Item=""impact with measure""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""_impact with measure"""

ActiveWorkbook.Worksheets.Add.Name = s_input 'add worksheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""impact with measure"";Extended Properties=""""", Destination:=Range(firstcell)).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array("SELECT * FROM [impact with measure]")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = t_input
    .Refresh BackgroundQuery:=False
End With
perf True
End Sub

Ma requête consiste plutôt dans le fait que j'aimerais l'adapter afin de rendre certain paramètres plus flexible. Notamment par exemple modifier le fichier (et le chemin permettant d'y accéder) ou encore la table sélectionnée du fichier ACCESS. Si j'essaie ainsi par exemple de remplacer un de ces deux paramètres par une constante ou une fonction définissant le paramètre, cela ne fonctionne malheureusment pas.

Ainsi si j'effectue les changements suivants par exemples:
à la place de

Source = Access.Database(File.Contents("" \\MONPC\MONFOLDER\MONFICHIER.ext"")

J'écris:

Dim file as string
file="qqch"

....

Source = Access.Database(File.Contents("" & file & "")

La macro ne s'éxécute pas et me renseigne généralement que le problème survient au niveau de la ligne

.Refresh BackgroundQuery:=False

J'espère exprimer correctement mon problème. En somme, j'aimerais trouver simplement une manière d'importer des données d'ACCESS en Excel qui puisse être facilement paramétrable. Si vous avez également une autre solution que celle suggérée par le macro recorder, je suis bien entendu preneur.

D'avance un tout grand merci

Bonjour Nathan

Plutôt que d'utiliser VBA, mieux faudrait-il utiliser PQ (Power Query)

Qu'en pensez-vous ?

A+

bonjour,

edit : bonjour BrunoM45

non testé, mais selon moi, il manque des " dans ton instruction, Elle devrait ressembler à ceci.

Source = Access.Database(File.Contents(""" & file & """)

donc

 Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "Source = Access.Database(File.Contents(""" &  fichier & """), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & "    #""_impact with measure"" = Source{[Schema="""",Item=""impact with measure""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""_impact with measure"""

Bonjour,

@BrunoM45, c'est très certainement une bonne idée. Malheureusement, je n'ai encore eu le temps de m'instruire sur ce type de commande.
Merci h2so4, c'était en effet bien ça. Je comprend mieux pourquoi ça ne fonctionnait pas!

Bonjour,

Sauf erreur de ma part...

Ce que tu as fait (et enregistré par l'enregistreur), c'est une requête Power Query (que tu as donc utilisé à l'insu de ton plein gré...)

Bonne fin d'apm, et bon W-E

Rechercher des sujets similaires à "softcoding macro importer donnees access"