Faire varier 10 variables entre 0 et 1 avec somme égale à 1

Bonjour à tous,

Voilà dans le cadre de mon stage je dois réaliser un programme sur VBA. Jusque là pas trop de soucis sauf que les calculs sont assez lourds...

Je doit faire varier 10 variables entre 0 et 1. De plus les 5 premières variables doivent au final être comprises entre 0.7 et 1 et les cinq dernières entre 0 et 0.3

Je vous joins mon code qui me semble un peu lourd.....

Private sub nb()
' les variables sont introduites dans le module de lancement en variable "public" as single
'sommef représente les cinq premières variables (comprises entre 0.7 et 1 pour la somme)
'sommeg représente les cinq dernières (comprisse entre 0 et 0.3 pour la somme)
For sommef = 0.7 To 1 Step 0.05 'pour l'instant ce pas me semble suffisament grand pour ne pas trop ralentir excel
    For f1 = 0.7 To 0 Step -0.05
        For f2 = 0.7 To 0 Step -0.05
            If f1 + f2 > sommef Then
                Next f2
            End If
            For f3 = 0.7 To 0 Step -0.05
                If f3 + f2 + f1 > sommef Then
                    Next f3
                End If
                For f4 = 0.7 To 0 Step -0.05
                    If f4 + f3 + f2 + f1 > sommef Then
                        Next f4
                    End If
                    For f5 = 0.7 To 0 Step -0.05
                        If f5 + f4 + f3 + f2 + f1 > sommef Then
                            Next f5
                        End If

                        sommeg = 1 - sommef

                        For g1 = 0.3 To 0 Step -0.05
                            For g2 = 0.3 To 0 Step -0.05
                                If g1 + g2 > sommeg Then
                                    Next g2
                                End If
                                For g3 = 0.03 To 0 Step -0.05
                                    If g1 + g2 + g3 > sommeg Then
                                        Next g3
                                    End If
                                    For g4 = 0.03 To 0 Step -0.05
                                        If g1 + g2 + g3 + g4 > sommeg Then
                                            Next g4
                                        End If
                                        For g5 = 0.03 To 0 Step -0.05
                                            If g1 + g2 + g3 + g4 + g5 > sommeg Then
                                                Next g5
                                            End If
'ainsi toutes les possibilités sont prises en compte.
'là se trouve le code associé à la macro, car vous vous doutez bien que je ne fais pas varier ces nombres pour le plaisir :)
                                        Next g5
                                    Next g4
                                Next g3
                            Next g2
                        Next g1
                    Next f5
                Next f4
            Next f3
        Next f2
    Next f1
Next sommef
End sub                  

Si quelqu'un a une idée pour alléger la chose? J'ai cherché sur les forums mais je n'ai rien trouvé de similaire.

Merci

Amicalement Adrien

Bonjour

Pas claire ton histoire

Les 5 premières variables entre 0.7 et 1 et les 5 dernières entre 0 et 0.3

Ton titre "10 variables entre 0 et 1 avec la somme égale à 1"

Au minimum tes 5 premières variables auront comme valeur 0.7 ==> 5 fois 0.7 = 3.5 déjà on dépasse

Surement quelque chose que je n'ai pas imprimé

Merci

Désolé si ce n'est pas très clair,

Petite explication :

f1 + f2 + f3 + f4 + f5 + g1 + g2 +g3 + g4 + g5 = 1

0.7 < f1 + f2 + f3 + f4 + f5 <= 1

0 < g1 + g2 +g3 + g4 + g5 <= 0.3

f1 + f2 + f3 + f4 + f5 = sommef

g1 + g2 +g3 + g4 + g5 = sommeg

Si f1 = 0.7 alors f2, f3, f4, f5 sont nulles dans le cas où sommef = 0.7

J'espère être assez clair, désolé si ce n'est pas le cas.

J'ai mis le code complet sur mon premier message si ça peu aider

Bonjour

A vérifier

Attention au pas sinon cela risque d'être (dans le meilleur des cas) très long

Merci.

Cela semble fonctionner parfaitement mais cela n'est il pas plus long que ce que j'ai proposé? Car en fait ceci n'est qu'une infime partie de mon projet.

Une fois les variables définies elles vont être multipliés par d'autre variables qui varient elles aussi. Donc ma démarche est de limiter au maximum mes calculs.

Petit exemple les variables sont définies :

valeur = f1*x1 + f2*x2 [...] g4*y4 + g5*y5
if valeur >= taget then
[...]
End if

Il y a environ trente x et quarante y à chaque fois. Ce qui va probablement être très long....

Merci

Bonjour

La question est ..... ?

Si tes variables varient il faut bien recalculer non ?

Fais des calculs intermédiaires, comme cela tu ne seras pas obligé de refaire 70 calculs, dès qu'un seul élément est modifié

Je ne suis pas matheux, donc peut-être il existe des possibilités de réduire, mais moi pas connaitre

ET si tu veux augmenter tes chances que quelqu'un t'apporte une réponse, fournis un fichier en état

Merci,

Discussion susceptible d'être ré ouverte

Je te remercie encore, mais je crois que ton code prend plus de puissance de calcul car il teste les conditions que deux fois donc il doit tout recalculer.... Si la condition est fausse. .mais merci beaucoup ca m'aide d'une certaine manière

Rechercher des sujets similaires à "varier variables entre somme egale"