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