Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Nombre aléatoire

  • Initiateur de la discussion Initiateur de la discussion mwehu
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mwehu

XLDnaute Nouveau
Bonsoir, j'aimerais avoir 1 nombre aléatoires dans 4 cellules dont la somme des cellules doit être égal à une somme connu déjà bien avant: qu'elle est la formule excel qu'il faut ??? Merci beaucoup de m'aider
 
Dernière édition:
Bonjour,

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
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.
 
Bonjour.
En A1 : le total souhaité,
En B1 :
Code:
=ALEA()*$A$1
En B2 :
Code:
=ALEA()*($A$1-B$1)
En B3 :
Code:
=ALEA()*($A$1-SOMME(B$1:B$2))
En B4 :
Code:
=$A$1-SOMME(B$1:B$3)
Pour des entiers vous pouvez remplacer dans toutes les formules "()*(" par ".ENTRE.BORNES(0;"
 
Dernière édition:
Bonjour mwehu, le forum,

Je suppose qu'il faut travailler avec des nombres entiers positifs.

Alors voyez le fichier joint et cette macro :
VB:
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
A+
 

Pièces jointes

re
Bonjour à tous
perso je prends 3 nombres compris entre 1 et le (max demandé/4) et le 4eme c'est le reste
je n'ai pas besoins de do/loop pour tester si la somme est bonne
et finalement le 4eme est un nombre au hasard puisqu'il est la conséquence des 3 premiers nombre aléatoire
VB:
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
 
Cela dit la boucle Do/Loop n'est pas une bonne solution si le nombre en A1 est très grand.

Elle peut prendre beaucoup de temps, alors utilisez plutôt :
VB:
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
 

Pièces jointes

re
bonjour @job75
Les 4 nombres que tu obtiens ne sont pas vraiment aléatoires puisque chacun est limité au quart de la somme.
pareil pour toi
en fait si tu regarde bien les sub resultat en console tu fait la même chose
alors oui je te l'accorde la largeur de possibilité est plus grange pour a(1) et a(2) mais c'est exactement la même chose
VB:
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))
 
re
Bonjour @job75
ma fois sur 100 000
si a(1) te sort 50000 il te reste quoi 😉
comme je te l'ai dit c'est la même chose sauf que la limite dépend des précédents items de a
si a(1) sort 50 000 il ne reste plus que 50 000 à partager en 3
si a(2) sort 40 000 il ne reste plus que 10 000 a partager dans les deux autres

autrement dit si tu sort un gros chiffre dans les premier items les suivants seront très petits par rapport au premiers
avec ma méthode on fait pareil finalement mais a l'envers puisque si j'ai un total très petit le 4 est forcement bien plus grand
disons que il y a plus de chance de repartir la somme en 4 parts de même tranches

donc quand tu dis
Les 4 nombres que tu obtiens ne sont pas vraiment aléatoires puisque chacun est limité au quart de la somme.
et bien avec ta version
a(1) n'est pas limité sauf avec le -3
a(2) est limité a le max - a(1)
a(3) est limité au max - les deux précédents
a(4) est limité au max - les 3 précédents
on peut donc considérer que ce n'est plus vraiment aléatoire aussi
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
339
Réponses
5
Affichages
153
Réponses
4
Affichages
221
Réponses
9
Affichages
406
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…