web-dev-qa-db-fra.com

actualiser la source de données externe et les tableaux croisés dynamiques dans un calendrier

Dans mon dernier message Actualisation automatique des données des tableaux croisés dynamiques dans Excel lors de la première exécution , j’ai constaté que lors de mon première exécution, la requête de la source de données External est actualisée et prend environ 1 min pour exécuter. et dans ma deuxième manche, les tableaux croisés dynamiques sont mis à jour.

Existe-t-il une solution (code VBA) pour actualiser la source de données externe et les tableaux croisés dynamiques dans un calendrier (si nous définissons une minuterie) en cliquant sur command button?

6
user42995

Sous les propriétés de connexion, décochez "Activer l'actualisation de l'arrière-plan". Cela actualisera la connexion quand on le lui demandera, et non en arrière-plan, car d'autres processus se produisent.

Avec l'actualisation en arrière-plan désactivée, votre procédure VBA attendra l'actualisation de vos données externes avant de passer à la ligne de code suivante.

Ensuite, il vous suffit de modifier le code suivant:

ActiveWorkbook.Connections("CONNECTION_NAME").Refresh
Sheets("SHEET_NAME").PivotTables("PIVOT_TABLE_NAME").PivotCache.Refresh

Vous pouvez également désactiver l'actualisation en arrière-plan dans VBA:

ActiveWorkbook.Connections("CONNECTION_NAME").ODBCConnection.BackgroundQuery = False
20
Alex

J'ai utilisé la réponse ci-dessus, mais j'ai utilisé la méthode RefreshAll. Je l'ai également modifié pour permettre plusieurs connexions sans avoir à spécifier les noms. J'ai ensuite lié cela à un bouton de ma feuille de calcul.

Sub Refresh()

    Dim conn As Variant

    For Each conn In ActiveWorkbook.Connections
        conn.ODBCConnection.BackgroundQuery = False
    Next conn

    ActiveWorkbook.RefreshAll
End Sub
10
jpuck1054700

Je pense qu'il existe un moyen plus simple d'obliger Excel à attendre l'actualisation sans avoir à définir la propriété Background Query sur False. Pourquoi déconner avec les préférences des gens non?

Excel 2010 (et versions ultérieures) utilise cette méthode appelée CalculateUntilAsyncQueriesDone. Tout ce que vous avez à faire est appelée après l'appel de la méthode RefreshAll. Excel attendra que le calcul soit terminé. 

ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone

Je mets généralement ces choses ensemble pour faire un calcul complet complet sans interruption, avant d’envoyer mes modèles à d’autres. Quelque chose comme ça:

ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
Application.CalculateFullRebuild
Application.CalculateUntilAsyncQueriesDone
4
Ejaz Ahmed

Actualisation automatique Classeur par exemple toutes les 5 secondes . Appliquer au module

Public Sub Refresh()
'refresh
ActiveWorkbook.RefreshAll

alertTime = Now + TimeValue("00:00:05") 'hh:mm:ss
    Application.OnTime alertTime, "Refresh"

End Sub

Appliquer à Workbook on Open

Private Sub Workbook_Open()
alertTime = Now + TimeValue("00:00:05") 'hh:mm:ss
Application.OnTime alertTime, "Refresh"
End Sub

:)

0
FABZ