Quelque chose comme ça peut-être (en supposant que toutes les connexions placent leurs résultats dans un tableau de feuille de calcul, pas dans un tableau croisé dynamique) :
Sub TimeQueries()
Dim oSh As Worksheet
Dim oCn As WorkbookConnection
Dim dTime As Double
For Each oCn In ThisWorkbook.Connections
dTime = Timer
oCn.Ranges(1).ListObject.QueryTable.Refresh False
Debug.Print Timer - dTime, oCn.Name, oCn.Ranges(1).Address(external:=True)
Next
End Sub
Pour exécuter ceci :
- Alt +F11 pour accéder à l'éditeur VBA.
- Depuis le menu :Insérer un module.
- Coller le code dans la fenêtre.
- Fermez l'éditeur VBA.
- Alt +F8 affiche la liste des macros. Choisissez le nouveau et cliquez sur Exécuter.
- Alt +F11 encore une fois à l'éditeur VBA.
- Ctr l+G ouvre le volet immédiat avec les résultats.
Si vous voulez que le code écrive dans une cellule, utilisez cette version :
Sub TimeQueries()
Dim oSh As Worksheet
Dim oCn As WorkbookConnection
Dim dTime As Double
Dim lRow As Long
Set oSh = Worksheets("Sheet4") 'Change to your sheet name!
oSh.Cells(1,1).Value = "Name of Connection"
oSh.Cells(1,2).Value = "Location"
oSh.Cells(1,1).Value = "Refresh time (s)"
For Each oCn In ThisWorkbook.Connections
lRow = lRow + 1
dTime = Timer
oCn.Ranges(1).ListObject.QueryTable.Refresh False
oSh.Cells(lRow,3).Value = Timer - dTime
oSh.Cells(lRow,1).Value = oCn.Name
oSh.Cells(lRow,2).Value = oCn.Ranges(1).Address(external:=True)
Next
End Sub