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 SubBonjour
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 = Trueplacer 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)