Temps d’exécution trop long

Bonjour,

J'ai besoin de supprimer des lignes avec comme condition si les cellules A1 et O1 sont identiques aux cellules A2 et O2 etc. Ma macro réalise bien l'opération cependant sur un fichier de 90 000 lignes le temps est beaucoup trop long.

Voici ma macro :

 Sub Supprimer_Ligne

 Dim i As Long

 For i = 91 000 To 0 Step -1

 If Range("A" & i).Value = Range("A" & i +1).Value And  If Range("O" & i).Value = Range("O" & i +1).Value
 Rows(i & ":"&i).Activate
 Selectiion.Delete Shift:=xlUp
 End If

Avez vous une idée?

Merci d'avance,

Floki

Bonjour,

Tu peux toujpurs essayer ça :

 Sub Galopin()
 Dim a, b, i&
 a = Range("A1:A91001").Value
 b = Range("O1:O91001").Value
   For i = 91000 To 1 Step -1
     If a(i, 1) = a(i + 1, 1) And b(i, 1) = a(i + 1, 1) Then
       Rows(i + 1).Delete Shift:=xlUp
     End If
   Next
 End Sub

A+

Bonjour,

Et aussi avec :

Application.ScreenUpdating = False

en début de code, non ?

Bonjour Galopin01, Oyobrans,

J'ai essayé ton code cependant il bloque au niveau de :

If a(i, 1) = a(i + 1, 1) And b(i, 1) = a(i + 1, 1) Then

Avec un message d'erreur : Erreur d'exécution '9' :

L'indice n'appartient pas à la sélection.

Bonjour à tous,

Dans le code de Galopin ...

 Sub Galopin()
 Dim a, b, i&
 a = Range("A1:A91001").Value
 b = Range("O1:O91001").Value
   For i = 91000 To 1 Step -1
     If a(i, 1) = a(i + 1, 1) And b(i, 1) = a(i + 1, 1) Then
       Rows(i + 1).Delete Shift:=xlUp
     End If
   Next
 End Sub

As-tu remarqué a = Range("A1:A91001").Value

et For i = 91000 To 1 Step -1 qu'il y une ligne de moins dans la boucle "For".

Sinon tu auras l'erreur 9

Ce qui n'a rien à voir avec l'erreur 9, une petit coquille à corriger :

......... a et a .......................................... puis b et b

If a(i, 1) = a(i + 1, 1) And b(i, 1) = b(i + 1, 1) Then

ric

Bonjour Ric,

Effectivement je n'avais pas vu ce détail malheureusement cela n'a toujours pas permis au code de fonctionner.

D'autre part, je n'ai pas compris ton deuxième paragraphe au sujet de a et b

Je joins le fichier en PJ en espérant que ce soit plus parlant pour vous.

Floki

2test.xlsm (797.67 Ko)

Bonjour à tous,

Sub Galopin()
Dim a, b, i&

Application.ScreenUpdating = False
a = Range("A1:A50698").Value   ' << ligne 50698
b = Range("O1:O50698").Value   ' << ligne 50698

   For i = 50697 To 1 Step -1   ' << ligne 50697 > la ligne doit être une ligne de moins
      If a(i, 1) = a(i + 1, 1) And b(i, 1) = b(i + 1, 1) Then
         Rows(i + 1).Delete Shift:=xlUp
      End If
   Next
End Sub

ric

Alors oui cela fonctionne mais le problème reste le même : pour un fichier ayant des milliers de lignes, cela prend une éternité ..

Bonjour,

Si tu as des formules et des macros événementielles ...

Un essai ...

Sub Galopin()
Dim a, b, i&

   Application.ScreenUpdating = False
   Application.EnableEvents = False
   Application.Calculation = xlCalculationManual

   a = Range("A1:A50698").Value
   b = Range("O1:O50698").Value

   For i = 50697 To 1 Step -1
      If a(i, 1) = a(i + 1, 1) And b(i, 1) = b(i + 1, 1) Then
         Rows(i + 1).Delete Shift:=xlUp
      End If
   Next

   Application.Calculation = xlCalculationAutomatic
   Application.EnableEvents = True

End Sub

ric

Merci beaucoup!

Rechercher des sujets similaires à "temps execution trop long"