Écoutez des events de rafraîchissement dans excel

Lorsque l'user clique sur le button "Actualiser" / "Refresh All", Excel semble appeler simplement la méthode de rafraîchissement pour chaque (ou sélectionné) QueryTable (s) dans le classur. Cependant, l'écoute des events BeforeRefresh et AfterRefresh pour QueryTable ne m'a pas vraiment aidé ici, car j'ai besoin d'exécuter certaines fonctionnalités après que toutes les QueryTables dans le classur (respectivement après tous les QueryTables sélectionnés) soient mises à jour.

Y a-t-il un moyen d'y parvenir? Peut-être est-il possible d'écouter un clic de souris sur ce button de rafraîchissement?

En fait, c'est comme ça que je voulais l'accomplir en premier lieu. Mais il y a un problème ici. Disons que le nombre total de QueryTables est 10. Et disons que l'user vient de sélectionner un QueryTable, puis appuyez sur "Actualiser tout". Donc, mon algorithm vérifiera le nombre de QueryTables sélectionné qui est 1. En conséquence, mes calculs commencent après seulement 1 rafraîchissement qui est incorrect.

En attendant, j'ai essayé d'accéder à ce button "Actualiser" dans le ruban. Mais cela n'a pas fonctionné. Pour une raison quelconque, mon code ne fait rien …

Public Class ThisAddIn Private Sub ThisAddIn_Startup() Handles Me.Startup AddHandler Globals.ThisAddIn.Application.WorkbookActivate, AddressOf OnWorkbookOpened End Sub Private refrBtn As Office.CommandBarButton Private Sub OnClick(ByVal Ctrl As Office.CommandBarButton, _ ByRef CancelDefault As Boolean) MsgBox("PLS WORK!") End Sub Private Sub OnWorkbookOpened(wb As Excel.Workbook) Try refrBtn = CType(wb.Application.CommandBars.FindControl(Id:=459), Office.CommandBarButton) AddHandler refrBtn.Click, AddressOf OnClick Catch ex As Exception MsgBox(ex.Message) MsgBox(ex.GetType) MsgBox(ex.StackTrace.ToSsortingng) End Try End Sub End Class 

Edit: J'ai oublié mes données de connection, j'ai donc créé un nouveau count

Je n'utilise pas VSTO mais je voudrais enquêter:

  • Créer une variable globale (ou une propriété de classur) définie sur 0
  • Dans chaque événement AfterRefresh , appelez une procédure
  • Cette procédure augmente le countur
  • Lorsque le countur atteint le nombre total de QueryTables (ou le nombre total sélectionné), effectuez ce que vous devez faire et réinitialisez le countur à 0.

Vous pouvez également vérifier l'argument Success chaque fois, afin que votre code ne s'exécute que si les QT sélectionnés ont tous été mis à jour avec succès.