VBA : attendre fin de mise à jour de la requête query pour la mise à jour des TCD

  • Initiateur de la discussion Initiateur de la discussion Jubei1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jubei1

XLDnaute Nouveau
Bonjour à tous,
Je m'inscris ici aujourd'hui parce que j'utilise souvent excel dans mon travail, je souhaite m'améliorer sur VBA et je suis sur qu'avec des pro comme on en trouve ici je vais y arriver...
Je crée ce sujet parce que je n'ai pas pu trouver dans le forum un autre sujet qui a bien traité bien traité la solution à mon petit problème...

Voilà, ma macro actualise 2 requêtes query puis ensuite 2 tableau croisé dynamique tout simplement. Cependant mes 2 tableaux croisés dynamique s'actualise avant que les informations est été importé avec les requêtes query. Je souhaite que l'actualisation de mes tableaux se fasse après la finalisation de l'actualisation des requêtes.
J'ai essayé avec Wait mais le temps d'exécution des requètes varie trop.

Voila mon code, si vous avez le temps d'y jeter un oeil ça serait cool !😀

Sub MiseAJour()
Dim qtb As Excel.QueryTable
For Each qtb In ThisWorkbook.Worksheets("Etiquettes supprimées").QueryTables
qtb.Refresh
Next qtb
Application.Wait Now + TimeValue("0:01:00")
For Each qtb In ThisWorkbook.Worksheets("Stock FSM").QueryTables
qtb.Refresh
Next qtb
Application.Wait Now + TimeValue("0:01:00")
Worksheets("Comparaison").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
End Sub
 
Re : VBA : attendre fin de mise à jour de la requête query pour la mise à jour des TC

Bonjour Jubei,

Essayez ainsi :

Code:
Sub MiseAJour()

Application.ScreenUpdating = False 'ne pas actualiser l'écran

Dim qtb As Excel.QueryTable

For Each qtb In ThisWorkbook.Worksheets("Etiquettes supprimées").QueryTables
qtb.BackgroundQuery = False 'ne pas exécuter l'actualisation en tache de fond
qtb.Refresh

Next qtb

For Each qtb In ThisWorkbook.Worksheets("Stock FSM").QueryTables
qtb.BackgroundQuery = False 'idem
qtb.Refresh

Next qtb

Worksheets("Comparaison").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh

Application.ScreenUpdating = True 'remettre l'actualisation de l'écran

End Sub

Je ne sais pas si ça marchera mais rien ne coute de le tenter !

A+ 🙂
 
Re : VBA : attendre fin de mise à jour de la requête query pour la mise à jour des TC

Bonjour,

essaye peut être ceci :
Code:
With Worksheets("Etiquettes supprimées")
    Do While .QueryTables(1).Refreshing Or .QueryTables(2).Refreshing
    Loop
End With
'rafraichissement des tcd

bon après midi
@+
 
Re : VBA : attendre fin de mise à jour de la requête query pour la mise à jour des TC

Ou encore (non testé) :

Code:
Sub MiseAJour()

Application.ScreenUpdating = False 'ne pas actualiser l'écran

Dim qtb As Excel.QueryTable

For Each qtb In ThisWorkbook.Worksheets("Etiquettes supprimées").QueryTables
qtb.BackgroundQuery = False 'ne pas exécuter l'actualisation en tache de fond
qtb.Refresh
Call qtb_AfterRefresh
Next qtb

For Each qtb In ThisWorkbook.Worksheets("Stock FSM").QueryTables
qtb.BackgroundQuery = False 'idem
qtb.Refresh
Call qtb_AfterRefresh
Next qtb

Worksheets("Comparaison").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh

Application.ScreenUpdating = True 'remettre l'actualisation de l'écran

End Sub
Sub qtb_AfterRefresh(Success As Boolean)

If Success Then
    Exit Sub
    
Else
    MsgBox "L'actualisation a échouée"
End If

End Sub

A partir de l'aide VBA en tapant Query ou encore AfterRefresh...

A+ 🙂
 
Re : VBA : attendre fin de mise à jour de la requête query pour la mise à jour des TC

Déjà 2 réponses !

J'ai essayé la première proposition et ça à l'air de marcher ! si j'ai bien compris excel n'execute pas la macro en tâche de fond et le fait directement ce qui l'oblige à la finir avant de passer à la 2ème instruction n'est-ce pas ?

La deuxième me génère une erreur mais j'ai surement du oublier un truc.

En tout cas merci à vous !

à bientôt par là surement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour