Option Explicit
Sub Répartition()
Dim ColSrc As Range
Set ColSrc = Feuil1.[C8].Resize(Feuil1.[C1000000].End(xlUp).Row - 7)
ColSrc.Offset(, 1).Value = RépArr(Feuil1.[B5].Value, ColSrc)
End Sub
Function RépArr(ByVal MonTot As Double, Parts) As Variant()
Dim Te(), Ts(), L&, TotParts As Double
If TypeName(Parts) = "Range" Then Te = Parts.Value Else Te = Parts
ReDim Ts(1 To UBound(Te, 1), 1 To 1)
For L = UBound(Te) To 1 Step -1: TotParts = TotParts + Te(L, 1): Ts(L, 1) = TotParts: Next L
For L = 1 To UBound(Te): Ts(L, 1) = Int(MonTot * 100 * Te(L, 1) / Ts(L, 1) + 0.5) / 100
MonTot = MonTot - Ts(L, 1): Next L
RépArr = Ts
End Function