Sub CalculMoyenne()
Dim tab_calcul(3, 16), i%, o%, Moyenne
' Juste pour le test, remplit le tableau avec des valeurs aléatoires
For i = 0 To 3
tab_calcul(i, 16) = Int(1000 * Rnd)
Next i
'----------------------------------------------
' Calcul moyenne
For o = 0 To UBound(tab_calcul)
Moyenne = Moyenne + tab_calcul(o, 16)
Next o
Moyenne = Moyenne / (1 + UBound(tab_calcul))
'----------------------------------------------
End Sub
Cette ligne marche très bien si les variables et le tableau sont initialisés correctement :SMA5 = Application.WorksheetFunction.Average(tab_calcul(o, 16), tab_calcul(o + IndA, 16))
Cette ligne vba ne marche pas ! Comment l'écrire svp, vous avez une idée ?
Sub Test()
Dim o, IndA, tab_calcul(), SMA5
o = 1
IndA = 4
ReDim tab_calcul(o + IndA, 16)
tab_calcul(o, 16) = 100
tab_calcul(o + IndA, 16) = 200
SMA5 = Application.WorksheetFunction.Average(tab_calcul(o, 16), tab_calcul(o + IndA, 16))
MsgBox SMA5
End Sub
Sub Test1()
Dim o, IndA, tab_calcul(), SMA5
o = 1
IndA = 4
ReDim tab_calcul(o + IndA, 16)
tab_calcul(o, 16) = 100: [Z1] = tab_calcul(o, 16)
tab_calcul(o + IndA, 16) = Empty: [Z2] = tab_calcul(o + IndA, 16)
'tab_calcul(o + IndA, 16) = "aaa": [Z2] = tab_calcul(o + IndA, 16)
SMA5 = Application.WorksheetFunction.Average([Z1:Z2])
MsgBox SMA5
End Sub
Non, je me suis contenté de traiter lr problème posé au post #1.La macro du post #5 est erronée, elle ne fait la moyenne que des deux éléments début et fin de l'array.
Ce que je voudrais c'est qu'elle additionne 4 valeurs
SMA5 = Application.Average(tab_calcul(o, 16), tab_calcul(o + 1, 16), tab_calcul(o + 2, 16), tab_calcul(o + 3, 16), tab_calcul(o + 4, 16))
Sub Test2()
Dim o&, IndA&, tab_calcul(), i&, aux(), n&, SMA5
o = 1
IndA = 4
ReDim tab_calcul(o + IndA, 16)
tab_calcul(o, 16) = 100
tab_calcul(o + 1, 16) = 200
tab_calcul(o + 2, 16) = 300
tab_calcul(o + 3, 16) = 400
tab_calcul(o + 4, 16) = Empty '"aaa"
For i = LBound(tab_calcul, 1) To UBound(tab_calcul, 1)
If IsNumeric(tab_calcul(i, 16)) Then
ReDim Preserve aux(n) 'tableau auxiliaire base 0
aux(n) = tab_calcul(i, 16)
n = n + 1
End If
Next
SMA5 = Application.WorksheetFunction.Average(aux)
MsgBox SMA5
End Sub