Macro sur 380 000 lignes extremement lente

Bonjour à tous,

Je vous sollicite car je dois faire tourner cette macro sur un fichier de 380 000 lignes et cela prend un temps interminable..

Je suis obligé de modifier les bornes de la boucle For manuellement pour aller de 2000 en 2000...

J'ai essayé une formule classique somme.si.ens sur un autre ordinateur, elle tourne depuis 1h et j'en suis à peine à 15%.

Sachant que j'en ai trois autres à faire en suivant.

Auriez-vous une solution pour accélérer la chose svp ?

Merci d'avance !

 Sub Silence1()
Dim derLigne As Long, i As Long
derLigne = Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Feuil2")
    For i = 4000 To 10000
        Sheets("Feuil2").Cells(i, 10).Value = WorksheetFunction.SumIfs(.Range("H" & i & ":H" & derLigne), .Range("B" & i & ":B" & derLigne), Sheets("Feuil2").Range("B" & i))
    Next i
End With
End Sub

Bonjour,

Empêches le calcul des formules avant la boucle et tu le rétablis à la fin :

Application.Calculation = xlCalculationManual
'ton code...
'...
'...
Application.Calculation = xlCalculationAutomatic

Maintenant, tu pourrais essayer de stocker ta plage dans un tableau, d'effectuer tes calculs dans le tableau et ensuite, coller le tableau dans la feuille ce qui serait probablement plus rapide !

Bonjour Theze,

Merci pour ta réponse rapide, je m'en vais de ce pas tester cette solution (enfin lorsque Excel aura récupéré) !

Merci

Bonjour,

Si ta formule est bien =SOMME.SI.ENS($H$2:$H$5; $B$2:$B$5;B2) et que tu n'en as rien à faire d'avoir 10000 fois le même résultat, un TCD te fait ça en qq secondes.

eric

3classeur3.xlsx (12.78 Ko)

Bonjour eriiic,

Justement je ne m'en fous pas d'avoir x fois la même valeur puisqu'après je dois récupérer seulement la première de chaque série.

Je vais voir si un TCD peut régler aussi ce problème, merci pour ta réponse !

Bonjour à tous,

et par une macro Tableau et dictionary ca devrait être rapide!

Peu familiarisé avec somme.si.ens, si j'ai bien compris ça revient à sommer en J les valeur de H correspondant à Bi dans la colonne B?

Avec quelques données pour essais ...

A+

Justement je ne m'en fous pas d'avoir x fois la même valeur puisqu'après je dois récupérer seulement la première de chaque série.

C'est bien ce que je dis. Tu t'en fous de savoir 10000 fois que l'item1 a 123 en somme non ?

Sinon ouvre mon fichier...

Tu verras comment remplir ta colonne à l'aide du TCD si vraiment tu veux l'avoir partout.

eric

Bonjour à tous,

Ca fonctionne très bien avec un TCD finalement, merci à vous d'avoir pris du temps !

A bientôt MrVBA

Rechercher des sujets similaires à "macro 380 000 lignes extremement lente"