Optimisation code VBA

Bonjour,

Je suis nouveau sur le forum et un mi-débutant en VBA.

Ma question est très simple.

J'ai récupéré un ficher excel qui m'intéresse sur internet (pour le calcul de structure de bâtiment 8) )

J'y ai trouvé son code vba qui permet (pour simplifier!) de calculer un résultats que je nommerai R dépendant de différentes variables V.

J'ai repris ce code pour construire mon propre tableur.

Le but de mon tableur et de calculer une multitude de valeur R pour une multitude de variables V.

Mes variables étant présentées sous forme de tableau, j'ai créé une macro qui lit ce tableau et l'ensemble de mes variables V et qui me renvoie ainsi tous les résultats R correspondant.

Mon problème est le suivant :

  • le calcul est très long. Est-il possible de l'optimiser ?
  • je pense que cette lenteur vient de la nature du code VBA (pas ma macro mais celle que j'ai récupéré, voir extrait ci-après). Je ne comprends pas trop ce code, étant débutant j'utilise plutôt les langages classique savec des "sub" des "integer" des "dim" etc...
Quelqu'un peut-il m'expliquer la nature et le fonctionnement de ce code ?

Ce code est-il optimisable?

Ci-dessous, le code que j'ai récupéré.

Merci d'avance!!

A bientôt

Function ATG(N, M, N0)
Pi = 4 * Atn(1)
N1 = N - N0
If Abs(N) < 0.0001 And Abs(M) < 0.0001 Then ATG = -Pi / 2: GoTo 99
If N1 = 0 Then ATG = 0: GoTo 99
If N1 > 0 Then ATG = Pi / 2 - Atn(M / N1) Else ATG = -Atn(M / N1) - Pi / 2
99 End Function
Function procen(tabT, tabr, NEd, MEd)
' Interpolation pour le calcul du pourcentage d'acier
Dim tabN(90, 6), tabM(90, 6), MR(6), NR(6)
If Abs(MEd) + Abs(NEd) = 0 Then procen = 0: GoTo 99
NL = 80  '73
N0 = 0.5 * tabT(80, 1)
    For j = 1 To 5
        For i = 1 To NL
        j1 = (j - 1) * 2 + 1: j2 = 2 * j
        tabN(i, j) = tabT(i, j1)
        tabM(i, j) = tabT(i, j2)
        Next i
    Next j
e = ATG(NEd, MEd, N0)
'procen = e: GoTo 99

    For j = 1 To 5
        For i = 2 To NL  '2 to NL
        N1 = tabN(i, j): M1 = tabM(i, j)
        e1 = ATG(N1, M1, N0)
        If e1 > e Then i1 = i: GoTo 18
        Next i
    GoTo 33
18  N2 = tabN(i1 - 1, j): M2 = tabM(i1 - 1, j)
    e2 = ATG(N2, M2, N0)
'procen = e2: GoTo 99

    k = (e - e2) / (e1 - e2)
    MR(j) = M2 + (M1 - M2) * k
    NR(j) = N2 + (N1 - N2) * k
33  Next j
If Abs(NEd - N0) / N0 > 0.35 Then GoTo 55
If MEd > MR(5) Then procen = 1000: GoTo 99
If MEd < MR(1) Then procen = tabr(1): GoTo 99
    For j = 1 To 4
    If MEd > MR(j) Then j1 = j: GoTo 51
    Next j
51 j2 = j1 + 1
k = (MEd - MR(j1)) / (MR(j2) - MR(j1))
GoTo 90
55 If e < 0 And NEd > NR(1) Then procen = tabr(1): GoTo 99
If e > 0 And NEd < NR(1) Then procen = tabr(1): GoTo 99
If e < 0 And NEd < NR(5) Then procen = 1000: GoTo 99
If e > 0 And NEd > NR(5) Then procen = 1000: GoTo 99
    For j = 5 To 1 Step -1
    If e < 0 And NEd < NR(j) Then j1 = j: GoTo 24
    If e > 0 And NEd > NR(j) Then j1 = j: GoTo 24
    Next j
24 j2 = j1 + 1
k = (NEd - NR(j1)) / (NR(j2) - NR(j1))

90 procen = tabr(j1) + (tabr(j2) - tabr(j1)) * k
99 End Function
Function fsc(e, fcd, ec2, ecu2, N)
' calcul de la contrainte du béton en diagramme PR
If ecu2 > 5 Then Ecm = ecu2: ec1 = ec2: GoTo 12 'Sargin
' parabole-rectangle
If e = 0 Then s = 0: GoTo 10
If e > ec2 Then s = fcd: GoTo 10
s = fcd * (1 - (1 - e / ec2) ^ N)
GoTo 10
12 'Sargin
eta = e / ec1
k = 1.05 * Ecm / 1.2 * e / fcd
s = fcd * (k * eta - eta * eta) / (1 + (k - 2) * eta)
10 fsc = s
End Function
Function fscg(e, fcd, ec1, Ecm)
' calcul de la contrainte du béton en diagramme Sargin
If e = 0 Then s = 0: GoTo 10
k = 1.05 * Ecm / 1.2 * ec1 / fcd
eta = e / ec1
s = fcd * (k * eta - eta * eta) / (1 + (k - 2) * eta)
10 fscg = s
End Function
Rechercher des sujets similaires à "optimisation code vba"