job75
XLDnaute Barbatruc
Bonjour le forum,
Suite à ce fil :
https://www.excel-downloads.com/threads/nombre-doctets-dune-formule-calcule-par-macro-vba.148601/
voici une macro permettant d'évaluer la durée d'exécution d'une formule :
On a le choix entre formule "normale" et formule validée matriciellement.
Fichier joint.
A+
Suite à ce fil :
https://www.excel-downloads.com/threads/nombre-doctets-dune-formule-calcule-par-macro-vba.148601/
voici une macro permettant d'évaluer la durée d'exécution d'une formule :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Target.HasFormula Then Exit Sub 'si ce n'est pas une formule
Dim q As Byte, F$, n&, i&, t1#, t2#, t3#
Cancel = True
q = MsgBox("Formule validée matriciellement ?", 4) 'choix de la validation
F = Target.Formula
n = 100000 'nombre de boucles, à diminuer pour les formules lourdes (10000, 1000...)
Application.ScreenUpdating = False
Application.Calculation = xlManual 'pour éviter le recalcul éventuel d'autres formules
If q = 7 Then 'formule normale
t1 = Timer
For i = 1 To n
Target.Formula = "=1"
Next
t2 = Timer
For i = 1 To n
Target.Formula = F
Next
t3 = Timer
Else 'formule matricielle
t1 = Timer
For i = 1 To n
Target.FormulaArray = "=1"
Next
t2 = Timer
For i = 1 To n
Target.FormulaArray = F
Next
t3 = Timer
End If
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
MsgBox "Durée d'exécution de la formule (en µs) : " & Format(1000000 / n * IIf(t3 - t2 > t2 - t1, t3 - t2 - t2 + t1, 0), "0.0")
End Sub
On a le choix entre formule "normale" et formule validée matriciellement.
Fichier joint.
A+
Pièces jointes
Dernière édition: