1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| Sub HoltsByFormulas()
Dim NBLG As Long
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("Holts")
NBLG = .Range("B" & .Rows.Count).End(xlUp).Row
.Range("C5:L" & NBLG + 1).ClearContents
.Range("L3:L4").ClearContents
'Calcul du forecast
.Range("E5") = "Forecast"
.Range("E7:E" & NBLG + 1).Formula = "=C6+D6"
' Base
.Range("C5") = "Base"
.Range("C6") = .Range("B6")
.Range("C7:C" & NBLG).Formula = "=$L$3*B7+(1-$L$3)*(C6+D6)"
' Trend
.Range("D5") = "Trend"
.Range("D7:D" & NBLG).Formula = "=$L$4*(C7-C6)+(1-$L$4)*C6"
' Absolute Error
.Range("F5") = "Absolute Error"
.Range("F7:F" & NBLG).Formula = "=ABS(E7-B7)"
'Squared Error
.Range("G5") = "Squared Error"
.Range("G7:G" & NBLG).Formula = "=F7^2"
'Percentage Error
.Range("H5") = "Percentage Error"
.Range("H7:H" & NBLG).Formula = "=ABS((B7-F7)/B7)*100"
'Error
.Range("I5") = "Error"
.Range("I7:I" & NBLG).Formula = "=B7-E7"
.Range("K10:K15") = Application.Transpose(Array("MAD", "MSE", "MAPE", "MFE", "", "r2"))
.Range("L10").Formula = "=AVERAGE(F7:F" & NBLG & ")"
.Range("L11").Formula = "=AVERAGE(G7:G" & NBLG & ")"
.Range("L12").Formula = "=SUM(H7:H" & NBLG & ")/" & NBLG
.Range("L13").Formula = "=SUM(I7:I" & NBLG & ")/" & NBLG
.Range("L15").Formula = "=CORREL(B7:B" & NBLG & ",E7:E" & NBLG & ") ^ 2"
' Solveur
SolverReset
SolverOk SetCell:="$L$10", MaxMinVal:=2, ValueOf:="0", ByChange:="$L$3:$L$4"
SolverAdd CellRef:="$L$3:$L$4", Relation:=1, FormulaText:="1"
SolverAdd CellRef:="$L$3:$L$4", Relation:=3, FormulaText:="0"
Solversolve Userfinish:=True
SolverFinish keepfinal:=1
SolverReset
' Figer les valeurs
With .Range("C7:L" & NBLG)
.Value = .Value
End With
End With
End Sub |