Power Query power query

GIPJGR

XLDnaute Nouveau
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-)
 

chris

XLDnaute Barbatruc
Bonjour à tous

Quel est l'intérêt de VBA ici ? Tu ne le maîtrises pas et en général on n'en a pas besoin avec PowerQuery

Si tu nous disais plutôt ce que tu cherches à obtenir depuis ton dernier lien ?

Quelles colonnes notamment et quelles lignes. Si tu utilises la ou les dates ou pas...
 
Dernière édition:

JFL_XLD

XLDnaute Junior
Bonsoir JFL,
Merci pour la remarque, mon problème sur cette entreprise en particulier ne portait donc pas sur ses flux de trésorerie mais sur son bilan avec l'URL suivante: https://www.reuters.com/companies/FROB.PA/financials/balance-sheet-quarterly

Et la, ça va malheureusement bugguer😐


Bonne soirée
Bonjour à tous !

Ma requête Power Query se contente de lire le tableau (le seul...) présent sur la page de l'URL.
Si cela ne correspond pas à votre besoin, peut-être n'est-ce pas la bonne URL.....
 

chris

XLDnaute Barbatruc
RE
Ma requête Power Query se contente de lire le tableau (le seul...) présent sur la page de l'URL.
Si cela ne correspond pas à votre besoin, peut-être n'est-ce pas la bonne URL.....
Il ne suffit de toute évidence pas que de lire mais de traiter une URL dont le contenu évolue au fil des jours en terme de structure et tant qu'on ne saura rien du résultat attendu...
 

JFL_XLD

XLDnaute Junior
RE

Il ne suffit de toute évidence pas que de lire mais de traiter une URL dont le contenu évolue au fil des jours en terme de structure et tant qu'on ne saura rien du résultat attendu...

Notre ami nous exposait son souci ainsi : "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"

La problématique me semblait donc être simplement une difficulté de rapatriement des données. Ce qu'il compte en faire.......
 

chris

XLDnaute Barbatruc
RE

Il n'est pas de vent favorable pour celui qui ne sait où il va

Pour paramétrer correctement, savoir d'où on part et où on veut aller me parait essentiel

Sans doute un déformation de mon expérience d'assistance à maîtrise d'ouvrage...
 

GIPJGR

XLDnaute Nouveau
Bonjour,
Merci pour le temps que vous consacrez à ma démarche,
Comme l'évoquait JFL_Excel, ma problématique porte effectivement strictement sur le rapatriement de données depuis le web vers Excel. Je voudrais que ma macro lance automatiquement power query à partir des liens URL présents sur mon fichier excel (qui changent tt le temps, selon l'entreprise que je regarde) et me copie-colle le tableau correspondant à l'URL sur ma feuille excel.
Ma macro marche généralement, comme vu avec
https://www.reuters.com/companies/FROB.PA/financials/cash-flow-quarterly
En revanche, elle buggue sur des exemples tels que
https://www.reuters.com/companies/FROB.PA/financials/balance-sheet-quarterly

Je pense que sur ces 2 cas, c'est lié au nom des colonnes, ou au nombre de colonnes, et je ne sais pas comment régler ce problème
Ce que je voudrais, c'est copier-coller juste le code de l'entreprise (ici FRO.PA ou WOR.AX) dans une cellule excel, ce code ira compléter une ligne URL (ici FULL YEARS ONLY'!$H$6) et il suffirait ensuite de lancer la macro pour que derrière le tableau correspondant à l'URL s'affiche dans ma feuille excel.
Mas il peut y'avoir des bugs, d'ou mon souhait de réécrire une partie du code pour prendre en compte tous les cas de figure

Demeurant à votre disposition pour toute précision complémentaire,
Cordialement
 

chris

XLDnaute Barbatruc
Re

Comme déjà dit VBA totalement inutile : on peut paramétrer une requête sans VBA.

Ne maitrîsant ni VBA ni PowerQuery tu te compliques beaucoup les choses et tu seras coincé dès que tu voudras faire évoluer la requête...

Mais apparemment nos questions, à merinos et moi-même, sur ce que tu veux réellement récupérer te laissant de marbre...
 
Dernière édition:

GIPJGR

XLDnaute Nouveau
Bonsoir,
Je lis vos tchats et bon, je vois bien que je réponds à côté
Pour faire au plus simple, je vais prendre un cas qui marche
Situation de base:
Pour la société ADM ARCHER (code ADM.N), on a un lot de 6 liens URL
https://www.reuters.com/companies/ADM.N/financials/income-statement-annual

https://www.reuters.com/companies/ADM.N/financials/balance-sheet-annual

https://www.reuters.com/companies/ADM.N/financials/cash-flow-annual

https://www.reuters.com/companies/ADM.N/financials/income-statement-quarterly

https://www.reuters.com/companies/ADM.N/financials/balance-sheet-quarterly

https://www.reuters.com/companies/ADM.N/financials/cash-flow-quarterly

Ma macro dans son entier lance power query sur les 6 liens ci-dessus (6 fois la même opération, je pensais simplifier la présentation de mon pb en ne présentant la macro que d'une seule opération, désolé si ça a gêné la compréhension) et me répartit les 6 tableaux, c-a-d les données annuelles et trimestrielles, sur 2 feuilles distinctes, comme en PJ. De la, je peux brancher ces 2 feuilles sur mes ratios d'analyse financière (grace à des combinaisons de recherchev) et ainsi aller + vite dans mon analyse.

Malheureusement ça peut bugger, comme pour:

https://www.reuters.com/companies/FROB.PA/financials/balance-sheet-quarterly (à priori nombre de colonnes inférieur au modèle utilisé lors de l'enregistrement de la macro)

https://www.reuters.com/companies/WOR.AX/financials/income-statement-annual (à priori parce que les noms de colonne ne correspondent pas au modèle utilisé lors de l'enregistrement de la macro)

Refreshquery est aussi surligné en jaune quand je me penche sur le détail de la macro...


D'ou mon souhait de rendre plus souple ma macro, pour qu'elle puisse s'adapter à un changement ultérieur des noms de colonnes ou à un nombre de colonnes aléatoire (si c'est bien ça l'origine des bugs).

Espérant avoir éclairci ma démarche, et vous remerciant par avance pour vos suggestions,

Cordialement
 

Pièces jointes

  • Exemple ADM.xlsx
    24.3 KB · Affichages: 10

chris

XLDnaute Barbatruc
RE

Une solution PowerQuery avec
  • un tableau de paramètre qui en principe ne change pas,
  • le nom de la société (dans une cellule nommée) à saisir avant d'actualiser
  • une requête unique qui traite les 6 URL de la société indiquée en restituant des dates et des chiffres exploitables grâce à une fonction personnalisée
Le tableau unique résultant peut être exploité par diverses méthodes mais comme on ne sait toujours pas comment tu l'exploites... ni quelle version Excel tu utilises... difficile d'aller plus loin

(testé sans PB sur les 3 sociétés)
 

Pièces jointes

  • Traitement URL2_PQ.xlsx
    46.1 KB · Affichages: 12

GIPJGR

XLDnaute Nouveau
Bonsoir Chris,
Merci pour ta réponse, je comprends mieux les précédentes remarques, effectivement Power Query semble bien mieux répondre à mes besoins que ce que j'imaginais avec VBA, merci bcq!

Bon, il me faut un peu de temps pour me familiariser davantage avec POWER QUERY et la manière dont la requête a été écrite (il faut bien commencer un jour...)

Pour (tenter de) répondre à tes questions, ma version d'excel est Microsoft 365 Apps for business, et j'ai l'impression que ça pose problème effectivement, l'actualisation ne s'enclenche pas.
1632263868460.png

Si je comprends bien, il me faut réecrire la requête avec ma propre version pour régler ce problème
Par ailleurs, tu peux me confirmer qu'il est possible de conserver la mise en forme initiale de mon fichier excel, à savoir 3 tableaux distincts sur 2 feuilles différentes? C'est bien comme ça aussi, mais ça va me prendre des nuits à refaire les combinaisons de recherchev qui viennent après la saisie des data, pour agreger les différents différents postes comptables et procéder aux calculs de ratios (c'est dans ce sens que je compterais exploiter ces données))?


Merci encore pour tes conseils,

Cordialement
 

Discussions similaires

Réponses
16
Affichages
930
Réponses
14
Affichages
370

Statistiques des forums

Discussions
314 717
Messages
2 112 169
Membres
111 449
dernier inscrit
jhugot