code ultra lent pour supprimer des lignes

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

le code suivant est censé supprimer des lignes quand un critère est rempli. Or, il est horriblement lent, à tel point que je pensais que l'ordi avait planté mais quand je l'interromps et contrôle le nombre de lignes restant, je vois bien qu'il manque des lignes (donc le job est fait, mais quelle lenteur !). Pour me convaincre que ça marche, je garde 10 lignes pour lesquelles je change le critère, et ça marche bel et bien (mais 10 lignes ...).
J'ai un bon ordi récent avec 4 Go de RAM, processeur Pentium donc ce n'est pas de ce côté qu'il faut regarder ...

Le fichier fait certes environ 10 000 lignes mais tout de même !!!!

Sub calculation()

With Application
.ScreenUpdating = False
.EnableEvents = False
.calculation = xlCalculationManual
End With
Dim numlign As Integer
Dim i As Integer
numlign = Range("A" & Rows.Count).End(xlUp).Row

For i = numlign To 2 Step -1
If Cells(i, 26) = 2011 Then ' quand l'année contenue en colonne 26 vaut 2011
Rows(i).Delete
End If
Next i

End Sub


Merci d'avance pour vos idées (boucle ?) car je vais faire un usage régulier de cette macro
 
Re : code ultra lent pour supprimer des lignes

bonjour,

essaye en passant par un tableau:
tu remplis les éléments dans un tableau
tu effaces tes données
tu colles ton tableau sur l'emplacement de tes données (que tu viens d'effacer)
en général, ça va plus vite (tu n'écris qu'une fois dans le fichier)

si la piste t’intéresse, ...

à+
 
Re : code ultra lent pour supprimer des lignes

Bonjour Francedemo,

merci pour ta réponse mais je ne vois pas du tout. Tu écris :
...
... tu effaces tes données

c'est justement ce que je veux faire, supprimer les lignes, mais c'est HORRIBLEMENT lent.
Qu'entends-tu par tableau ?

Merci d'avance
 
Re : code ultra lent pour supprimer des lignes

à essayer:

Code:
Sub calculation()

Dim NumLign As Integer
Dim NumCol As Integer
Dim i As Integer
Dim Tablo() As Variant
Dim debut As Long

debut = Timer

With Application
   .ScreenUpdating = False
   .EnableEvents = False
   .calculation = xlCalculationManual
End With

NumLign = .[A65536].End(xlUp).Row
NumCol = [ZZ1].End(xlToLeft).Column

ReDim Tablo(1 To NumLign, 0 To NumCol)
For i = NumLign To 2 Step -1
   If Not Cells(i, 26) = 2011 Then
      For j = 1 To NumCol
         Tablo(i, j) = Cells(i, j).Value  ' quand l'année contenue en colonne 26 vaut 2011
      Next j
   End If
Next i
[A2].CurrentRegion.Offset(1, 0).Clear
[A2].Value = Tablo

With Application
   .ScreenUpdating = True
   .EnableEvents = True
   .calculation = xlCalculationAutomatic
End With

MsgBox ("Terminé en " & Timer - debut & " seconde(s)")

End Sub

(pas testé)
 
Re : code ultra lent pour supprimer des lignes

Bonsoir,

Voir PJ

0,03 sec pour 3.000 lignes supprimées

(conserve la présentation)

Code:
Sub supLignesRapide()
  Application.ScreenUpdating = False
  A = Range("z2:z" & [z65000].End(xlUp).Row)
  For i = LBound(A) To UBound(A)
    If A(i, 1) <> 2011 Then A(i, 1) = 0 Else A(i, 1) = "sup"
  Next i
  Columns("aa:aa").Insert Shift:=xlToRight
  [aa2].Resize(UBound(A)) = A
  [A2].CurrentRegion.Sort Key1:=Range("aa2"), Order1:=xlAscending, Header:=xlGuess
  On Error Resume Next
  Range("aa2:aa65000").SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
  Columns("aa:aa").Delete Shift:=xlToLeft
End Sub

JB
 

Pièces jointes

Dernière édition:
Re : code ultra lent pour supprimer des lignes

Bonjour Francedemo,


merci pour ton code, j'ai dû un peu l'adapter et quelle rapidité ...
Je dois encore digérer tout ça, pas mal de notions me sont encore étrangères mais j'avoue que ça turbine.

Encore merci pour ta contribution
 
Re : code ultra lent pour supprimer des lignes

Bonjour Boisgonthier,

merci pour ton aide. C'est effectivement impressionnant de rapidité ...
En revanche, je ne comprends pas pourquoi il faut placer un ON ERROR ...

encore un grand merci pour tes lumières
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
817
Réponses
3
Affichages
298
Retour