Re,
Les valeurs différentes de zéro étaient considérées comme du texte et aussi mon code précédent était erroné. Essaie comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Long 'déclare la variable J (incrément)
Set O = Worksheets("Excel-pratique Test") 'définit l'onglet O (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet O
TV = O.Range("C1:C" & DL) 'définit le tableau des valeurs TV
For I = 1 To DL 'boucle sur toutes les ligne I de TV de 1 à DL
If InStr(1, TV(I, 1), ".", vbTextCompare) > 0 Then 'condition : si TV(I,1) contient un point (.)
TV(I, 1) = CDbl(Replace(TV(I, 1), ".", ",", , , vbTextCompare)) 'la virgule remplace le point et TV(I, 1) se transforme au format Double
Else 'sinon (si TV(I,1) ne contient pas de point (.))
TV(I, 1) = TV(I, 1) 'TV(I, 1) reste inchangé
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Range("C1").Resize(DL, 1).Value = TV 'renvoie le tableau TV dans la cellule C1 redimensionnée
J = 3 'intialise la variable J
For I = 3 To DL Step 5 'boucle sur toutes les ligne de 3 à DL par pas de 5
'renvoie dans la cellule ligne J colonne D la moyenne des cinq première valeurs à partir de la ligne I de la colonne C, incrémente J
O.Cells(J, "D").Value = Application.WorksheetFunction.Average(O.Cells(I, "C").Resize(5, 1)): J = J + 1
Next I 'prochaine ligne (par pas de 5) de la boucle
End Sub