Sub Traitement()
Dim TabTemp As Variant
Dim L As Long
Dim C As Byte
Application.ScreenUpdating = False
With Sheets('Feuil1')
L = .Range('C65536').End(xlUp).Row
'Efface anciennes moyennes
Range(Cells(5, 6), Cells(L, 6)).ClearContents
'Charge les données dans un tableau variant temporaire
TabTemp = .Range(.Cells(5, 3), .Cells(L, 6)).Value
End With
'Pour chaque ligne
For L = 1 To UBound(TabTemp, 1)
'Pour chaque note
For C = 1 To 3
If TabTemp(L, C) <> '' Then
'On se sert de la 4ème colonne pour cumuler et mémoriser les
'coefficients 'valides'
TabTemp(L, 4) = TabTemp(L, 4) + IIf(IsNumeric(TabTemp(L, C)), _
Choose(C, 1, 3, 2), 0)
'On remplace chaque note par son équivalent 'coefficienté'
TabTemp(L, C) = IIf(IsNumeric(TabTemp(L, C)), TabTemp(L, C), 0)
TabTemp(L, C) = TabTemp(L, C) * Choose(C, 1, 3, 2)
End If
Next C
'MAJ des moyennes
If TabTemp(L, 4) > 0 Then
Cells(L + 4, 6).Value = (TabTemp(L, 1) + TabTemp(L, 2) + TabTemp(L, 3)) / _
TabTemp(L, 4)
Else
Cells(L + 4, 6).Value = ''
End If
Next L
Application.ScreenUpdating = True
End Sub