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
| Sub Traitement()
Dim M As Integer, i As Integer, j As Integer
Dim N As Long, Ech As Long, Obs As Long
Dim BD, Tb
Application.ScreenUpdating = False
With Worksheets("Feuil2")
N = .Cells(.Rows.Count, 7).End(xlUp).Row
BD = .Range("G2:J" & N)
End With
With Worksheets("Feuil1")
M = .Cells(.Rows.Count, 2).End(xlUp).Row - 2
Tb = .Range("B3").Resize(M, M)
.Range("C4").Resize(M - 1, M - 1).ClearContents
For i = 2 To M
Ech = Tb(i, 1)
For j = 2 To M
Obs = Tb(1, j)
Tb(i, j) = S(BD, Ech, Obs)
Next j
Next i
.Range("B3").Resize(M, M) = Tb
End With
End Sub
Private Function S(ByVal T, ByVal Ob As Long, ByVal Ec As Long) As Double
Dim Simp As Double, Sech As Double
Dim k As Long, P As Long, Tmp As Long
P = UBound(T, 1)
Ec = CLng(DateSerial(Year(Ec), Month(Ec) + 1, 1))
For k = 1 To P
Tmp = CLng(DateSerial(T(k, 2), T(k, 1), 1))
If Tmp >= Ob And Tmp < Ec Then
Simp = Simp + Abs(Val(T(k, 3)))
Sech = Sech + Val(T(k, 4))
End If
Next k
If Sech <> 0 Then S = Simp / Sech
End Function |