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 | 
Partager