Suppression Ligne VBA

florenllf

XLDnaute Junior
Bonjour,
J'ai besoin de supprimer des lignes dans Excel suivant deux conditions soit la cellule = N soit il y a #NA dedans.

Mon code fonctionne parfaitement (ici je ne montre que pour un cas) mais lorsque je m'attaque à de gros fichier (environ 45000 lignes) il met un temps ....... j'ai le temps d'aller au WC...regarder un match de tennis et je suis sur le lendemain il ne serait pas terminé...:mad:

Ya t'il un moyen de l'optimiser?

Code:
For d = 2 To i
If IsError(Cells(d, 9)) Then
Row = Cells(d, 9).Row
ActiveSheet.Rows(Row).Delete ' Shift:=xlUp
End If
Next d


Merci :p
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Suppression Ligne VBA

Bonjour Florenllf, bonjour le forum,

Essaie la boucle inversée :
Code:
For d = i To 2 Step -1
     If IsError(Cells(d, 9)) Then
          ActiveSheet.Rows(d).Delete ' Shift:=xlUp
     End If
Next d
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Suppression Ligne VBA

Bonjour,

regarde peut être ceci :
Code:
Dim d As Long, i As Long
For d = i To 2 Step -1
    If IsError(Cells(d, 9)) Then Rows(d).Delete
Next d
A noter quand tu supprime des ligne il y a lieu de commencer par la fin, au cas ou 2 cellules consécutives répondent au test...

bon après midi
@+

Edition : bonjour Robert:)
 

florenllf

XLDnaute Junior
Re : Suppression Ligne VBA

Merci pour vos réponses.

Je vais les tester à savoir que je viens de comprendre une partie de la lenteur:
Mes lignes comprennent ca comme formule et je pense que c'est recalculé à chaque passage. (Je triche en faisant un copié/collé des valeurs sur elles-mêmes).

Code:
Range("I2:I" & i - 1).Formula = "=LOOKUP(D2,'2.liste IC'!A$2:A$102,'2.liste IC'!B$2:B$102)"
Range("J2:J" & i - 1).Formula = "=LOOKUP(C2,'3.entités pôles'!A$2:A$1558,'3.entités pôles'!B$2:B$1558)"

Mon code actuelle

Code:
For d = 2 To i
If IsError(Cells(d, 9)) Then
Row = Cells(d, 9).Row
ActiveSheet.Rows(Row).Delete ' Shift:=xlUp
d = d - 1
End If

Next d

For d = 2 To i
If Cells(d, 9).Value = "N" Then
Row = Cells(d, 9).Row
ActiveSheet.Rows(Row).Delete ' Shift:=xlUp
d = d - 1
End If
Next d
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote