Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 ?
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:

wblondel

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

Merci beaucoup a vous ! Cela fonctionne a merveille
J'ai utilise le code de job75 car c'est le premier que j'ai vu, en 4 secondes c'etait termine !
 

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 ! En revanche vos differents codes me serviront pour apprendre !

Merci encore
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…