Power query chemin relatif stocker dans une cellule
Bonjour,
je n'arrive pas à faire en sorte que power query prenne en compte un chemin d'accès (J:\XX\XX\XX) inscrit dans la cellule B1 de mon tableau.
Power query est lancé à partir d'un commandbutton1
Private Sub CommandButton1_Click()
' efface les requetes existantes
Dim cn As WorkbookConnection, qry As WorkbookQuery
On Error Resume Next
For Each cn In ActiveWorkbook.Connections
cn.Delete
Next cn
For Each qry In ActiveWorkbook.Queries
qry.Delete
Next qry
'power query
Application.CutCopyMode = False
ActiveWorkbook.Queries.Add Name:="s�lection", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Folder.Files(""J:\XX\XX\XX"")" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " Source"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=s�lection;Extended Properties=""""" _
, Destination:=Range("$b$3")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [s�lection]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "s�lection"
.Refresh BackgroundQuery:=False
End With
End SubJ'ai piqué des codes à droite gauche mais la je bloque, je n'arrive pas à coder la récupération de la valeur B1 en chemin relatif (ou absolue
Si vous avez l'astuce, merci d'avance.
Bonjour,
Le principe est de nommer cette cellule B1 par "Rep_Fich", par exemple.. Et dans cette cellule, mettre le chemin (sans le \ de fin..)
Puis dans le code de création, mettre ceci au début, après :
...
...
'power query
Application.CutCopyMode = False
ActiveWorkbook.Names.Add Name:="Rep_Fich", RefersToR1C1:="=Feuil1!R1C2" 'pour rajouter le nom à la cellule B1
ActiveWorkbook.Queries.Add Name:="s�lection", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Folder.Files(Table.FirstValue(Excel.CurrentWorkbook(){[Name=""Rep_Fich""]}[Content]))" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " Source"
...
'Reste du code
...PS, pense à mettre à jour ta version Excel, je doute fort déjà qu'Excel 2008 existe, ou le cas échéant, qu'il supporte PQ...
Bon courage
PS2, je ne vois pas trop l'intérêt de recréer une requête à chaque fois, est-ce que mettre un nouveau répertoire dans la cellule B1 ne serait pas suffisant...
Auquel cas, la Source deviendrait :
Source = Folder.Files(Table.FirstValue(Excel.CurrentWorkbook(){[Name="Rep_Fich"]}[Content]))Peut-être?
Salut Cousinhub,
alors ça marche pour la requête en connexion cela prend bien en compte la source située dans la cellule B1 renommée "Rep_Fich" en dur directement sur la feuille Excel, par contre ça ne charge pas.
J'ai tenté de delete les cellules qui sont censées recevoir la table de power query. Mais le chargement ne se fait tout de même pas.
Voici le code :
Private Sub CommandButton1_Click()
' efface les requetes existantes
Dim cn As WorkbookConnection, qry As WorkbookQuery
On Error Resume Next
For Each cn In ActiveWorkbook.Connections
cn.Delete
Next cn
For Each qry In ActiveWorkbook.Queries
qry.Delete
Next qry
'efface les cellules cible
ActiveWorkbook.ActiveSheet.Range("B3:G99").Delete
'power query
Application.CutCopyMode = False
'ActiveWorkbook.Names.Add Name:="Rep_Fich", RefersToR1C1:="=Feuil1!R1C2" 'pour rajouter le nom à la cellule B1
ActiveWorkbook.Queries.Add Name:="selection", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Folder.Files(Table.FirstValue(Excel.CurrentWorkbook(){[Name=""Rep_Fich""]}[Content]))" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " Source"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Feuil1;Extended Properties=""""" _
, Destination:=Range("$b$3")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [selection]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "selection"
.Refresh BackgroundQuery:=False
End With
End SubPS : version Excel 365 si je ne m'abuse, en tout cas le power query fonctionne.
PS' : Si on peut faire maigrir le code je prends, mais injecter Source = Folder.Files(Table.FirstValue(Excel.CurrentWorkbook(){[Name="Rep_Fich"]}[Content])) dans le cas ci dessus, j'en suis malheureusement incapable (maitrise pas assez la synthaxe)
Voici le code qui semble marcher.
Private Sub CommandButton1_Click()
' efface les requetes existantes
Dim cn As WorkbookConnection, qry As WorkbookQuery
On Error Resume Next
For Each cn In ActiveWorkbook.Connections
cn.Delete
Next cn
For Each qry In ActiveWorkbook.Queries
qry.Delete
Next qry
'efface les cellules cible
ActiveWorkbook.ActiveSheet.Range("B3:G99").Delete
'power query
Application.CutCopyMode = False
'ActiveWorkbook.Names.Add Name:="Rep_Fich", RefersToR1C1:="=Feuil1!R1C2" 'pour rajouter le nom à la cellule B1
ActiveWorkbook.Queries.Add Name:="selection", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Folder.Files(Table.FirstValue(Excel.CurrentWorkbook(){[Name=""Rep_Fich""]}[Content]))" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " Source"
Application.CutCopyMode = False
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=selection;Extended Properties=""""" _
, Destination:=Range("$B$3")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [selection]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "selection"
.Refresh BackgroundQuery:=False
End With
End Submerci pour tout cousinhub.