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 !

2 réponses

  1. Contributeur
    peux-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?
    1. Le fichier "SINISTRES assurvie" contient 300000 lignes
      Le fichier dans lequel se fait les calculs contient 390 lignes
      Cela ne vient pas jusqu'à présent
      L'objectif est de calculer la somme de la plage Y avec les paramètres
    2. 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.
    3. 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?
    4. @yg_beCes lignes servent à un autre calcul dans une autre plage de cellules
  2. Contributeur
    bonjour,
    peux-tu donner suite, ou marquer comme résolues, les trois autres discussions que tu as ouvertes dans ce forum?
    1. D'accord ce sera fai