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

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 !:D

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
 

dudule

XLDnaute Nouveau
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+ :)
 

Pierrot93

XLDnaute Barbatruc
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
@+
 

dudule

XLDnaute Nouveau
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+ :)
 

Jubei1

XLDnaute Nouveau
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.
 

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510