Calcul itération
l
Bonsoir,
Je bloque sur une itération impliquant une macro :
Sub iteration()
'Calcul de la section d'acier necessaire à partir de As,min
D_iter = Range("Iter").Value
As_iter = Range("as_min1").Value
If D_iter = "FAUX" Then
For i = 1 To 10
As_iter = As_iter + 1 'ajoute 1 cm²
'calcul avec la nouvelle section d'acier
Run (SectionRectangulaire)
Next
Else: GoTo 395
End If
395 End Sub
J'aimerai pouvoir remplacer dans la macro SectionRectangulaire, la valeur de Asi par celle incrémentée As_iter.
Voici à quoi ressemble cette macro (c'est un extrait) :
Public Sub SectionRectangulaire()
'Récupération des données
fck = Range("fck").Value
yc = Range("gammaC").Value
fcd = Range("fcd").Value
fyk = Range("fck").Value
ys = Range("gammaS").Value
fyd = Range("fyd").Value
b = Range("b").Value / 100
h = Range("h").Value / 100
ec0 = Range("ec").Value / 1000
ecu = Range("ecu").Value / 1000
es0 = Range("es").Value / 1000
esu = Range("esu").Value / 1000
asi = Range("As_1").Value / 10000
ass = Range("As_2").Value / 10000
di = Range("d_1").Value / 100
ds = Range("d_2").Value / 100
cdg = h / 2
nb1 = 50 'précision de la courbe
nb2 = 1 'pas
Pi = 3.1415926
young = 210000
Dim ANs() As Double
Dim ANi() As Double
Dim ANmin As Double
Dim ANmax As Double
Dim esi() As Double
Dim ess() As Double
Dim eci() As Double
Dim ecs() As Double
Dim fsi() As Double
Dim fss() As Double
Dim Ncs() As Double
Dim Nci() As Double
ReDim ANs(nb1)
ReDim ANi(nb1)
ReDim esi(nb1)
ReDim ess(nb1)
ReDim eci(nb1)
ReDim ecs(nb1)
ReDim fsi(nb1)
ReDim fss(nb1)
ReDim Ncs(nb1)
ReDim Nci(nb1)
Dim Nbp() As Double
Dim Mbp() As Double
Dim Nbm() As Double
Dim Mbm() As Double
Dim Ncomp() As Double
Dim Mcomp() As Double
Dim Ntrac() As Double
Dim Mtrac() As Double
ReDim Nbp(nb1)
ReDim Mbp(nb1)
ReDim Nbm(nb1)
ReDim Mbm(nb1)
ReDim Ncomp(nb2)
ReDim Mcomp(nb2)
ReDim Ntrac(nb2)
ReDim Mtrac(nb2)
'**************************** Calcul pour As,min ***************************************
'************ PIVOT B (moment positif)
For i = 1 To nb1
'Calcul des positions d'axe neutre
ANmin = ecu * di / (ecu + esu)
ANmax = h / 0.8
ANs(1) = ANmin
ANi(1) = h - ANs(1)
For j = 2 To (nb1)
ANs(j) = (ANmax - ANmin) / (nb1) * j + ANmin
ANi(j) = h - ANs(j)
Next j
'Calcul des efforts dans le béton supérieur
ecs(i) = ecu
'Uniquement si le béton est plastique
If ecs(i) >= ec0 Then
Ncs(i) = b * ANs(i) * 0.8 * fcd
Else
Ncs(i) = 0
End If
'Calcul des efforts dans les aciers supérieurs
ess(i) = ecu * (ANs(i) - ds) / ANs(i)
If ess(i) >= es0 Then
fss(i) = ass * fyd
ElseIf ess(i) <= -es0 Then
fss(i) = -ass * fyd
Else
fss(i) = ass * fyd * ess(i) / es0
End If
'Calcul des efforts dans les aciers inférieurs
esi(i) = -ecu * (di - ANs(i)) / ANs(i)
If esi(i) >= es0 Then
fsi(i) = asi * fyd
ElseIf esi(i) <= -es0 Then
fsi(i) = -asi * fyd
Else
fsi(i) = asi * fyd * esi(i) / es0
End If
'Calcul des efforts dans le béton inférieur
eci(i) = -ecu * (h - ANs(i)) / ANs(i)
'Uniquement si le béton est plastique
If eci(i) >= ec0 Then
Nci(i) = b * ANi(i) * 0.8 * fcd
Else
Nci(i) = 0
End If
'Calcul des efforts au CdG
Nbp(i) = Ncs(i) + fss(i) + fsi(i) + Nci(i)
Mbp(i) = Ncs(i) * (h / 2 - ANs(i) * 0.4) + fss(i) * (h / 2 - ds) + fsi(i) * (-h / 2 + ds) + Nci(i) * (-h / 2 + ANi(i) * 0.4)
Next i
For i = 1 To nb1
' 'Affichage des résultats
Worksheets("Courbe").Range("A" & 4 + i + nb2).Value = Nbp(i)
Worksheets("Courbe").Range("B" & 4 + i + nb2).Value = Mbp(i)
Next i
Merci par avance pour votre aide.
Bonne soirée
l
Bonjour,
J'ai réussi à résoudre mon problème, mais un autre est apparu !
Je vous joint le fichier afin que ce soit plus clair pour vous.
Le problème est que ma boucle While ne s’arrête pas ... même quand la condition est remplie.
le principe de fonctionnement de la feuille :
- Appuyer sur "Itération"
- la section augmente jusqu'à ce que la cellule "Iter" = OK (normalement ...)
- Pour réinitialiser le calcul "Réinitialiser"
Merci pour votre aide
Bonne journée.
l
Personne d’intéresser par ce petit problème qui me tiraille ?