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
| Sub Lissage()
Dim LastLig As Long, i As Long, j As Long, k As Long, n As Long
Dim dMn As Double, dMx As Double
Dim Tb
Application.ScreenUpdating = False
With Worksheets("Feuil5")
LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
Tb = .Range("A1:E" & LastLig)
Tb(1, 3) = "Y_Max": Tb(1, 4) = "Y_Min": Tb(1, 5) = "Y_Moy"
i = 2
Do While i < LastLig
If Abs(Tb(i + 1, 2) - Tb(i, 2)) > 0.1 * Tb(i, 2) Then 'au cas de changement de plus de 10%
dMx = Mx(Tb, i - j, j)
dMn = Mn(Tb, i - j, j)
For k = i - j To i
Tb(k, 3) = dMx
Tb(k, 4) = dMn
Tb(k, 5) = (dMx + dMn) / 2
Next k
j = 0
Else
j = j + 1
End If
i = i + 1
Loop
.Range("A1:E" & LastLig) = Tb
End With
End Sub
Private Function Mx(Tb, ByVal Deb As Long, Nb As Long) As Double
Dim m As Double
Dim k As Long
m = Tb(Deb, 2)
For k = Deb + 1 To Deb + Nb
If Abs(Tb(k, 2)) > Abs(m) Then m = Tb(k, 2)
Next k
Mx = m
End Function
Private Function Mn(Tb, ByVal Deb As Long, Nb As Long) As Double
Dim m As Double
Dim k As Long
m = Tb(Deb, 2)
For k = Deb + 1 To Deb + Nb
If Abs(Tb(k, 2)) < Abs(m) Then m = Tb(k, 2)
Next k
Mn = m
End Function |
Partager