T'es au courant qu'il y a 17 179 869 184 cellules dans une feuille et que ça risque d'être "un peu" long d'inscrire quatre nombres dans chaque cellule ?j'aimerais avoir 4 nombres aléatoires dans chaques cellules dont la somme des cellules doit être égal à une somme connu déjà bien avant
Bonjour,
T'es au courant qu'il y a 17 179 869 184 cellules dans une feuille et que ça risque d'être "un peu" long d'inscrire quatre nombres dans chaque cellule ?
Je pense même que c'est impossible à faire.
=ALEA()*$A$1
=ALEA()*($A$1-B$1)
=ALEA()*($A$1-SOMME(B$1:B$2))
=$A$1-SOMME(B$1:B$3)
Sub Tirages()
Dim s, a(1 To 4), i, n
s = Int(Val([A1]))
If s < UBound(a) Then [B1:B4].ClearContents: Exit Sub
Randomize
Do
For i = 1 To 4: a(i) = 1 + Int(s * Rnd): Next
n = n + 1
Loop While Application.Sum(a) <> s
[B1:B4] = Application.Transpose(a)
MsgBox Format(n, "#,##0") & " itérations"
End Sub
Option Explicit
Sub Tirages()
Dim s, a(1 To 4), i
s = Int(Val([A1]))
[B1:B4].ClearContents
Randomize
For i = 1 To 3: a(i) = 1 + Int(Rnd * (s / 4)): Next
a(4) = s - Application.Sum(a)
[B1:B4] = Application.Transpose(a)
End Sub
Sub Tirage()
Dim s, a(1 To 4)
s = Int(Val([A1]))
If s < UBound(a) Then [B1:B4].ClearContents: Exit Sub
Randomize
a(1) = 1 + Int(Rnd * (s - 3))
a(2) = 1 + Int(Rnd * (s - a(1) - 2))
a(3) = 1 + Int(Rnd * (s - a(1) - a(2) - 1))
a(4) = s - Application.Sum(a)
Application.ScreenUpdating = False
[B1:B4] = Application.Transpose(a)
[C1:C4] = "=RAND()" 'plage auxiliaire
[B1:C4].Sort [C1], Header:=xlNo 'tri aléatoire
[C1:C4] = ""
End Sub
pareil pour toiLes 4 nombres que tu obtiens ne sont pas vraiment aléatoires puisque chacun est limité au quart de la somme.
a(1) = 1 + Int(Rnd * (s - 3))
a(2) = 1 + Int(Rnd * (s - a(1) - 2))
a(3) = 1 + Int(Rnd * (s - a(1) - a(2) - 1))
et bien avec ta versionLes 4 nombres que tu obtiens ne sont pas vraiment aléatoires puisque chacun est limité au quart de la somme.