Répartir aléatoirement une somme dans des cellules

Bonjour,

je cherche à faire la chose suivante :

en A1 j'ai un chiffre : 320

J'aimerais que ce chiffre soit réparti aléatoirement dans les cellules B1 à B7, et que la somme de B1 à B7 soit donc égale à A1.

Et pouvoir relancer la formule pour donner plusieurs résultats aléatoires.

Merci d'avance

myx

Bonjour,

A essayer :

Sub Répartir()
    Dim n&, x&, i%, T(6, 0)
    With ActiveSheet.Range("A1")
        If .Value = "" Or Not IsNumeric(.Value) Then
            Exit Sub
        Else
            n = CLng(.Value)
        End If
    End With
    Randomize
    For i = 6 To 1 Step -1
        x = Int((n - i) * Rnd + 1)
        T(6 - i, 0) = x: n = n - x
    Next i
    T(6, 0) = n
    ActiveSheet.Range("B1:B7").Value = T
End Sub

Cordialement.

Salut,

En B1 :

=ALEA.ENTRE.BORNES(1;A1-6)

En B2 puis jusqu'à B6 :

=ALEA.ENTRE.BORNES(1;$A$1-7+LIGNE()-SOMME($B$1:B1))
=ALEA.ENTRE.BORNES(1;$A$1-7+LIGNE()-SOMME($B$1:B5))

Et, pour finir, en B7 :

=A1-SOMME(B1:B6)

Pour changer de tirage, taper sur F9.

A+

H


Ce sera plus clair avec le fichier !

Super merci pour vos réponses très utiles !!

J'aurais un autre paramètre à prendre en compte, j'aimerais que les valeurs renseignées de B1 à B7 soit comprises entre 20 et 80.

De plus, il faudrait que ces valeurs soient des entiers et finissent uniquement par 0 ou 5

Ex :

A1 = 320

B1 = 80

B2 = 25

B3 = 60

B4 = 35

B5 = 55

B6 = 20

B7 = 45

Sauriez vous comment faire ?

D'avance merci

Myx

Il fallait poser tous tes critères au départ !

On n'est pas à ta dispositions !

MFerrand a écrit :

Il fallait poser tous tes critères au départ !

On n'est pas à ta dispositions !

Oui désolé ce sont des critères que j'ai oublié de préciser et dont je me suis rendu compte en testant les formules.

Et je me doute que personne n'est "à ma disposition", mais merci pour ce commentaire très utile.

Myx

En ce qui te concerne, tu aurais été mieux inspiré en fournissant un classeur...

Sub Répartir2()
    Dim n%, x%, nx%, i%, T(6, 0)
    With ActiveSheet.Range("A1")
        If .Value = "" Or Not IsNumeric(.Value) Then
            Exit Sub
        Else
            n = CInt(.Value / 5)
            If .Value <> n * 5 Then .Value = n * 5
        End If
    End With
    Randomize
    For i = 6 To 1 Step -1
        nx = IIf(n < 16, n - 3, 13)
        x = Int(nx * Rnd + 4)
        If n - x < i * 4 Or n - x > i * 16 Then
            i = i + 1
        Else
            T(6 - i, 0) = x: n = n - x
        End If
    Next i
    T(6, 0) = n
    For i = 0 To 6
        T(i, 0) = T(i, 0) * 5
    Next i
    ActiveSheet.Range("C1:C7").Value = T
End Sub

Ne nous fâchons pas..

Je suis moi-même un épouvantable étourdi !

Ceci dit, une proposition :

Bye !

304classeur1-v1.xlsm (23.03 Ko)

Génial exactement ce qu'il me fallait.

Merci beaucoup

Autre solution possible avec ceci en B1 jusqu'à B6 :

=20+ALEA.ENTRE.BORNES(0;12)*5

puis en B7 :

=A1-SOMME(B1:B6)

et dans le code de la feuille un ordre de recalcul si le résultat obtenu n'est pas satisfaisant :

Private Sub Worksheet_Calculate()
  If Range("B7") < 20 Or Range("B7") > 80 Then
    Application.Calculate
  End If
End Sub
Rechercher des sujets similaires à "repartir aleatoirement somme"