Limitations lors d'une répartition aléatoire

Bonjour à tous,

Je rencontre un problème pour lequel je ne trouve pas de solutions.

J'ai une série de paramètres associés à des utilisateurs (les paramètres sont les colonnes et les utilisateurs les lignes). A savoir que la somme des valeurs des paramètres (les valeurs des paramètres sont tirées au hasard) par utilisateur doit valoir une valeur reprise dans une autre cellule (dans l'exemple cette valeur est reprise dans K2 de feuil3). Deuxième point important: les valeurs des différents paramètres doivent être inclus dans l'intervalle [1:10].

Jusqu'ici, j'ai réussi à obtenir une répartition aléatoire de valeurs au sein des cellules Bx,Gx dont la somme vaut la valeur de K2. Il ne me reste plus qu'a limiter les valeurs de ces paramètres par utilisateurs à l'intervalle [1:10] (c'est là que je bloque).

J'ai travaillé avec deux feuilles.

Dans la feuille debug j'ai mis en place tout le côté aléatoire à gauche de la feuille (la partie droite n'est pas importante). Dans la feuille Feuill 3 j'ai fait en sorte de transcrire l'aléatoire généré en débug par rapport à la valeur de K2.

Sans doute que je n'ai pas utilisé la méthode la plus simple mais je suis débutant sur excel ^^

Est-ce que quelqu'un aurait une idée pour résoudre mon problème?

Merci d'avance

15ci-joint.xlsx (21.26 Ko)

Bonjour,

une première méthode apparentée à une "attaque par force brute" consisterait à produire une grand nombre d'essais, on atteint à peu près 0,35% de réussite. Le fait de passer par une macro permet de figer les cas utiles

7ci-joint.zip (298.31 Ko)

solution 10x plus performante : calculer le dernier en fonction des premiers et vérifier qu'il est compris entre 1 et 10

9ci-joint.xlsx (82.95 Ko)

c'est une première approche car il est indispensable de passer par une macro pour figer les valeurs acceptables

Merci pour ton aide ;)

Est-ce que tu aurais un lien ou une documentation qui pourrait m'indiquer comment faire cette macro (quand je dis que je suis vraiment débutant je ne rigole pas ^^)?

A moins que la macro ne soit déjà incluse mais je ne sais pas comment l’employer dans ce cas là.

Merci ;)

je regarde ce soir ...

1000 combinaisons en moins de 1 seconde

Sub test()
tps = Now
Cells(1, 1).CurrentRegion.Offset(1, 0).Clear
Dim tbl(1 To 1000, 1 To 7)
cible = Cells(1, 1)
n = 1
Do While n <= UBound(tbl)
    somme = 0
    For i = 2 To 6
        Randomize
        tbl(n, i) = Int(10 * Rnd) + 1
        somme = somme + tbl(n, i)
    Next
    If somme > cible - 10 - 1 And somme < cible - 1 Then
        tbl(n, 1) = n
        tbl(n, 7) = cible - somme
        n = n + 1
    End If
Loop
Cells(2, 1).Resize(1000, 7) = tbl
MsgBox "1000 combinaisons en " & Format(Now - tps, "hh:mm:ss")
End Sub
18repartition.xlsm (48.16 Ko)

Génial :)

Un grand merci à toi, tu viens de me tirer une belle épine du pied.

Parfait ! n'oublie pas de fermer ce fil de discussion en cliquant sur V

Rechercher des sujets similaires à "limitations lors repartition aleatoire"