Demande d'optimisation d'un code VBA
Bonjour tout le monde,
qui pourrait m'aider à réduire le temps d'exécution de cette macro svp ?
Ca prend trop de temps pour s'exécuter.
Sub TurnOffStuff()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
ActiveSheet.DisplayPageBreaks = False
End Sub
Sub TurnOnStuff()
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
ActiveSheet.DisplayPageBreaks = True
End Sub
Sub somprod()
Dim i As Double
Dim plage1, plage2, plage3, plage4 As Range
Worksheets("LR ASSURVIE 2021").Activate
Call TurnOffStuff
i = 4
Set plage1 = Sheets("SINISTRES assurvie").Range("AN2:AN300000")
Set plage2 = Sheets("SINISTRES assurvie").Range("AO2:A0300000")
Set plage3 = Sheets("SINISTRES assurvie").Range("AP2:AP300000")
Set plage4 = Sheets("SINISTRES assurvie").Range("Y2:Y300000")
Do While Cells(i, 2) <> ""
Cells(i, 17).Value = Application.SumIfs(plage4, plage1, Cells(i, 4), plage2, 1, plage3, 2021)
Loop
Call TurnOnStuff
End Sub
Merci cordialement !
qui pourrait m'aider à réduire le temps d'exécution de cette macro svp ?
Ca prend trop de temps pour s'exécuter.
Sub TurnOffStuff()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
ActiveSheet.DisplayPageBreaks = False
End Sub
Sub TurnOnStuff()
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
ActiveSheet.DisplayPageBreaks = True
End Sub
Sub somprod()
Dim i As Double
Dim plage1, plage2, plage3, plage4 As Range
Worksheets("LR ASSURVIE 2021").Activate
Call TurnOffStuff
i = 4
Set plage1 = Sheets("SINISTRES assurvie").Range("AN2:AN300000")
Set plage2 = Sheets("SINISTRES assurvie").Range("AO2:A0300000")
Set plage3 = Sheets("SINISTRES assurvie").Range("AP2:AP300000")
Set plage4 = Sheets("SINISTRES assurvie").Range("Y2:Y300000")
Do While Cells(i, 2) <> ""
Cells(i, 17).Value = Application.SumIfs(plage4, plage1, Cells(i, 4), plage2, 1, plage3, 2021)
Loop
Call TurnOnStuff
End Sub
Merci cordialement !
2 réponses
-
Contributeurbonjour,
peux-tu donner suite, ou marquer comme résolues, les trois autres discussions que tu as ouvertes dans ce forum?-
-
Contributeur@papish_4732quand?
-
-
Contributeurpeux-tu donner quelques informations?
combien de lignes de données as-tu?
combien de temps cela prend-t-il?
dans quel contexte fais-tu cela?
dois-tu exécuter cela plusieurs fois?-
-
Contributeur@papish_4732tu as donc 390 valeurs pour i?
il est certainement préférable de faire une boucle sur les 300000 lignes. pour chaque ligne, trouver la ligne correspondante, et ajouter la valeur à la somme.
il est dans doute utile de d'abord trier les deux tableaux. -
Contributeur@yg_beil faut sans doute éliminer d'abord toutes les lignes qui ne répondent pas à ce critère:
plage2, 1, plage3, 2021
.
combien en reste-t-il? -
@yg_beJe comprends pas svp
-
@yg_beCes lignes servent à un autre calcul dans une autre plage de cellules
-