Optimisation de macro avec un tableau

Bonjour le forum

J'ai lu différents cours vba expliquant que pour optimiser le temps d'exécution d'une macro il vaut mieux passer par une variable de type tableau.

Ma macro à ce jour met 1 minute à s'exécuter. (sur la base de 26 000 lignes)

Que dois-je changer dans mon code afin d'utiliser une variable de type tableau ?

Merci pour vos réponses.

Je mets en PJ mon fichier et mon code ci dessous

Option Explicit

Sub calcul()

 Dim i As Integer
 Dim Dernl As Long

 Dernl = Range("A" & Rows.Count).End(xlUp).Row

Sheets("catalogue prev").Activate
ActiveSheet.Calculate
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False

 For i = 4 To Dernl
   Cells(i, 9) = "=TEXT(RC[-2],""mmmm"")&"" ""&TEXT(RC[-2],""aaaa"")"
   Cells(i, 10) = "=RIGHT(RC[2],2)"
   Cells(i, 11) = "=LEFT(RC[1],4)"
   Cells(i, 22) = "=INDEX(table!C1:C2,MATCH('catalogue prev'!RC[1],table!C2,0),1)"
   Cells(i, 25) = "=LEFT(RC[1],4)"
   Cells(i, 37) = "=RC[-3]*RC87"
   Cells(i, 38) = "=RC[-3]*RC87"
   Cells(i, 39) = "=RC[-3]*RC87"
   Cells(i, 48) = "=IF(AND(RC[-2]="""",COUNTA(RC[-1])=1),""a enlever de la base"",IF(RC[-2]="""",RC[-3],RC[-2]))"
   Cells(i, 59) = "=RC[-6]&RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
   Cells(i, 64) = "=IFERROR(IF(MID(RC[-5],SEARCH(""t"",RC[-5],1),1)=""t"",""produit tracté"",""""),""non tracté"")"
   Cells(i, 65) = "=IFERROR(IF(MID(RC[-6],SEARCH(""U"",RC[-6],1),1)=""U"",""RI financée"",""""),"""")"
   Cells(i, 66) = "=IFERROR(IF(MID(RC[-7],SEARCH(""W"",RC[-7],1),1)=""W"",""RI non financée"",""""),"""")"
   Cells(i, 67) = "=IFERROR(IF(MID(RC[-8],SEARCH(""Z"",RC[-8],1),1)=""Z"",""lot viruel tous conso non financé"",""""),"""")"
   Cells(i, 68) = "=IFERROR(IF(MID(RC[-9],SEARCH(""Y"",RC[-9],1),1)=""Y"",""lot viruel tous conso financé"",""""),"""")"
   Cells(i, 69) = "=IFERROR(IF(MID(RC[-10],SEARCH(""L"",RC[-10],1),1)=""L"",""remise différée Eurocarte u"",""""),"""")"
   Cells(i, 69) = "=IFERROR(IF(MID(RC[-11],SEARCH(""M"",RC[-11],1),1)=""M"",""Eurocarte u lot virtuel"",""""),"""")"
   Cells(i, 71) = "=IF(RC[-6]&RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]="""",""pas de méca"",RC[-6]&RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1])"
   Cells(i, 87) = "=IF(RC[-1]=""probleme de remontée"",0,RC[-1]*RC[-39])"
   Cells(i, 90) = "=IF(RC[-26]=""produit tracté"",RC[-3]*RC[-41],0)"
   Cells(i, 91) = "=IF(RC[-27]=""non tracté"",RC[-4]*RC[-41],0)"
   Cells(i, 92) = "=IF(RC[-28]=""non tracté"",RC[-5]*RC[-41],0)"
   Cells(i, 93) = "=IF(RC[-29]=""non tracté"",RC[-6]*RC[-41],0)"
   Cells(i, 94) = "=IF(RC[-23]=""pas de méca"",0,((RC[-34]/RC[-31])*RC[-7])*RC[-21])"
   Cells(i, 108) = "=IF(RC[-32]=0,0,RC[-32]/100)"
   Cells(i, 109) = "=IF(RC[-32]=0,0,RC[-32]/100)"
   Cells(i, 110) = "=IF(RC[-32]=0,0,RC[-32]/100)"
   Cells(i, 111) = "=IF(RC[-32]=0,0,RC[-32]/100)"
   Cells(i, 112) = "=IF(RC[-32]=0,0,RC[-32]/100)"
   Cells(i, 113) = "=IF(RC[-32]=0,0,RC[-32]/100)"
   Cells(i, 114) = "=RC[-6]*RC38"
   Cells(i, 115) = "=RC[-6]*RC38"
   Cells(i, 116) = "=RC[-6]*RC38"
   Cells(i, 117) = "=RC[-6]*RC38"
   Cells(i, 118) = "=RC[-6]*RC38"
   Cells(i, 119) = "=RC[-6]*RC38"

 Next i

Application.Calculation = xlCalculationAutomatic

End Sub
8classeur1.xlsb (71.20 Ko)

Bonjour,

La macro ne met pas une minute à s'exécuter elle ne met qu'une fraction de seconde.

Ce sont les calculs que vous lui demandez ensuite qui prennent plus de temps...

Dans ces conditions il n'y a (presque) rien à gagner car le temps de calcul de ces formules sera toujours le même.

A+

Bonjour galopin01,

La macro est rapide dans cet exemple car j'ai supprimé des lignes afin de joindre le fichier.

Mais dans la "réalité" mon fichier à 26 000 lignes est là la macro met 1 minute

J'ai bien compris... mais si vous supprimez cette ligne à la fin :

Application.Calculation = xlCalculationAutomatic

... Je suppose que c'est plus rapide ?

936000 formules à calculer ç'est pas rien !

Je serai très étonné que quelqu'un annonce un gain de temps significatif, même si c'est vrai on pourrait peut-être optimiser des bricoles... Mais pas de tableau en vue ici.

Rechercher des sujets similaires à "optimisation macro tableau"