Calcul itération

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

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.

Personne d’intéresser par ce petit problème qui me tiraille ?

Rechercher des sujets similaires à "calcul iteration"