[Power Query] Modification des paramètres d'une requête en VBA
Bonjour à tous,
Je sèche sur un problème, et l’enregistreur de Macro ne me donne même pas de pistes ...
Je m'explique :
J'utilise "Requêtes et connexion" pour importer régulièrement un fichier html (une table uniquement) dans mon tableau Excel.
Parfois le format de cette table change (nommage et ajout de colonnes)
Je sais détecter ces changements, et je sais mettre ma requête à jour manuellement :
"Requete et connexions" / double clique sur ma table / Editeur avancé puis je modifie à la main le "fichier" suivant
let
Source = Web.Page(File.Contents("C:\Import.html")),
Data1 = Source{1}[Data],
#"Type modifié" = Table.TransformColumnTypes(Data1,{{"Type", type text},{"Clé", type text}, {"Choix", type text}, {"Resumé", type text},})
in
#"Type modifié"
Je ferme, je charge, Touchdown, tout va bien ...
Mais j’aimerais automatiser ce process cad éditer (en VBA) ce "fichier" descripteur avant de lancer la synchro.
Et, cerise sur le gâteau, je voudrais pouvoir lancer le choix du fichier directement, sans passer par "paramètre de la source de données" dans la fenêtre PowerQuery
Toute piste serait la bienvenue !
Merci de votre aide
Pierre
Alors j'ai avancé d'un cran en comprenant que l'enregistreur de macro fonctionne quand j'effectue tout l'import, et pas uniquement la modification ...
Du coup j'ai ça, je progresse ...
ActiveWorkbook.Queries.Add Name:="Table 1", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Web.Page(File.Contents(""C:\import.html""))," & Chr(13) & "" & Chr(10) & " Data1 = Source{1}[Data]," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Data1,{{""Type"", type text}, {""Clé"", type text}, {""Choix"", type text}, {""Résumé"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 1"";Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Table 1]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Table_1"
.Refresh BackgroundQuery:=False
End With
End Sub
Mais ya encore du boulot ...
J'ai finalement ma solution :
'On efface la précédente requête
ActiveWorkbook.Queries("Table 1").Delete
'On modifie les champs (nouvelle requête)
ActiveWorkbook.Queries.Add Name:="Table 1", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Web.Page(File.Contents(""C:\import.html""))," & Chr(13) & "" & Chr(10) & " Data1 = Source{1}[Data]," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Data1,{{""Toto"", type text}, {""Tata"", type text}, {""Choix"", type text}, {""Résumé"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié"""
'On force la MAJ
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False