Power Query MAJ lente

Bonsoir à tous,

J'ai un fichier sur lequel la MAJ de certaines requêtes est relativement longue, est-il possible d'alléger la ou les requêtes qui composent ce fichier.

Vous en remerciant par avance.

Config PC :

Intel (R) Core (TM) I5-6500 CPU 3.20 Ghz, 16GO de RAM, Windows 10, SSD Samsung 860 EVO 1000 GB

Cordialement

Bonjour Zebulon2

Pour moi ce n'est pas qu'un éventuel souci de requête, mais de serveur web ou sont hébergés les données

Je ne peux pas tester au bureau, problème de Firewall

Bonjour JExcel2fr,

Merci pour ta participation.

Les données initiales sont sur le site de la FFTA.

Cordialement

Bonjour

en se connectant en "Anonyme" je récupère bien les infos.

pour moi le problème est que vous décomposez toutes les villes : Pusignan, Marcy l'Etoile, Marsannay...

et que la requête "Résultat concours" fait appel à chacune d'entre elles. et donc cela multiplie le nombre d'appel à Web.Contents( "https://extranet.ffta.fr/pdfresultats/2025/S_0169197_20251025_74316.pdf")

il faudrait charger tout en une seule fois dans une table

puis faire dépendre ensuite chaque requête de cette table (qui sera alors en local).

le mieux serait de traiter toutes les données en une seule fois (imaginer si vous aviez 50 villes et non une dizaine)

Mais je n'ai pas le temps de regarder plus profondément le sujet

Stéphane (un lyonnais non membre de la FFTA !)

Bonjour Stéphane,

Merci pour ta participation.

Le problème, c'est que les résultats n'apparaissent qu'une fois la compétition passée. D’où la multiplication. Il faudrait peut être, une fois le résultat récupéré, figée la colonne dans la requête ??? Le résultat ne pouvant pas changé.

Cordialement

Edit :

Stéphane (un lyonnais non membre de la FFTA !)

Archer aussi ?

Re,

Je viens de mettre à jour mon fichier avec les résultats de Villefontaine. Comme me l'a indiqué Stéphane, la requête Résultats concours interroge le site de la FFTA pour chaque club.

Comment faire pour que la requête de chaque club soit figée une fois pour toutes, les résultats ne pouvant évoluer il est inutile qu'il y est une actualisation.

Cordialement

Bonjour à tous,

Zebulon, ci-joint une révision effectuée avec IA (je ne connais pas encore très bien le M). Le fonctionnement est le suivant :

Dans paramètres tu as un nouveau tableau Ville/URL (t_Concours).

A partir de ce tableau, la requête Cache_Concours_Update va aller chercher pour chaque URL listée les infos nécessaires. Cette requête est désactivée dans le Rafraichir tout, ainsi une fois chargée tu as bien "les résultats ne pouvant évoluer il est inutile qu'il y est une actualisation". Et quand tu en as besoin tu peux la rafraichir. On récupère ce tableau en local dans Cache_Concours_Local (sans interroger internet).

Les 3 requêtes suivantes (de résultats) : Concours_XXX vont enfin chercher dans le tableau local les infos nécessaires et refont les calculs que tu faisais. A vrai dire cette partie je n'ai pas trop approfondi il y a peut-être des différences (tri des colonnes ?) mais l'idée est là.


Donc pour résumer :

t_Concours (ville/URL) => tableau local Cache_Concours (rafraichi via Cache_Concours_Update) => Résultats.


NB : j'ai laissé tes feuilles "Résultats" mais les 3 fonctions mises à jour sont dans les feuilles "Concours_XXX".

Bonjour saboh12617,

Merci pour ta participation.

Je regarde çà et je te tiens au courant.

Cordialement

Re,

Je viens de tester, j'ai rajouté Villefontaine https://extranet.ffta.fr/pdfresultats/2025/S_0138109_20251206_73844.pdf

La requête Cache_Concours_Update se met bien à jour, par contre malgré l'actualisation, Cache_Concours_Local ne se met pas à jour.

Cordialement

Edit :

La mise à jour s'est faite à la fermeture de l'écran PQ, mais il semble que le temps d'attente est identique, il actualise chaque club.

Il faudrait se connecter à la FFTA uniquement pour le dernier club.

Merci pour cette proposition

Une fois que Cache_Concours_Update a rafraichi la table Excel de la feuille "Cache_Concours", pas besoin d'appeler "Cache_Concours_Local", il suffit de rafraichir les requêtes du dossier "Résultats" : Concours_ScoreParVille, Concours_StatsArcher et Concours_Resultats.

En fait Cache_Concours_Local est juste une connexion vers la table de la feuille "Cache_Concours" qu'utilisent les autres requêtes. Si je comprends bien, l'intérêt de passer par cette mini-requête plutôt que le classique Excel.CurrentWorkbook(){[Name="Cache_Concours_Update"]}[Content] directement dans chacune des requetes Concours_XXX c'est qu'ensuite on a l'instruction Table.Buffer(Source) qui va garder la table en mémoire pour les prochains appels à Cache_Concours_Local. Donc au lieu de lire 3x la table, elle n'est lue qu'une fois.

Personnellement en ajoutant Villefontaine j'ai bien la ville qui est apparue dans les 3 tableaux après le rafraichissement.

EDIT : oui la requete Cache_Concours_Update actuelle va rechercher tous les résultats. Si tu veux on peut checker les villes déjà présentes dans le tableau et n'ajouter que les nouvelles mais ce n'est pas le fonctionnement que j'avais compris. Car je ne sais pas comment ça fonctionne mais si l'un des PDF venait à se mettre à jour, alors dans ce cas on ne le verrait jamais.

Re,

Une fois le PDF rapatrié, il ne peut plus évoluer. Donc s'il est possible de modifier la requête pour ne récupérer que l'ajout du nouveau club, cela serait parfait.

Cordialement

Bonjour Zebulon, à tous,

Comment faire pour que la requête de chaque club soit figée une fois pour toutes, les résultats ne pouvant évoluer il est inutile qu'il y est une actualisation.

Également intéressé par ce sujet, j'ai fait quelques recherches sur le net. J'ai trouvé CECI, mis à jour le 11-08-2025. Quand j'essaye de mon côté, les propriétés de la requête ne correspondent pas du tout à l'image qu'il y a dans le sujet et je n'ai pas l'option à cocher...

C'est un mystère...

Ps : je n'ai pas ouvert le fichier.

Re,

Une fois le PDF rapatrié, il ne peut plus évoluer. Donc s'il est possible de modifier la requête pour ne récupérer que l'ajout du nouveau club, cela serait parfait.

Cordialement

Dans ce cas tu peux éditer la requête Cache_Concours_Update avec ce code, qui n'appelle la lecture Web (fn_Concours) que pour les villes de SourceConcours non-présentes dans le tableau Cache_Concours_Update :

Nota : en réalité cela pourrait être un peu cours car il y a une vérification que la table n'a pas été supprimée d'Excel mais après tout pourquoi pas, cela permet d'éviter le plantage.

// ////////////////////////////// Update_Cache_Concours //////////////////////////////
let
    // 1) Tables d'entrée
    Source      = SourcesConcours, // doit contenir au moins: Ville, Url
    // Tente de lire la table Excel "Cache_Concours_Update" (table physique dans le classeur)
    CacheTry    = try Excel.CurrentWorkbook(){[Name="Cache_Concours_Update"]}[Content] 
                   otherwise null,

    // 2) Normalisation du cache: si absent => cache vide avec les colonnes attendues
    CacheRaw    = if CacheTry = null 
                  then #table({"Ville","Cat","Club","Licence","Nom","Total","Rang"}, {})
                  else CacheTry,

    // 3) Harmoniser les colonnes du cache (au cas où des colonnes en trop/ordre différent)
    Cache       = Table.SelectColumns(
                    CacheRaw,
                    {"Ville","Cat","Club","Licence","Nom","Total","Rang"}
                  ),

    // >>> (Optionnel) uniformiser la casse des noms de villes pour éviter les faux doublons
    // SourceNorm = Table.TransformColumns(Source, {{"Ville", each Text.Upper(_), type text}}),
    // CacheNorm  = Table.TransformColumns(Cache,  {{"Ville", each Text.Upper(_), type text}}),
    // Si vous activez les 2 lignes ci-dessus, remplacez "Source" et "Cache" par "SourceNorm" et "CacheNorm" ci-dessous.

    // 4) Villes à traiter : anti-join entre la source et le cache sur "Ville"
    //    -> on ne garde QUE les lignes de Source dont la ville n'est pas dans Cache
    ToFetchJoin = Table.NestedJoin(Source, {"Ville"}, Cache, {"Ville"}, "Cache", JoinKind.LeftAnti),
    ToFetch     = Table.RemoveColumns(ToFetchJoin, {"Cache"}),

    // 5) Appel lourd UNIQUEMENT sur les nouvelles villes
    Fetch       = Table.AddColumn(ToFetch, "Data", each fn_Concours([Url], [Ville])),

    // 6) Expansion des résultats de fn_Concours
    Expand      = Table.ExpandTableColumn(
                    Fetch,
                    "Data",
                    {"Cat","Club","Licence","Nom","Total","Rang"},
                    {"Cat","Club","Licence","Nom","Total","Rang"}
                  ),

    // 7) Colonnes finales pour les nouvelles lignes
    ChoixColNew = Table.SelectColumns(Expand, {"Ville","Cat","Club","Licence","Nom","Total","Rang"}),

    // 8) Append-only : on combine l'ancien cache + les nouvelles lignes
    Result      = Table.Combine({Cache, ChoixColNew})

in
    Result

Bonsoir,

Merci pour cette proposition qui à l'air prometteuse, je regarde cela et te tiens au courant.

Bonne fin de soirée.

Cordialement

re,

Comment as tu procédé pour rendre inaccessible les propriétés des requêtes du groupe Paramètres ?

Cordialement

re,

Comment as tu procédé pour rendre inaccessible les propriétés des requêtes du groupe Paramètres ?

Cordialement

Je n'ai pas bien compris la question... Tu veux dire qu'elles ne renvoient pas de tableau dans Excel ? Si c'est bien cela c'est parce que ce sont des connexions, mais tu en avais déjà fait pour les tables 1 à 5. Dans le bandeau des requêtes > clic droit > Charger vers (Load to) > connexion seule.

image image

re,

Je veux dire que l'accès aux Propriétés est grisé sur certaines requêtes.

image

Je n'ai rien touché de tout cela, de ce que j'observe c'est le cas pour toutes les connexions : les propriétés ne sont accessibles que pour les tableaux chargés dans Excel.

Bonsoir saboh12617,

Fichier bâti à partir de tes requêtes. Cela fonctionne bien mieux que mon fichier initial. Un grand merci pour ces améliorations.

Quelques interrogations.

- Comment dans la requête Résultats, réorganiser les colonnes en fonction de la liste Entete colonnes.

- Est il possible de n'interroger qu'une fois le site de la FFTA pour les requêtes du groupe Calendrier. Un peu comme pour les PDF de résultats.

Si tu vois d'autres améliorations, je suis preneur.

Bonne soirée,
Cordialement.

EDIT :

Fichier mis à jour

Bonjour Zebulon,

(je n'ai pas trouvé le fichier mis à jour ? peut-être à cause du problème d'upload de ce weekend).

Alors interroger "une fois" au sens propre du terme malheureusement non puisque le site renvoie le tableau sur plusieurs pages, donc il faut faire 1 appel web par page.

Par contre ce que tu peux faire c'est grouper tout cela dans une requête unique, en regroupant tes URLs dans un tableau (1 colonne = une liste) et les appeler en suivant.

J'ai remarqué qu'on pouvait même faire mieux, puisque l'URL contient la date de début de recherche, la date de fin, et la liste des départements, je t'ai fait une fonction qui va récupérer ces infos depuis un petit tableau, et reconstruire l'URL dynamiquement en fonction. De plus, PQ itère sur le nombre de pages automatiquement jusqu'à trouver la première page vide (stop max de sécurité à 20 pages dans le code = grosse marge), et s'arrête là. Ça permet de gérer les cas avec +/- de data. Ainsi pour l'an prochain tu n'auras qu'à changer les dates de début/fin, et tu peux ajouter/supprimer des départements facilement.

image

Par sécurité j'ai gardé l'option "liste d'URL" dans un tableau au cas où ça planterait, mais de mes tests ça fonctionne bien (la liste de secours n'est pas utilisée).


NB : on ne peut pas "garder en mémoire" sur ce coup, donc à chaque rafraichissement ça recharge les X pages nécessaires (adaptation automatique selon le cas).

NB 2 : J'ai noté que ma méthode chargeait 1 ligne de plus que les 5 anciennes queries :

01/02/2026St EtienneCHAMPIONNAT DEPARTEMENTAL SALLE à SAINT-ETIENNE

Pour info, voici les tableaux ajoutés dans la feuille Paramètres :

image

Et tu trouveras les nouvelles requêtes dans le classeur, dossier "Calendrier".

image
Rechercher des sujets similaires à "power query maj lente"