asketill
Messages postés8Date d'inscriptionlundi 5 mars 2007StatutMembreDernière intervention 8 août 2008
-
21 janv. 2008 à 17:02
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 2016
-
21 janv. 2008 à 22:12
Bonjour,
J'ai un problème dans le développement d'une sub pour un logiciel.
Donc je vous explique mon problème j'ai créer une boucle qui devrai permettre de trouver une valeur comprise dans la plage de valeur de 5% d'une autre variable.
soit "p.verif.Ncalc" devrai renvoyer une valeur "y" a condition que "p.verif.Ncalc" soit égale à + ou - 5 % de p.eda.N0ed je vous montre ce que j'ai codé :
Sub Ncalc(p As IPOTEAUX)
Dim i As Double
Dim f As Object
Set f = Sheets("Feuil1")
i = -1000
Do While p.eda.N0ed > " "
e = (p.beton.lambda * i * p.beton.fcd * p.sec.a + p.acier.nb1y * (p.acier.A_s / 1000000))
If Abs(p.beton.ec3u * ((i - p.acier.espacement_lit1y) / i)) < (p.acier.fyk / (p.acier.gammas * p.acier.Es)) Then
g = p.acier.Es * p.beton.ec3u * (i - p.acier.espacement_lit1y) / i
Else
If (p.beton.ec3u * ((i - p.acier.espacement_lit1y) / i)) > 0 Then
g = (p.acier.fyk / p.acier.gammas) + p.acier.nb2y * (p.acier.A_s / 1000000)
Else
g = -(p.acier.fyk / p.acier.gammas) + p.acier.nb2y * (p.acier.A_s / 1000000)
End If
End If
If Abs(p.beton.ec3u * ((i - p.acier.espacement_lit2y) / i)) < (p.acier.fyk / (p.acier.gammas * p.acier.Es)) Then
h = p.acier.Es * p.beton.ec3u * (i - p.acier.espacement_lit2y) / i
Else
If (p.beton.ec3u * (i - p.acier.espacement_lit2y) / i) > 0 Then
h = (p.acier.fyk / p.acier.gammas) + p.acier.nb3y * (p.acier.A_s / 1000000)
Else
h = -(p.acier.fyk / p.acier.gammas) + p.acier.nb3y * (p.acier.A_s / 1000000)
End If
End If
If Abs(p.beton.ec3u * ((i - p.acier.espacementlit3y) / i)) < (p.acier.fyk / (p.acier.gammas * p.acier.Es)) Then
j = p.acier.Es * p.beton.ec3u * (i - p.acier.espacementlit3y) / i
Else
If (p.beton.ec3u * (i - p.acier.espacementlit3y) / i) > 0 Then
j = 1
Else
j = -1
End If
End If
p.verif.Ncalc = e * g * h * j
If p.verif.Ncalc <= ((50 * p.eda.N0ed) / 100) And p.verif.Ncalc >= ((50 * p.eda.N0ed) / 100) Then
Exit Do
End If
i = i + 0.0015
Loop
Set f = Nothing
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 janv. 2008 à 18:50
salut,
sans savoir que contient ton type IPOTEAUX et que doit faire ton code (le genre de valeur que tu lis), çà ne risque pas d'être facile de t'aider....
celà dit ce snippet peut peut-être te servir
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 21 janv. 2008 à 22:12
Bonsoir,
Ferraillage d'un poteau, mais effectivement pas très clair...
IL semble bien que la ligne en gras "If p.verif.Ncalc <= ((50 * p.eda.N0ed) / 100) And p.verif.Ncalc >= ((50 * p.eda.N0ed) / 100) Then" ne soit pas logique... En effet, tu es en train d'écrire que : Si (A<=B) et (A>=B) alors ... Comment veux-tu que les deux conditions soit remplies en même temps ?? A priori, cela serait plutot OR (ou)...
Une autre solution, c'est d'utiliser une valeur absolue...