Moyenne pondéré ereur

Salut tout le monde, j'ai besoin d'aide pour mon code qui sert a faire la moyenne pondéré. si tout les colonnes de la selection des coefficients est nul ou vide ; la moyenne pondéré sera egale à 0 sinon il aura le calcule normal.

voici mon code

Sub ponderee()
Dim limit As Range
Dim rating As Range
Set rating = Range("B2", Range("B1").End(xlDown))
Set limit = Range("A2", Range("A1").End(xlDown))

Sheets("Feuil1").Range("F5").Value = MoyennePonderee(rating, limit)

End Sub

Function MoyennePonderee(Notes As Range, Coeff As Range) As Double
    Dim n As Integer, i As Integer, Moy As Double, SomCoeff As Double

    n = Notes.Cells.Count

    For i = 1 To n

        If IsEmpty(Coeff.Cells(i)) Then
            Moy = 0
            SomCoeff = 0
            MoyennePonderee = 0
        ElseIf (Not IsEmpty(Notes.Cells(i)) And IsNumeric(Notes.Cells(i).Value)) Then
            Moy1 = Moy + Coeff.Cells(i).Value * Notes.Cells(i).Value
            SomCoeff1 = SomCoeff + Coeff.Cells(i).Value
            MoyennePonderee = Round(Moy / SomCoeff, 0)
        End If
    Next i

End Function

Je compte sur vous les gars

et merci d'avance

bonjour,

2 solutions possibles

1 avec les fonctions excel

2 sans fonction excel

Sub ponderee()
    Dim limit As Range
    Dim rating As Range
    Set rating = Range("B2", Range("B1").End(xlDown))
    Set limit = Range("A2", Range("A1").End(xlDown))

    Sheets("Feuil1").Range("F5").Value = Round(MoyennePonderee(rating, limit), 0)
Sheets("Feuil1").Range("F6").Value = Round(MoyennePonderee1(rating, limit), 0)
End Sub

Function MoyennePonderee(Notes As Range, Coeff As Range) As Double
    n = Application.Sum(Coeff)
    If n <> 0 Then
        MoyennePonderee = Application.SumProduct(Notes, Coeff) / Application.Sum(Coeff)
    End If
End Function

Function MoyennePonderee1(Notes As Range, Coeff As Range) As Double
    Dim n As Integer, i As Integer, Moy As Double, SomCoeff As Double

    n = Notes.Cells.Count

    For i = 1 To n
        Moy = Moy + Coeff.Cells(i).Value * Notes.Cells(i).Value
        SomCoeff = SomCoeff + Coeff.Cells(i).Value

    Next i

    If SomCoeff <> 0 Then MoyennePonderee1 = Moy / SomCoeff
End Function

Merci, mais on peut pas mettre le resultat de la moyenne dans le meme case avec les 2 condition ?

Bonjour,

Merci, mais on peut pas mettre le resultat de la moyenne dans le meme case avec les 2 condition ?

je suis pas sûr d'avoir compris.

je t'ai proposé 2 solutions différentes mais qui donnent le même résultat.

la première est plus efficace

la seconde s'inspire de ton code (pour le cas où cela t'intéresserait de voir ce qu'il fallait corriger pour que cela fonctionne).

donc tu ne dois pas mettre les 2 résultats dans la même cellule, tu choisis d'utiliser l'une ou l'autre fonction et tu mets le résultat dans la cellule que tu souhaites.

merci

Rechercher des sujets similaires à "moyenne pondere ereur"