Plage de vérification

asketill Messages postés 8 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 8 août 2008 - 21 janv. 2008 à 17:02
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 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


End Sub
 Merci par avance

2 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
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...

Amicalement,
Us.
0
Rejoignez-nous