XL 2019 VBA Suppression de 10 ligne on laisse une ligne on supprime 10 lignes...

patpat78

XLDnaute Nouveau
Bonjour

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

auriez vous une idée ?

merci d'avance
 

Katido

XLDnaute Occasionnel
Bonjour Patpat,

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 !

Ci-joint un fichier exemple
 

Pièces jointes

  • supplignes.xlsm
    21.4 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonsoir patpat78, Katido,

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
A+
 

Pièces jointes

  • Supprimer(1).xlsm
    18.6 KB · Affichages: 6

Katido

XLDnaute Occasionnel
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
 

patpat78

XLDnaute Nouveau
Bonsoir patpat78, Katido,

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
A+
Merci ça marche impeccable! :D
 

job75

XLDnaute Barbatruc
Bonjour patpat78, Katido,
La première question à se poser est combien de lignes (ou de blocs de 10) il faut supprimer
Avec la solution que j'ai donnée il n'y a pas à se poser de question.

C'est la solution la plus rapide quel que soit le nombre de lignes à supprimer.

De plus les formats sont conservés, contrairement à la méthode utilisant des tableaux VBA.

A+
 

Discussions similaires

Réponses
7
Affichages
318

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83