Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

wblondel

XLDnaute Nouveau
Salut a tous!

J'ai actuellement environ 2000 lignes qui contiennent des donnees, et entre chacune d'elles il y a quelques lignes vides. Je voudrais qu'il n'en reste plus qu'une entre chaque. En resume : je voudrais supprimer chaque ligne vide si et seulement si la ligne precedente est vide aussi.

Comment faire cela?

Merci d'avance.
 
C

Compte Supprimé 979

Guest
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

Bonjour wblondel

Essaye ce code à adapter
Code:
Sub SupLigne()
  Dim Lig As Long, DLig As Long
  ' Avec la feuille
  With Sheets("NomDeLaFeuille")
    ' Récupérer le numéro de la dernière ligne remplie
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Première est à renseigner
    For Lig = DLig To Première Step -1
      ' Vérifier le nombre de valeur de la ligne, si = 0 = vide
      If Application.CountA(Lig) = 0 And Application.CountA(Lig - 1) = 0 Then
        .Rows(Lig).Delete
      End If
    Next Lig
  End With
End Sub

A+
 
Dernière modification par un modérateur:

tashiqi

XLDnaute Occasionnel
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

Est-ce que cela convient à messire ? :D
Code:
Sub test()
Dim a As Long
For a = 2 To Split(UsedRange.Address, "$")(UBound(Split(UsedRange.Address, "$")))
If Application.CountA(Rows(a)) = 0 And Application.CountA(Rows(a - 1)) = 0 Then
Rows(a).Delete
End If
Next
End Sub


EDIT : grilled by BrunoM45 ><
 

job75

XLDnaute Barbatruc
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

Bonjour à tous,

Avec un filtre avancé (élaboré) c'est plus rapide :

Code:
Sub SupprimerLignes()
Dim plage As Range, col%
Application.ScreenUpdating = False
Set plage = ActiveSheet.UsedRange
col = plage.Columns.Count + 1
plage(2, col).FormulaR1C1 = "=COUNTA(RC1:R[1]C[-1])=0"
plage.AdvancedFilter xlFilterInPlace, plage(1, col).Resize(2)
plage.Offset(1).SpecialCells(xlCellTypeVisible).Delete xlUp
plage.AdvancedFilter xlFilterInPlace, ""
plage(2, col) = ""
End Sub
Edit : ajouté Application.ScreenUpdating = False

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

Re,

Ben non, le filtre avancé ce n'est pas la gloire, contrairement à ce que je croyais.

Sur le fichier joint (10000 lignes), j'ai testée la macro de Bruno (un chouia corrigée).

Chez moi (Win7-Excel 2010) elle s'exécute en 0,9 s contre 2,4 s pour ma macro !!

Fichier joint.

A+
 

Pièces jointes

  • Supprimer lignes(1).zip
    172.3 KB · Affichages: 43

job75

XLDnaute Barbatruc
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

Re,

Avec 2000 lignes (400 lignes supprimées) les 2 macros sont à peu près équivalentes (0,15 s).

Fichier (2).

A+
 

Pièces jointes

  • Supprimer lignes(2).xls
    205 KB · Affichages: 34
  • Supprimer lignes(2).xls
    205 KB · Affichages: 38
  • Supprimer lignes(2).xls
    205 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

Bonjour le fil, le forum,

En entrant la formule sur toute la colonne et un tri :

Code:
Sub SupprimerLignes()
Dim plage As Range, col%
Application.ScreenUpdating = False
Set plage = ActiveSheet.UsedRange
col = plage.Columns.Count + 1
plage.Columns(col).FormulaR1C1 = "=COUNTA(RC1:R[1]C[-1])=0"
plage.Columns(col) = plage.Columns(col).Value 'uniquement les valeurs
plage.Resize(, col).Sort plage(1, col), xlAscending 'tri
plage.Columns(col).ClearContents
End Sub
Sur 10000 lignes on descend à 0,4 seconde.

Fichier (3).

A+
 

Pièces jointes

  • Supprimer lignes(3).zip
    175.4 KB · Affichages: 44
Dernière édition:

wblondel

XLDnaute Nouveau
Re : Supprimer une ligne vide seulement si elle est precedee d'une autre ligne vide

De toute maniere, c'est juste pour l'excuter une seule fois, donc que ca dure 0,5 sec ou 4 sec ca ne m'importe peu :p ! En revanche vos differents codes me serviront pour apprendre !

Merci encore ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 220
Messages
2 086 381
Membres
103 198
dernier inscrit
CACCIATORE