Actualisation (réellement finalisée) de requêtes PowerQuery

Bonjour à tous,

J'ai un fichier que j'actualise en workbookopen avant de poursuivre mon code, et ce afin de travailler sur des données à jour.

Malheureusement, jusqu'à présent toutes mes tentatives de refresh se sont avérées infructueuses. J'ai tenté pas mal d'approches, de la plus basique .refresh à de plus élaborées, sans succès, le code continue alors que les requêtes ne sont pas terminées.

J'ai donc ce code ci, qui devrait permettre d'attendre la fin des actualisations (9 requêtes), et me semble bien fichu, mais qui ne fonctionne pas. Les requêtes continuent de s'afficher comme étant en cours d'actualisation ("sablier"), alors que les lignes sont chargées, et ne s'affichent comme terminées qu'une fois sortie du code (déclenchement du timer pour éviter un code infini). Il semblerait donc qu'Excel ne valide pas ces requêtes comme finalisées dans ma boucle.

Pouvez-vous m'aider à résoudre ça ?

Mille merci à celui qui trouvera une solution (j'espère :))

Lorence

Sub ActualiserRequetesEtAttendre()
    Dim conn As WorkbookConnection
    Dim startTime As Double
    Dim isRefreshing As Boolean

    ' Début de la boucle d'actualisation
    startTime = Timer
    isRefreshing = True

    ' Démarrer l'actualisation de chaque connexion Power Query
    For Each conn In ThisWorkbook.Connections
        If conn.Type = xlConnectionTypeOLEDB Or conn.Type = xlConnectionTypeMODEL Then
            conn.Refresh
        End If
    Next conn

    ' Attendre que toutes les actualisations soient terminées
    Do While isRefreshing
        isRefreshing = False
        For Each conn In ThisWorkbook.Connections
            If conn.Type = xlConnectionTypeOLEDB Or conn.Type = xlConnectionTypeMODEL Then
                ' Vérifier si l'actualisation est encore en cours
                If conn.OLEDBConnection.Refreshing Then
                    isRefreshing = True
                End If
            End If
        Next conn

        ' Ajouter un délai d'attente pour permettre aux requêtes de s'exécuter
        DoEvents

        ' Si le temps d'attente dépasse 120 secondes, sortir
        If Timer - startTime > 120 Then
            MsgBox "L'actualisation a pris trop de temps."
            Exit Do
        End If
    Loop
End Sub

Bonjour

On peut paramétrer un requête pour s'actualiser automatiquement à l'ouverture d'un classeur.

Pour du VBA, on peut soit paramétrer les requêtes pour qu'elles ne s'exécutent pas en arrière plan ou le faire avec la commande

ThisWorkbook.Queries.FastCombine = True

placer avant le Refresh

Bonjour,

Merci pour votre réponse.

Les requêtes sont bien paramétrées pour se mettre à jour à l'ouverture du fichier, mais ce n'est pas suffisant, le code démarre tout de même avant que les requêtes se soient complètement exécutées.

Pour la propriété fastcombine, ça accélère effectivement l'exécution des requêtes, mais le suite du code s'exécute tout de même avant la finalisation de celles-ci.

RE

Alors dans les propriétés de chaque requête désactiver l'actualisation en arrière plan.

Là VBA attend son tour, lol (testé et approuvé à plsueiurs reprises)

Rechercher des sujets similaires à "actualisation reellement finalisee requetes powerquery"