Utilisation de While/Wend
Bonjour à tous,
mon problème est le suivant, j'ai un sub avec de nombreux calculs qui se font en fonction d'une valeur D, à la fin j'obtient une valeur Nres. J'aimerais créer une boucle qui teste la valeur Nres par rapport a une valeur définie (charge), si Nres < charge alors le calcul recommence entièrement avec D = D + 0.1 , et ce jusqu'à ce que Nres > charge, lorsque cette condition est remplie, il faudrait sortir de la boucle et afficher D.
J'ai pu voir sur plusieurs sites qu'il fallait utiliser un While/Wend mais les exemples se font toujours avec des calculs simples et je ne comprends pas comment l'utiliser dans mon cas.
Je joint mon fichier pour que vous puissiez mieux comprendre mon problème, la macro qui me pose problème se trouve dans le Module 1.
Merci d'avance pour vos réponses et bonne soirée !
Bonjour,
Les formules de calcul à l'intérieur de la boucle sont à revoir car en l'état le Nres est plafonné à 145.3328
Les itérations suivantes de D tournent donc dans le vide ... sans fin ...
Pierre
Re, suite,
Une question bête est-ce que "A" ne devrait pas plutôt être recalculé en fonction des valeurs de "D" à l'intérieur de la boucle? Du genre :
With Sheets(2)
D = 0.1
charge = .[B1].Value
H = .[B2].Value
e = .[B3].Value * 0.01
Rc = (.[B4].Value * 1000) / 1.5
Rs = 500000 / 1.15
L0 = .[B5].Value
D = 0.1
A = (WorksheetFunction.Pi * D ^ 2) / 4
delta = e / D
K0 = 1
Do
lambda = (4 * L0) / D
Asmin = IIf(0.02 * A > (0.1 * charge) / Rs, 0.02 * A, (0.1 * charge) / Rs)
alpha = IIf(lambda <= 60, (0.84) / (1 + ((lambda / 52) ^ 2)), (27 / lambda) ^ 1.24)
rho = IIf((Asmin / A) < 0.03, Asmin / A, 0.03)
Kh = IIf(D <= 0.6, Kh = (0.7 + 0.5 * D) * (1 - 8 * rho * delta), 1)
Nres = alpha * Kh * K0 * ((A * Rc) + (Asmin * Rs))
D = D + 0.1
A = (WorksheetFunction.Pi * D ^ 2) / 4
Loop Until Nres >= charge
.[B9].Value = lambda
.[B10].Value = alpha
.[B11].Value = Asmin
.[B12].Value = delta
.[B13].Value = rho
.[B14].Value = Kh
.[B15].Value = K0
.[B16].Value = Nres
End WithEt peut etre aussi delta?
Re,
En effet A doit être recalculé en fonction de D, en tout cas la macro que vous proposez marche terriblement bien, merci beaucoup pour votre aide et bonne soirée.
Bonjour,
Ok, juste 2 points : faut-il intégrer le calcul du delta dans la boucle?
=>
Do
' ...
Nres = alpha * Kh * K0 * ((A * Rc) + (Asmin * Rs))
D = D + 0.1
A = (WorksheetFunction.Pi * D ^ 2) / 4
delta = e / D
Loop Until Nres >= charge=> et j'ai remarqué qu'en déclarant les variables en type "Double" (au lieu de "Single") les résultats sont légèrement différents.
Mais tout ça c'est peut être du détail?
Pierre
En effet delta doit être calculé dans la boucle tout comme A, je m'en suis rendu compte après. Pour ce qui est de la déclaration des variables, les résultats changent trop peu pour que ça soit significatif dans ce cas mais cela aurait pu être à prendre en compte.
En tout cas merci beaucoup d'avoir pris le temps de m'aider, bonne journée à vous !