Bonjour,
Novice en Macro Excel, j'essaie de faire une macro afin de récupérer une table Access depuis Excel.
Sachant que la macro devra aller chercher le nom du fichier Access, et le nom de la table, dans deux cellules préalablement renseignées dans le fichier Excel.
L'emplacement du fichier Access est connu et ne change pas. idem pour la position du fichier Excel qui porte la macro.
J'ai bien réussi, par enregistrement, à créer le code ci-dessous, mais je n'arrive pas à m'approprier le code enregistrer automatiquement, et à paramétrer la possibilité de choisir le fichier Access et de la table que je veux importer.
Dans l'exemple ci-dessous le nom de la table "TRAVAUX_DEC" et le nom du fichier "225-360-PG3.mdb" doivent pouvoir etre changer via les deux celulles rempli sous Excel.
Est-ce qu’il est possible de modifier ce code enregistré automatiquement, et je n'ai pas encore trouvé comment faire, ou est ce que je dois trouver une autre solution ?
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 ActiveWorkbook.Queries.Add Name:="TRAVAUX_DEC", Formula:= _ "let" & Chr(13) & "" & Chr(10) & " Source = Access.Database(File.Contents(""C:\DATA\225-360-PG3.mdb""), [CreateNavigationProperties=true])," & Chr(13) & "" & Chr(10) & " _TRAVAUX_DEC = Source{[Schema="""",Item=""TRAVAUX_DEC""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " _TRAVAUX_DEC" ActiveWorkbook.Worksheets.Add With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _ "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=TRAVAUX_DEC;Extended Properties=""""" _ , Destination:=Range("$A$1")).QueryTable .CommandType = xlCmdSql .CommandText = Array("SELECT * FROM [TRAVAUX_DEC]") .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "TRAVAUX_DEC" .Refresh BackgroundQuery:=False End With
Merci
Partager