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