VBA function procedure
bonjour mon énoncé est le suivant :
"Write two function procedures named IncMean and IncStd with one array-type argument, such that IncMean(y) and IncStd(y) calculate the sample mean and the sample standard deviation of the array y incrementally respectively."
quelqu'un aurait il une idée de comment calculer la moyenne de la série de 100 valeurs et l'écart type ? et j'ai écris ca :
Function IncMean(y)
Dim dsum As Double
Dim i As Integer
For i = LBound(y) To UBound(y)
dsum = (dsum / 100) + y(i)
Next i
IncMean = dsum
End Function
Function Incstd(y)
Dim dsum As Double
Dim i As Integer
For i = LBound(y) To UBound(y)
dsum = WorksheetFunction.StDev_S(y(i)) + y(i)
Next i
Incstd = dsum
End Function
Bonjour Tonio20000
1er rappel, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum et notamment :
- Pour plus de lisibilité, utilisez la fonctionnalité </> pour insérer vos codes VBA (et si possible aussi pour vos formules Excel).
La prochaine fois, merci de mettre votre code entre balises, avec le bouton
Merci d'y faire attention SVP
bonjour,
calculate the sample mean and the sample standard deviation of the array y incrementally respectively."
cela veut dire, avec un élément, puis avec 2, ... , non ?
PS vous êtes encore débutant, donc la déclaration des variables est encore obligatoire
Sub Toniooooooooooo()
Dim Arr, Arr0, Arr1, Arr2, i
Arr0 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 'avec base 0
ReDim Arr(5 To 14) 'même array avec base 5
For i = 0 To UBound(Arr0)
Arr(LBound(Arr) + i) = Arr0(i)
Next
Arr1 = IncMean(Arr)
Arr2 = IncSTD(Arr)
MsgBox Join(Arr, vbLf), , "Array"
MsgBox Join(Arr1, vbLf), , "Sum"
MsgBox Join(Arr2, vbLf), , "StDev"
End Sub
Function IncMean(y)
Dim N1, N2, Y1, aOut, i
N1 = LBound(y)
N2 = UBound(y)
ReDim aOut(N1 To N2) 'same size as Y
For i = 0 To N2 - N1
Y1 = y
ReDim Preserve Y1(N1 To N1 + i)
aOut(N1 + i) = Application.Sum(Y1)
Next i
IncMean = aOut
End Function
Function IncSTD(y)
Dim N1, N2, Y1, aOut, i
N1 = LBound(y)
N2 = UBound(y)
ReDim aOut(N1 To N2) 'same size as Y
For i = 0 To N2 - N1
If i = 0 Then
aOut(N1) = "Erreur" 'avec un élément = no StDev !!!
Else
Y1 = y
ReDim Preserve Y1(N1 To N1 + i)
aOut(N1 + i) = Application.StDev(Y1)
End If
Next i
IncSTD = aOut
End Functionmerci mais je dois me baser sur cette sub principale pour créer mes deux sous fonctions ;
Sub functionDemo5()
Dim vA(1 To 100) As Double
Dim i As Integer
For i = 1 To 100
vA(i) = Rnd() * 10000
Next i
Debug.Print IncMean(vA)
Debug.Print IncSTD(vA)
Debug.Print WorksheetFunction.Average(vA)
Debug.Print WorksheetFunction.StDev(vA)
End SubSub functionDemo5()
Dim vA(1 To 100) As Double
Dim i As Integer
For i = 1 To 100
vA(i) = Rnd() * 10000
If i Mod 10 = 0 Then Debug.Print WorksheetFunction.StDev(vA)
Next i
Debug.Print "IncMean : " & IncMean(vA)
Debug.Print "IncSTD : " & IncSTD(vA)
Debug.Print "Average : " & WorksheetFunction.Average(vA)
Debug.Print "StDev : " & WorksheetFunction.StDev(vA)
End Sub
Function IncMean(Arr)
IncMean = WorksheetFunction.Average(Arr)
End Function
Function IncSTD(Arr)
IncSTD = WorksheetFunction.StDev(Arr)
End Function