Bonjour,
Ravi de me joindre au forum Excel Downloads, j'ai pu en parcourant les différents fils de discussion régler pas mal de problèmes dans la réalisation de fichiers excel pour m'aider dans mon métier (analyse financière).
Aujourd'hui je bloque néanmoins sur Power Query et je me permets de m'adresser directement à vous, pour voir si d'aventure une solution existerait
Pour rentrer dans le vif du sujet, je souhaite importer des données depuis Reuters vers Excel via Power Query.
Via un enregistrement de macro, j'ai pu établir un script (avec un modèle X) qui marche dans l'ensemble, cependant des bugs peuvent survenir avec d'autres entreprises et casser l'importation des données:
- quand la 2ième colonne du tableau affiche pour titre 30-Jun-2021 (l'enregistrement de macro, je l'ai fait avec un tableau dont la 2ième colonne était 31-Dec-2020)
- quand le tableau visé comporte 3 ou 4 colonnes seulement (l'enregistrement de macro, je l'ai fait avec un tableau qui comptait 7 colonnes, donc ma macro cherche des colonnes qui n'existent pas, d'ou le bug)
Quand j'essaie de comprendre ou est l'erreur, c'est souvent Refresh BackgroundQuery:=False qui est surligné.
Il faudrait à priori que je réécrive une partie du code de telle sorte que la macro soit plus "souple", qu'elle se contente d'importer les colonnes existantes du tableau, sans se soucier de leur libellé, ou du nombre de colonnes du tableau
Voila le code en question
FULL YEARS ONLY'!$H$6 fait référence à un lien URL tel que https://www.reuters.com/companies/FROB.PA/financials/cash-flow-quarterly
Dim MonLien As String
MonLien = Range("'FULL YEARS ONLY'!$H$6")
ActiveWorkbook.Queries.Add Name:="Table 0", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Web.Page(Web.Contents(""" & MonLien & """))," & Chr(13) & "" & Chr(10) & " Data0 = Source{0}[Data]," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Data0,{{"""", type text}, {""31-Dec-20"", type number}, {""31-Dec-19"", type number}, {""31-Dec-18"", type text}, {""31-Dec-17"", type text}, {""31-Dec-16"", type" & _
" text}, {""Trend"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié"""
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 0"";Extended Properties=""""" _
, Destination:=Range("'FULL YEARS ONLY'!$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Table 0]")
.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_0"
.Refresh BackgroundQuery:=False
End With
Je suis certain que c'est la partie en gras qui déconne, mais comment la réecrire de telle sorte qu'elle se contente de prendre les noms des colonnes dans le tableau sans chercher à tout prix 31-Dec-20, 31-Dec-19, 31-Dec-18, etc, et sans bugger quand il n'y a pas 7 colonnes comme dans le cas initial?
En toute franchise, je démarre tout juste sur VBA, merci pour votre bienveillance et vos suggestions
Bonne soirée-)
Ravi de me joindre au forum Excel Downloads, j'ai pu en parcourant les différents fils de discussion régler pas mal de problèmes dans la réalisation de fichiers excel pour m'aider dans mon métier (analyse financière).
Aujourd'hui je bloque néanmoins sur Power Query et je me permets de m'adresser directement à vous, pour voir si d'aventure une solution existerait
Pour rentrer dans le vif du sujet, je souhaite importer des données depuis Reuters vers Excel via Power Query.
Via un enregistrement de macro, j'ai pu établir un script (avec un modèle X) qui marche dans l'ensemble, cependant des bugs peuvent survenir avec d'autres entreprises et casser l'importation des données:
- quand la 2ième colonne du tableau affiche pour titre 30-Jun-2021 (l'enregistrement de macro, je l'ai fait avec un tableau dont la 2ième colonne était 31-Dec-2020)
- quand le tableau visé comporte 3 ou 4 colonnes seulement (l'enregistrement de macro, je l'ai fait avec un tableau qui comptait 7 colonnes, donc ma macro cherche des colonnes qui n'existent pas, d'ou le bug)
Quand j'essaie de comprendre ou est l'erreur, c'est souvent Refresh BackgroundQuery:=False qui est surligné.
Il faudrait à priori que je réécrive une partie du code de telle sorte que la macro soit plus "souple", qu'elle se contente d'importer les colonnes existantes du tableau, sans se soucier de leur libellé, ou du nombre de colonnes du tableau
Voila le code en question
FULL YEARS ONLY'!$H$6 fait référence à un lien URL tel que https://www.reuters.com/companies/FROB.PA/financials/cash-flow-quarterly
Dim MonLien As String
MonLien = Range("'FULL YEARS ONLY'!$H$6")
ActiveWorkbook.Queries.Add Name:="Table 0", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Web.Page(Web.Contents(""" & MonLien & """))," & Chr(13) & "" & Chr(10) & " Data0 = Source{0}[Data]," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Data0,{{"""", type text}, {""31-Dec-20"", type number}, {""31-Dec-19"", type number}, {""31-Dec-18"", type text}, {""31-Dec-17"", type text}, {""31-Dec-16"", type" & _
" text}, {""Trend"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié"""
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 0"";Extended Properties=""""" _
, Destination:=Range("'FULL YEARS ONLY'!$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Table 0]")
.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_0"
.Refresh BackgroundQuery:=False
End With
Je suis certain que c'est la partie en gras qui déconne, mais comment la réecrire de telle sorte qu'elle se contente de prendre les noms des colonnes dans le tableau sans chercher à tout prix 31-Dec-20, 31-Dec-19, 31-Dec-18, etc, et sans bugger quand il n'y a pas 7 colonnes comme dans le cas initial?
En toute franchise, je démarre tout juste sur VBA, merci pour votre bienveillance et vos suggestions
Bonne soirée-)