XL 2010 Supprimer lignes dans une zone mais en laisser un certain nombre

Phillip

XLDnaute Occasionnel
Bonjour,

Je vous sollicite encore pour un problème qui est peut-être simple.

J'ai un tableau que je remplis ligne par ligne régulièrement (il a 5 colonnes). Il grossit donc de plus en plus en lignes.

De temps en temps je veux effacer les lignes et en supprimer MAIS en laisser 10 par exemple par rubrique (oui, j'ai des rubriques avec un titre qui occupe les 5 colonnes fusionnées pour ce titre).

J'ai fait une macro qui efface les lignes, pas de problèmes... Mais pour supprimer en en gardant 10 ?

Je sais identifier ma dernière ligne utilisée, ma première ligne vide, compter (par soustraction) le nombre de lignes, mais comment supprimer les lignes -10 ?

merci de votre aide

Cordialement

Phillip
 

job75

XLDnaute Barbatruc
Bonjour Phillip, le forum,
VB:
Sub SupprimerLignes()
'conserve 10 lignes sous chaque cellule fusionnée
Dim ncol%, i&, lig&, sup As Range
With ActiveSheet.UsedRange
    ncol = .Columns.Count
    For i = 1 To .Rows.Count
        If .Cells(i, 1).MergeArea.Columns.Count = ncol Then lig = i 'repère les lignes fusionnées
        If lig Then If i > lig + 10 Then Set sup = Union(IIf(sup Is Nothing, .Rows(i), sup), .Rows(i))
    Next
End With
If Not sup Is Nothing Then sup.Delete xlUp
End Sub
A+
 

Phillip

XLDnaute Occasionnel
Bonjour Job75 et le forum,

Cela marche sur un fichier test. J'ai adapté le code à mon cas réel. Je souhaite supprimer les lignes vides à partir d'une certaine ligne.

1) J'ai défini des noms dans ma feuille Dzone et Fzone pour début zone et fin zone
2) Je récupère la ligne de Dzone dans Rdzone
3) Je fais le même compteur i de Rdzone à nlig

Pourtant, lorsque i arrive à Rdzone = 187 dans mon ficheir exemple qui est une ligne fusionnée, il ne détecte pas la fusion et donc lig ne s'incrémente pas et ça ne marche pas... Qu'ai-je loupé ?

PS : Question subsidiaire : pourquoi ne met on jamais de end if ??

Merci

Cordialement

VB:
Sub SupprimerLignes()
''
'''on espere supprimer toutes les lignes vides de chaque section sauf 10
Dim ncol%, i&, lig&, sup As Range
''
'
'conserve 10 lignes sous chaque cellule fusionnée

Set zone = Range("Dzone", "Fzone")
'zone.Select
'Range("Dzone").Select
Rdzone = Range("Dzone").Row
With zone
    ncol = .Columns.Count
    nlig = .Rows.Count + Rdzone
    'ncol = 5
    For i = Rdzone To nlig '.Rows.Count
        If .Cells(i, 1).MergeArea.Columns.Count = ncol Then lig = i 'repère les lignes fusionnées
        If lig Then If i > lig + 10 Then Set sup = Union(IIf(sup Is Nothing, .Rows(i), sup), .Rows(i))
                        
                
        
    Next
End With
If Not sup Is Nothing Then sup.Delete xlUp

End Sub
 

Pièces jointes

  • SupLigvides.xlsx
    232.5 KB · Affichages: 4

job75

XLDnaute Barbatruc
VB:
Sub SupprimerLignes()
'conserve 10 lignes sous chaque cellule fusionnée
Dim ncol%, i&, lig&, sup As Range
With [Zone] 'nom défini
    ncol = .Columns.Count
    For i = 1 To .Rows.Count
        If .Cells(i, 1).MergeArea.Columns.Count = ncol Then lig = i 'repère les lignes fusionnées
        If lig Then If i > lig + 10 Then Set sup = Union(IIf(sup Is Nothing, .Rows(i), sup), .Rows(i))
    Next
End With
If Not sup Is Nothing Then sup.Delete xlUp
End Sub
Le nom "Zone" est défini au départ par la formule =juin!$A$169:$E$305

PS : pas besoin de End If quand toutes les instructions sont sur une seule ligne, c'est classique.
 

Pièces jointes

  • SupLigvides(1).xlsm
    241.7 KB · Affichages: 4

Discussions similaires

Réponses
7
Affichages
327

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa