Long temps de rafraichissement... à la première exécution de la session

11extraction-api.zip (319.44 Ko)

Bonjour à toutes et tous,

Je travaille sur un fichier Excel qui permet d'extraire automatiquement des données d'une API et de les préparer sous forme d'un tableau unique. J'utilise notamment pour ça une table principale contenant mes éléments principaux et deux autres tables qui contiennent des informations additionnelles que je récupère par jointure.

L'outil fonctionne bien aujourd'hui. Toutefois, malgré plein d'essais différents, je reste bloqué sur un point. Lorsque je réalise l'extraction des données, le temps d’exécution est à chaque fois plus long quand c'est la première fois depuis l'ouverture du fichier Excel. Sur la même session les fois suivantes, quand bien même je change radicalement les paramètres de mon extraction à différentes reprises, le temps est réduit de façon visible.

De ce que j'ai pu voir en mettant en place une collecte des temps d'exécution pour les principales étapes de mon extraction (feuille "Metadata"), il semble que mon outil n'apprécie pas que je rafraichisse plus d'une requête dans une procédure (à la première exécution, toujours). Sur ce point, j'utilise pourtant une procédure appelée Refresh_Data_Connections pour rafraichir une à une les requêtes à partir de leurs numéros passées en paramètre (en désactivant puis en réactivant la propriété BackgroundQuery pour chacune).

Est-ce que quelqu'un a déjà rencontré ce souci et/ou a une idée de ce qui peut se passer et de comment le corriger ?

Bonne journée

PS : Je précise que mes données principales sont extraites de l'API au format CSV. Les deux autres tables, contenant bien moins de données en règle générale, sont récupérées en JSON.

Bonjour,

Je précise que je préfère souvent utiliser des méthodes "traditionnelles" pour interroger les sites. J'ai souvent mesuré que PowerQuery qui doit "digérer" les informations du site met plus de temps que le traitement direct du code source, soit en DOM, soit en string. Si en effet tu interroges 1142 sites ... j'imagine (et ce serait curieux qu'excel ne plante pas).

As-tu des url pour effectuer des tests ? faut-il avoir les jetons pour les interroger ?

Bonjour,

Merci de votre réponse et désolé de n'y répondre que maintenant.

En fait, ce problème se produit indépendamment de la taille de la requête. A la première exécution, le traitement (de A à Z) d'une requête renvoyant 159 lignes prend au total 19 secondes. Si j'effectue une autre requête du même style juste après, elle prend 4 secondes.

image

J'ai créé un compte avec des accès standards sur l'API donc je peux partager ce token : 28979fa2a529618069c52c2c64c3246a

Je joins également la dernière version du fichier car il y a eu quelques changements depuis.

Bonne journée,

Maxime

J'ai malheureusement des plantages avec query

Ce que je peux proposer, c'est ceci

Sub lire()

Dim ScriptEngine As Object, data As Object
    Set ScriptEngine = CreateObject("ScriptControl")
    With ScriptEngine
        .Language = "JScript"
        .AddCode "function N(jsonObj){return jsonObj.length;} "
        .AddCode "Object.prototype.element=function( i ) { return this[i] } ; "
    End With
    URL = [www]
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
        Set data = ScriptEngine.Eval("(" + CStr(.responsetext) + ")")
    End With

    Sheets("lecture").Select
    Range("A1").CurrentRegion.Offset(1, 0).ClearContents

    On Error Resume Next ' absence d'un élément
    For i = 0 To ScriptEngine.Run("N", data.data) - 1
        With data.data.element(i)
            For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
                Cells(i + 2, j) = .element(Cells(1, j).Value)
            Next
        End With
    Next

End Sub

Après, je n'ai pas compris s'il y avait d'autres urls à explorer !?

En fait, je viens de comprendre ce qui s'est passé. Il semble d'une part que l'outil n'apprécie pas le fait d'avoir plusieurs rafraichissements au même moment (ce que j'avais corrigé il y a quelques jours de ça en séparant dans le temps les rafraichissements des deux principales requêtes). En faisant l'ajout de nouvelles fonctionnalités récemment, j'ai cependant fait une erreur supplémentaire. J'ai chargé les données directement depuis l'API au lieu d'importer le CSV que je faisais exprès de télécharger pour améliorer le temps de réponse. Forcément, c'est tout de suite moins efficace --"

Merci de votre réponse quoi qu'il en soit. J'avoue opter pour Power Query par simplicité d'utilisation car j'ai des bases en VBA mais je suis vraiment incompétent sur le genre de solutions que vous proposez ici.

Bonne journée,

Maxime

J'avoue opter pour Power Query par simplicité d'utilisation car j'ai des bases en VBA mais je suis vraiment incompétent sur le genre de solutions que vous proposez ici.

et moi c'est l'inverse ! bonne continuation ...

Rechercher des sujets similaires à "long temps rafraichissement premiere execution session"