La solution de mdo100 fonctionne très bien, mais pourquoi dites-vous, Dan, qu'il y a plus rapide ?
Bien sûr qu'elle fonctionne mais par défaut utiliser une boucle peut s'avérer être plus lent surtout si vous parcourez toutes lignes. Cela dépend donc du nombre de lignes à traiter dans votre tableau. Si vous en avez 1000 ou 10000 cela n'est pas la même chose. Comme je vous ai écrit c'est à vérifier.
j'ai un message qui me demande si je veux supprimer les lignes entières.
Essayez avec celui-ci où j'ai ajouté deux instructions pour vous éviter le message
Sub Macro1()
Dim plage As Range
With ActiveSheet.ListObjects("Tableau1")
.Range.AutoFilter Field:=4, Criteria1:="0"
On Error Resume Next
Set plage = .DataBodyRange.SpecialCells(xlCellTypeVisible, xlNumbers)
If Err.Number > 0 Then Exit Sub
Application.DisplayAlerts = False
plage.SpecialCells(xlCellTypeVisible).Delete
.Range.AutoFilter Field:=4
End With
Application.DisplayAlerts = True
End Sub
Quelle différence de temps peut-il y avoir sur un tableau de 10000 lignes ?
Vous pouvez placer un timer au début du code et une Msgbox à la fin. Cela vous donnera le temps réalisé pour effectuer les opérations dans votre tableau.
Sub Macro1()
Dim plage As Range
Start = Timer
'with ....
.....
MsgBox "durée du traitement: " & Timer - Start & " secondes"
End sub
Crdlt