Bonjour
Pour la 1ere question : Création d'une fonction MoyenneDifZ
Sub Question1()
Dim vTab As Variant
vTab = Array(10, 0, 20)
Debug.Print MoyenneDifZ(vTab)
End Sub
Function MoyenneDifZ(varTab) As Single
Dim lg As Long
Dim dblSomme As Double
Dim lgCptVal As Long
For lg = LBound(varTab) To UBound(varTab)
If IsNumeric(varTab(lg)) Then
dblSomme = dblSomme + varTab(lg)
If varTab(lg) <> 0 Then lgCptVal = lgCptVal + 1
End If
Next
MoyenneDifZ = dblSomme / lgCptVal
End Function
Pour la 2eme question : amélioration de la fonction MoyenneDifZ
Si tu n'est pas amateur de Debug.Print remplace par Msgbox
Sub Question2()
Dim vTab As Variant
Dim vTabIndice As Variant
vTab = Array(10, 20, 40, 100, 5, 80, 1000)
vTabIndice = Array(1, 3, 5) '20, 100, 80
Debug.Print MoyenneDifZ2(vTab)
Debug.Print MoyenneDifZ2(vTab, vTabIndice)
End Sub
Function MoyenneDifZ2(varTab, Optional vTabIndices) As Single
Dim lg As Long
Dim dblSomme As Double
Dim lgCptVal As Long
Dim lgIndice As Long
If IsMissing(vTabIndices) Then ' Si aucun tableau d’indices n’est fourni, on construit la liste complète
ReDim vTabIndices(LBound(varTab) To UBound(varTab))
For lg = LBound(varTab) To UBound(varTab)
vTabIndices(lg) = lg
Next
End If
For lg = LBound(vTabIndices) To UBound(vTabIndices)
lgIndice = vTabIndices(lg)
If IsNumeric(varTab(lgIndice)) Then
dblSomme = dblSomme + varTab(lgIndice)
If varTab(lgIndice) <> 0 Then lgCptVal = lgCptVal + 1
End If
Next
MoyenneDifZ2 = dblSomme / lgCptVal
End Function