Microsoft 365 Comment executer la deuxième partie de la macro après verification

Did95

XLDnaute Nouveau
Bonjour à tous,
j'ai cherché un peu mais ne maitrisant pas je me pose une question.

j'ai un bouton avec une macro qui exécute un rafraichissement des requêtes Power Query, puis Actualise mais TCD.

Comme l'actualisation des requêtes power Query mais du temps environ 15000 par jour, l'actualisation des TCD ne se fait pas systématiquement.
Est-il possible de mettre une vérification que mes requêtes soient bien actualiser avant de faire les TCD?

voci ma macro:

Sub ActualiserToutDepuisBadge()
' Actualiser les requêtes Power Query
ActiveWorkbook.RefreshAll

' Actualiser les TCDs
Dim wsBadge As Worksheet
Dim wsImmatriculation As Worksheet
Dim ptBadge As PivotTable
Dim ptImmatriculation As PivotTable

' Spécifiez la feuille contenant le TCD "Recap Badge"
Set wsBadge = ThisWorkbook.Sheets("Recap Badge")

' Spécifiez la feuille contenant le TCD "Recap Immatriculation"
Set wsImmatriculation = ThisWorkbook.Sheets("Recap Immatriculation")

' Spécifiez le tableau croisé dynamique "Recap Badge"
Set ptBadge = wsBadge.PivotTables("Recap Badge")

' Spécifiez le tableau croisé dynamique "Recap Immatriculation"
Set ptImmatriculation = wsImmatriculation.PivotTables("Recap Immatriculation")

' Actualise les TCDs
ptBadge.RefreshTable
ptImmatriculation.RefreshTable
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Did95 :),

Un peu de littérature ici : https://solveandexcel.ca/2023/06/23/how-to-make-vba-wait-for-power-query/

Une des méthodes est d'actualiser vos tableaux structurés les uns après les autres avec pour chacun :
Sheets("maFeuille").ListObjects("monTableauStructuré1").QueryTable.Refresh False
...
puis d'actualiser les TCD.

nota : je suppose qu'il faut rafraichir les requêtes dans un ordre logique en fonction des dépendances des requêtes entre elles - si une requête xq2 dépend d'une requête xq1, d'abord rafraichir xq1 puis xq2.
 
Dernière édition:

Did95

XLDnaute Nouveau
Bonjour mapomme, merci pour le lien.

ce soir je vais tester cette macro qui j'espère solutionnera mon problème.

Sub ActualiserToutDepuisBadgeV2()
' Actualiser les requêtes Power Query
ActiveWorkbook.RefreshAll

' Attendre que les requêtes se terminent
Dim queryName As String
Dim queryTable As queryTable

' Spécifiez le nom de la première requête Power Query
queryName = Badge ' Remplacez par le nom de votre requête

On Error Resume Next
Set queryTable = ThisWorkbook.Queries(queryName).Table
On Error GoTo 0

If Not queryTable Is Nothing Then
Do While queryTable.Refreshing
DoEvents
Loop
End If

' Répétez le processus pour la deuxième requête Power Query
queryName = "Immatriculation" ' Remplacez par le nom de votre deuxième requête

On Error Resume Next
Set queryTable = ThisWorkbook.Queries(queryName).Table
On Error GoTo 0

If Not queryTable Is Nothing Then
Do While queryTable.Refreshing
DoEvents
Loop
End If

' Actualiser les TCDs
Dim wsBadge As Worksheet
Dim wsImmatriculation As Worksheet
Dim ptBadge As PivotTable
Dim ptImmatriculation As PivotTable

' Spécifiez la feuille contenant le TCD "Recap Badge"
Set wsBadge = ThisWorkbook.Sheets("Recap Badge")

' Spécifiez la feuille contenant le TCD "Recap Immatriculation"
Set wsImmatriculation = ThisWorkbook.Sheets("Recap Immatriculation")

' Spécifiez le tableau croisé dynamique "Recap Badge"
Set ptBadge = wsBadge.PivotTables("Recap Badge")

' Spécifiez le tableau croisé dynamique "Recap Immatriculation"
Set ptImmatriculation = wsImmatriculation.PivotTables("Recap Immatriculation")

' Actualise les TCDs
ptBadge.RefreshTable
ptImmatriculation.RefreshTable
End Sub
 

Statistiques des forums

Discussions
314 751
Messages
2 112 501
Membres
111 571
dernier inscrit
47VJIS3