Attndre la fin d'un calcul

CyK

XLDnaute Junior
Bonjour,

Petit problème avec des calculs sur des données externes, qui sont ensuites traités par Cross Table :

Voila j'ai différentes requêtes qui s'effectuent sur une bases de données, des calculs sont effectuées à partir des résultats de requêtes dans les colonnes voisines, les données sont ensuites agrégées via des CrossTable. Jusque là tout va bien. Le problème est que pour faire le refresh des données, (le calcul automatique est désactivé) j'utilise un bouton qui exécute le code suivant.

Code:
Private Sub CommandButton1_Click()
    Sheets('ITEMS').Select
    Sheets('ITEMS').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('ITEMS').Calculate
    
    Sheets('OA').Select
    Sheets('OA').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('OA').Calculate
    
    Sheets('FA').Select
    Sheets('FA').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('FA').Calculate
    
    Sheets('PDL').Select
    Sheets('PDL').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('PDL').Calculate
    
    Sheets('S').Select
    Sheets('S').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('S').Calculate
    
    Sheets('S-1').Select
    Sheets('S-1').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('S-1').Calculate
    
    Sheets('S-2').Select
    Sheets('S-2').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('S-2').Calculate
    
    Sheets('S-3').Select
    Sheets('S-3').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('S-3').Calculate
    
    Sheets('S-4').Select
    Sheets('S-4').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('S-4').Calculate
    
    Sheets('STATS_PROD_PDL').Select
    Sheets('STATS_PROD_PDL').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('STATS_PROD_PDL').Calculate
    
    Sheets('SALES_CROSST').Select
    ActiveSheet.PivotTables('CROSS1').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS2').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS3').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS4').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS5').PivotCache.Refresh
    Sheets('SALES_CROSST').Calculate
    
    Sheets('CROSSTWEEK').Select
    ActiveSheet.PivotTables('CROSS1').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS2').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS3').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS4').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS5').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS6').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS7').PivotCache.Refresh
    Sheets('CROSSTWEEK').Calculate
    
    Sheets('DELTA_CALC').Select
    Sheets('DELTA_CALC').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('DELTA_CALC').Calculate
    
    Sheets('REPORT_DATA').Select
    Sheets('REPORT_DATA').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('REPORT_DATA').Calculate
    
    Sheets('STOCK_NEG0').Select
    Sheets('STOCK_NEG0').Range('A1').Select
    Selection.QueryTable.Refresh BackgroundQuery:=False
    Sheets('STOCK_NEG0').Calculate
    
    Sheets('CROSST_RUPT').Select
    ActiveSheet.PivotTables('CROSS1').PivotCache.Refresh
    ActiveSheet.PivotTables('CROSS2').PivotCache.Refresh
    Sheets('CROSST_RUPT').Calculate
        
    
    Sheets('SUMMARY').Select
    Sheets('SUMMARY').Calculate
    
    MsgBox 'Mise à jour des données terminée', vbExclamation, 'FIN'
    
End Sub

Je dois appuyer 2 fois sur le bouton sinon à la première exécution, il semble que les CrossTable se rafraichissent avant la fin des calculates sur les feuilles comportant les QueryTable. Précision les données ne sont pas enregistrées à l'enregistrement des feuilles (la feuilles sans les data résultants des query fait déjà 60Mo), l'actualisation automatique est désactivée.

En fait je cherche a savoir s'il y a moyen d'attendre la fin du calculate pour poursuivre le traitement à la manière d'un BackgroundQuery:=False

D'avance merci.
 

Statistiques des forums

Discussions
312 571
Messages
2 089 811
Membres
104 280
dernier inscrit
MeThOxXx