j'essaye de faire une macro pour supprimer sur une plage variable des blocs de 10 ligne en laissant la 11 eme et ainsi de suite j'arrive a supprimer une ligne sur 2 mais c'est pas exactement ce qu'il me faut en commençant a partir de la ligne 5
C'est juste une petite boucle, mais il faut penser que quand on a supprimé le premier bloc (les lignes 5 à 14), les lignes suivantes à supprimer ne sont pas les lignes 16 à 25, mais les lignes 6 à 15 !
Sur un grand tableau, si l'on veut aller vite, il ne faut pas utiliser une boucle.
Utiliser une colonne auxiliaire, une formule pour filtrer et un tri pour regrouper :
VB:
Sub Supprimer()
Application.ScreenUpdating = False
Columns(1).Insert 'colonne auxiliaire
With Rows("5:" & Cells.SpecialCells(xlCellTypeLastCell).Row)
If .Row = 5 Then
With .Columns(1)
.Formula = "=LN(MOD(ROW()-5,11)=10)" 'formule pour filtrer
.Value = .Value 'supprime les formules
.EntireRow.Sort .Cells, xlAscending, Header:=xlNo 'tri pour regrouper et accélérer
.SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
End With
End If
End With
Columns(1).Delete 'supprime la colonne auxiliaire
End Sub
Pas vraiment sûr qu'en ajoutant une formule dans toutes les lignes concernées, puis en faisant un tri, puis la suppression, on soit gagnant en temps s'il y a peu de lignes (moins de quelques milliers)
Au delà, je suis d'accord.
La première question à se poser est combien de lignes (ou de blocs de 10) il faut supprimer
Sur un grand tableau, si l'on veut aller vite, il ne faut pas utiliser une boucle.
Utiliser une colonne auxiliaire, une formule pour filtrer et un tri pour regrouper :
VB:
Sub Supprimer()
Application.ScreenUpdating = False
Columns(1).Insert 'colonne auxiliaire
With Rows("5:" & Cells.SpecialCells(xlCellTypeLastCell).Row)
If .Row = 5 Then
With .Columns(1)
.Formula = "=LN(MOD(ROW()-5,11)=10)" 'formule pour filtrer
.Value = .Value 'supprime les formules
.EntireRow.Sort .Cells, xlAscending, Header:=xlNo 'tri pour regrouper et accélérer
.SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
End With
End If
End With
Columns(1).Delete 'supprime la colonne auxiliaire
End Sub