Option Explicit
Sub somme_NSom_colonne()
Dim STab(), NNb As Long, PrintLoc As String
NNb = 20
PrintLoc = "$C$2"
STab = S_NSom(NMin:=5, NMax:=25, NNb:=NNb, NSom:=300, PrintLoc:=PrintLoc) 'paramètres à adapter
Range(PrintLoc, Range(PrintLoc).Offset(NNb - 1, 0)).Value = STab 'sortie en colonne
End Sub
Sub somme_NSom_ligne()
Dim STab(), NNb As Long, PrintLoc As String
NNb = 20
PrintLoc = "$C$2"
STab = S_NSom(NMin:=5, NMax:=25, NNb:=NNb, NSom:=300, PrintLoc:=PrintLoc) 'paramètres à adapter
Range(PrintLoc, Range(PrintLoc).Offset(0, NNb - 1)).Value = Application.Transpose(STab) 'sortie en ligne
End Sub
Private Function S_NSom(NMin As Long, NMax As Long, NNb As Long, NSom As Long, PrintLoc As String)
Dim i As Long, s As Long, x As Long
Dim STab()
ReDim STab(1 To NNb, 1 To 1)
Randomize
For i = 1 To NNb
STab(i, 1) = NMin + Int((NMax - NMin + 1) * Rnd())
s = s + STab(i, 1)
Next i
s = NSom - s
For i = 1 To Abs(s)
x = 1 + Int(NNb * Rnd())
STab(x, 1) = STab(x, 1) + Sgn(s)
If STab(x, 1) < NMin Then i = i - 1: STab(x, 1) = NMin
If STab(x, 1) > NMax Then i = i - 1: STab(x, 1) = NMax
Next i
S_NSom = STab
End Function