Optimiser code qui agit sur beaucoup(trop mais choix par défaut)de lignes
Bonjour à toutes et tous,
J'ai un macro code VBA créé via l'enregistreur de macro puis que j'ai adapté.
Cette macro agit sur un très grand nombre de ligne (+ de 60 000) sur base de donnée à partir de laquelle j'exécute différents calculs.
J'imagine que dans ce cas une approche via POWER QUERRY ou POWERBI serait peut-être plus approprié mais je n'ai pas suffisamment de connaissance pour répondre aujourd"hui à mon besoin et qui plus est je travaille sur un MAC.
A votre avis est-il possible d'optimiser mon code, je fait surtout référence à Sub MAJTABMOIS pour l'accélérer malgré le trés nombre de ligne à traiter.
Le Timer est optionnel le temps du développement je l'enlèverais dans ma version finale.
Merci
Trés cordialement
Hugues
Option Explicit
Sub MAJTABJOUR()
'
' mettre à jour TABJOUR
timerDebut = Timer
Sheets("TABJOUR").Activate
Range("TABJOUR[[TYPE]:[EXCERCICE]]").ClearContents
Range("N2").Select
ActiveCell.Formula2R1C1 = _
"=XLOOKUP([@ANNEE]&[@MOIS],TABEXERCICE[ANNEE]&TABEXERCICE[MOIS],TABEXERCICE[EXERCICE],""ns"")"
Calculate
Range("TABJOUR[[TYPE]:[EXCERCICE]]").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
MsgBox "Durée : " & (Timer - timerDebut) & " sec."
End Sub
Sub MAJTABMOIS()
'
' mettre à jour TABMOIS
Dim timerDebut As Double
timerDebut = Timer
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("TABMOIS").Activate
Range("TABMOIS[[CA_NET_TTC_TOTAL]:[QTE 2023]]").ClearContents
Range("E2").Formula2R1C1 = _
"=SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[ANNEE]*1=RC3)*(TABJOUR[MOIS]*1=RC4)*IF(ISNUMBER(TABJOUR[CA_NET_TTC_TOTAL]),TABJOUR[CA_NET_TTC_TOTAL]))"
Range("F2").Formula2R1C1 = _
"=SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[ANNEE]*1=RC3)*(TABJOUR[MOIS]*1=RC4)*IF(ISNUMBER(TABJOUR[OBJECTIF_CA_TTC]),TABJOUR[OBJECTIF_CA_TTC]))"
Range("G2").Formula2R1C1 = _
"=SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[ANNEE]*1=RC3)*(TABJOUR[MOIS]*1=RC4)*IF(ISNUMBER(TABJOUR[FREQUENTATION]),TABJOUR[FREQUENTATION]))"
Range("H2").Formula2R1C1 = _
"=SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[ANNEE]*1=RC3)*(TABJOUR[MOIS]*1=RC4)*TABJOUR[CLIENT])"
Range("I2").Formula2R1C1 = _
"=SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[ANNEE]*1=RC3)*(TABJOUR[MOIS]*1=RC4)*TABJOUR[QTE TOTAL])"
Range("J2").Formula2R1C1 = _
"=SUMPRODUCT(('OBJECTIFS INITIAUX'!R1C4:R1C18=[@MAGASIN])*('OBJECTIFS INITIAUX'!R3C1:R14C1=[@ANNEE])*('OBJECTIFS INITIAUX'!R3C2:R14C2=[@MOIS])*'OBJECTIFS INITIAUX'!R3C4:R14C18)"
Range("L2").Formula2R1C1 = _
"=XLOOKUP([@ANNEE]&[@MOIS],TABEXERCICE[ANNEE]&TABEXERCICE[MOIS],TABEXERCICE[EXERCICE],""ns"")"
Range("M2").FormulaR1C1 = _
"=IF([@MOIS]=4,1,IF([@MOIS]=5,2,IF([@MOIS]=6,3,IF([@MOIS]=7,4,IF([@MOIS]=8,5,IF([@MOIS]=9,6,IF([@MOIS]=10,7,IF([@MOIS]=11,8,IF([@MOIS]=12,9,IF([@MOIS]=1,10,IF([@MOIS]=2,11,IF([@MOIS]=3,12))))))))))))"
Range("N2").FormulaR1C1 = "=TEXT([@MOIS]*29,""mmmm"")"
Range("O2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2018"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2018"")*TABJOUR[CA_NET_TTC_TOTAL]),0)"
Range("P2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2019"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2019"")*TABJOUR[CA_NET_TTC_TOTAL]),0)"
Range("Q2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2020"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2020"")*TABJOUR[CA_NET_TTC_TOTAL]),0)"
Range("R2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2021"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2021"")*TABJOUR[CA_NET_TTC_TOTAL]),0)"
Range("S2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2022"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2022"")*TABJOUR[CA_NET_TTC_TOTAL]),0)"
Range("T2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2023"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2023"")*TABJOUR[CA_NET_TTC_TOTAL]),0)"
Range("U2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2018"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2018"")*TABJOUR[FREQUENTATION]),0)"
Range("V2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2018"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2018"")*TABJOUR[CLIENT]),0)"
Range("W2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2018"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2018"")*TABJOUR[QTE TOTAL]),0)"
Range("X2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2019"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2019"")*TABJOUR[FREQUENTATION]),0)"
Range("Y2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2019"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2019"")*TABJOUR[CLIENT]),0)"
Range("Z2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2019"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2019"")*TABJOUR[QTE TOTAL]),0)"
Range("AA2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2020"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2020"")*TABJOUR[FREQUENTATION]),0)"
Range("AB2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2020"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2020"")*TABJOUR[CLIENT]),0)"
Range("AC2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2020"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2020"")*TABJOUR[QTE TOTAL]),0)"
Range("AD2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2021"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2021"")*TABJOUR[FREQUENTATION]),0)"
Range("AE2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2021"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2021"")*TABJOUR[CLIENT]),0)"
Range("AF2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2021"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2021"")*TABJOUR[QTE TOTAL]),0)"
Range("AG2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2022"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2022"")*TABJOUR[FREQUENTATION]),0)"
Range("AH2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2022"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2022"")*TABJOUR[CLIENT]),0)"
Range("AI2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2022"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2022"")*TABJOUR[QTE TOTAL]),0)"
Range("AJ2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2023"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2023"")*TABJOUR[FREQUENTATION]),0)"
Range("AK2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2023"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2023"")*TABJOUR[CLIENT]),0)"
Range("AL2").Formula2R1C1 = _
"=IF([@EXCERCICE]=""EXERCICE 2023"",SUMPRODUCT((TABJOUR[CODE_MAG]=RC1)*(TABJOUR[MOIS]*1=RC4)*(TABJOUR[EXCERCICE]=""EXERCICE 2023"")*TABJOUR[QTE TOTAL]),0)"
'Calculate
Range("TABMOIS[[CA_NET_TTC_TOTAL]:[QTE 2023]]").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.DisplayAlerts = True
'Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Range("A1").Select
MsgBox "Durée : " & (Timer - timerDebut) & " sec."
End Sub
Hello,
Remplace tes sommeprod par des somme.si.ens ça devrait être + rapide
exemple pour ta première formule :
Range("E2").Formula2R1C1 = _
"=SUMIFS(TABJOUR!C[6],TABJOUR!C[-4],[@[CODE_MAG]],TABJOUR!C[-2],TABMOIS!RC[-2],TABJOUR!C[-1],TABMOIS!RC[-1])"
Bonjour Rag02700, Bonjour toutes et tous,
Rag02700 effectivement Somme.Si.Ens améliore grandement la vitesse d'exécution versus Sommeprod (la force de l'habitude de la syntaxe, de la versatilité et de la puissance de sommeprod me fait très souvent aborder mes problèmes avec cette fonction).Merci donc à toi pour cette première amélioration.
A ton avis et celui de vous toutes et toys voyez d'autres pistes pour améliorer enocre le temps de traitement ?
Merci
Trés cordialement
Hugues
Sub MAJTABMOIS()
'
' mettre à jour TABMOIS
Dim timerDebut As Double
timerDebut = Timer
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("TABMOIS").Activate
Range("TABMOIS[[CA_NET_TTC_TOTAL]:[QTE TOTAL 2023]]").ClearContents
Range("E2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
Range("F2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
Range("G2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
Range("H2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
Range("I2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
Range("L2").Formula2R1C1 = _
"=XLOOKUP([@ANNEE]&[@MOIS],TABEXERCICE[ANNEE]&TABEXERCICE[MOIS],TABEXERCICE[EXERCICE],""ns"")"
Range("M2").FormulaR1C1 = _
"=IF([@MOIS]=4,1,IF([@MOIS]=5,2,IF([@MOIS]=6,3,IF([@MOIS]=7,4,IF([@MOIS]=8,5,IF([@MOIS]=9,6,IF([@MOIS]=10,7,IF([@MOIS]=11,8,IF([@MOIS]=12,9,IF([@MOIS]=1,10,IF([@MOIS]=2,11,IF([@MOIS]=3,12))))))))))))"
Range("N2").FormulaR1C1 = "=TEXT([@MOIS]*29,""mmmm"")"
Range("O2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
Range("P2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
Range("Q2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
Range("R2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
Range("S2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
Range("T2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
Range("U2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C15,LEN(R1C15)-3))"
Range("V2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C15,LEN(R1C15)-3))"
Range("W2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C15,LEN(R1C15)-3))"
Range("X2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C16,LEN(R1C16)-3))"
Range("Y2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C16,LEN(R1C16)-3))"
Range("Z2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C16,LEN(R1C16)-3))"
Range("AA2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C17,LEN(R1C17)-3))"
Range("AB2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C17,LEN(R1C17)-3))"
Range("AC2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C17,LEN(R1C17)-3))"
Range("AD2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C18,LEN(R1C18)-3))"
Range("AE2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C18,LEN(R1C18)-3))"
Range("AF2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C18,LEN(R1C18)-3))"
Range("AG2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C19,LEN(R1C19)-3))"
Range("AH2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C19,LEN(R1C19)-3))"
Range("AI2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C19,LEN(R1C19)-3))"
Range("AJ2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
Range("AJ3").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
Range("AK2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
Range("AL2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
'Calculate
Range("TABMOIS[[CA_NET_TTC_TOTAL]:[QTE TOTAL 2023]]").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.DisplayAlerts = True
'Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Range("A1").Select
MsgBox "Durée : " & (Timer - timerDebut) & " sec."
End Sub
Hello,
Ce sont les indirect qui bouffent du temps maintenant.
Si tu veux garder la même façon de procéder, je te conseille de mettre tes colonnes de calcul sous forme de texte dans des variables.
Comme ceci :
Tabj_CA_Net = "TABJOUR[CA_NET_TTC_TOTAL]"
Tabj_Mag = "TABJOUR[CODE_MAG]"
Tabj_Annee = "TABJOUR[ANNEE]"
Tabj_Mois = "TABJOUR[MOIS]"
Range("E2").Formula = "=SUMIFS(" & Tabj_CA_Net & "," & Tabj_Mag & ",[@[CODE_MAG]]," & Tabj_Annee & ",[@ANNEE]," & Tabj_Mois & ",[@MOIS])"
Bonjour Rag02700, Toutes et tous,
Merci beaucoup Rag02700, car même si je n'ai pas repris la suppression des indirect (car cela m'aurait demander de créer un grand nombre de variables et que je veux finalement aussi conserver les formules en dure dans la première ligne du tableau pour ma propre compréhension et lisibilité tant de la macro que des calculs faits sur la base) tes conseils m'ont vraiment permis d'optimiser mon code. Tant sur la rapidité d'exécution de la macro que sur l'utilisation de la base qui ne contient presque plus de formules mais des valeurs issues des calculs de la macro.
Tu écris dans ton dernier post. :"Si tu veux garder la même façon de procéder", est-ce que cela peut signifier que tu aurais une autre approche globale à me proposer ?
Encore une fois, merci
Très cordialement
Hugues
Ci dessous le code que j'ai construit grâce à tes conseils, n'hésite pas me dire mis à part les indirect si tu penses que l'on peut encore optimiser.
Sub MAJTABMOISBIS()
'
' mettre à jour TABMOIS
Dim timerDebut As Double
Dim lastRow As Long
timerDebut = Timer
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("TABMOIS")
With ws
.Range("TABMOIS[[CA_NET_TTC_TOTAL]:[QTE TOTAL 2023]]").ClearContents
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
.Range("E2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
.Range("F2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
.Range("G2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
.Range("H2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
.Range("I2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[ANNEE2],[@ANNEE],TABJOUR[MOIS2],[@MOIS])"
.Range("J2").Formula2R1C1 = _
"=SUMPRODUCT(('OBJECTIFS INITIAUX'!R1C4:R1C18=[@MAGASIN])*('OBJECTIFS INITIAUX'!R3C1:R14C1=[@ANNEE])*('OBJECTIFS INITIAUX'!R3C2:R14C2=[@MOIS])*'OBJECTIFS INITIAUX'!R3C4:R14C18)"
.Range("K2").FormulaR1C1 = _
"=XLOOKUP([@[CODE_MAG]],TABCOMP[CODE MAG],TABCOMP[TYPE],""ns"")"
.Range("L2").Formula2R1C1 = _
"=XLOOKUP([@ANNEE]&[@MOIS],TABEXERCICE[ANNEE]&TABEXERCICE[MOIS],TABEXERCICE[EXERCICE],""ns"")"
.Range("M2").FormulaR1C1 = _
"=IF([@MOIS]=4,1,IF([@MOIS]=5,2,IF([@MOIS]=6,3,IF([@MOIS]=7,4,IF([@MOIS]=8,5,IF([@MOIS]=9,6,IF([@MOIS]=10,7,IF([@MOIS]=11,8,IF([@MOIS]=12,9,IF([@MOIS]=1,10,IF([@MOIS]=2,11,IF([@MOIS]=3,12))))))))))))"
.Range("N2").FormulaR1C1 = "=TEXT([@MOIS]*29,""mmmm"")"
.Range("O2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
.Range("P2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
.Range("Q2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
.Range("R2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
.Range("S2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
.Range("T2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&R1C5&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C,LEN(R1C)-3))"
.Range("U2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C15,LEN(R1C15)-3))"
.Range("V2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C15,LEN(R1C15)-3))"
.Range("W2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C15,LEN(R1C15)-3))"
.Range("X2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C16,LEN(R1C16)-3))"
.Range("Y2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C16,LEN(R1C16)-3))"
.Range("Z2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C16,LEN(R1C16)-3))"
.Range("AA2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C17,LEN(R1C17)-3))"
.Range("AB2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C17,LEN(R1C17)-3))"
.Range("AC2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C17,LEN(R1C17)-3))"
.Range("AD2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C18,LEN(R1C18)-3))"
.Range("AE2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C18,LEN(R1C18)-3))"
.Range("AF2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C18,LEN(R1C18)-3))"
.Range("AG2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C19,LEN(R1C19)-3))"
.Range("AH2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C19,LEN(R1C19)-3))"
.Range("AI2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C19,LEN(R1C19)-3))"
.Range("AJ2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
.Range("AJ3").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
.Range("AK2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
.Range("AL2").FormulaR1C1 = _
"=SUMIFS(INDIRECT(""TABJOUR[""&LEFT(R1C,FIND("" "",R1C,FIND("" "",R1C)+1)-1)&""]""),TABJOUR[CODE_MAG],[@[CODE_MAG]],TABJOUR[MOIS2],[@MOIS],TABJOUR[EXERCICE],RIGHT(R1C20,LEN(R1C20)-3))"
With .Range("E3:AL" & lastRow)
.Value = .Value
End With
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Range("A1").Select
MsgBox "Durée : " & (Timer - timerDebut) & " sec."
End Sub