VBA Tableau - Simplification de code

Bonsoir,

J'ai dois exécuter une macro sur un fichier Excel contenant plus de 200 milles lignes. J'ai fais une macro pour faire le travail, la macro fonctionne bien mais elle prend beaucoup trop de temps (2 à 3h de temps d'exécution : littéralement).

Je pense que c'est possible de diminuer le temps de calcul en utilisant la variable tableau sur Excel mais je n'arrive pas à le faire. Pouvez-vous m'aider svp?

Le fichier est en pièce jointe.

Bonne année

bonjour,

une proposition

attention ton tableau ne contient pas les données pour des durées >30 et les résultats pourraient être incorrects.

Option Base 1

Sub TarifavecTableau()

    Dim PlageCalcul_Ligne As Long

    Dim a As Long
    Dim dureeinit
    Dim ageassure
    Dim dureepercep
    Dim CIprimepercue
    Dim CRDprimepercue
    Dim montantpret
    Application.ScreenUpdating = False

    t = Timer

    PlageCalcul = Sheets("Ptf adhésions").Range("A" & Rows.Count).End(xlUp).Row - 1

    ageassure = Sheets("Ptf adhésions").Range("E1").Resize(PlageCalcul)
    dureeinit = Sheets("Ptf adhésions").Range("C1").Resize(PlageCalcul)
    dureepercep = Sheets("Ptf adhésions").Range("I1").Resize(PlageCalcul)
    montantpret = Sheets("Ptf adhésions").Range("B1").Resize(PlageCalcul)
    CIprimepercue = Sheets("Ptf adhésions").Range("M1").Resize(PlageCalcul)
    CRDprimepercue = Sheets("Ptf adhésions").Range("N1").Resize(PlageCalcul)
    tabligne40 = Sheets("feuil3").Cells(40, 8).Resize(, 40)
    tab4271 = Sheets("feuil3").Cells(42, 8).Resize(40, 40)

    For i = 2 To PlageCalcul
        montantprete = montantpret(i, 1) / 100000
        CIprimepercue(i, 1) = 0
        CRDprimepercue(i, 1) = 0
        On Error Resume Next
        CIprimepercue(i, 1) = montantprete * tabligne40(1, dureeinit(i, 1)) * dureepercep(i, 1)
        CRDprimepercue(i, 1) = montantprete * suminterval(tab4271, dureeinit(i, 1), dureepercep(i, 1))
        On Error GoTo 0
    Next i
    Sheets("Ptf adhésions").Cells(1, 13).Resize(PlageCalcul) = CIprimepercue
    Sheets("Ptf adhésions").Cells(1, 14).Resize(PlageCalcul) = CRDprimepercue
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Sub

Function suminterval(t, di, dp)
    s = 0
    For i = 1 To dp
        s = s + t(i, di)
    Next i
    suminterval = s
End Function

Wow, Merci beaucoup pour le code. Je vais le lancer et Je te dirai ce que ça donne.

Oui, j'ai enlevé certaines valeurs pour alleger le document. Je cherche surtout à trouver la formulation sous forme de Tableau ou une autre methode VBA pour faire le calcul plus vite.

Merci

Bonne année

Rechercher des sujets similaires à "vba tableau simplification code"