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 ifIl 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