Macro supprimer lignes vides

good57

XLDnaute Occasionnel
Bonjour à tous,

Voilà la macro qui me permet de supprimer les lignes vides sur la plage A7:AR500.

Mon problème est qu'elle ne fonctionne pas car même si certaines lignes sont vides, elle peuvent quand même contenir des formules.
Comment faire pour que ma macro supprime toutes ces lignes vides en ignorant la présence des formules.


Sub SupprimerLignesVides()

ActiveSheet.Range("A7:AR500").Select
derniereligne = ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For d = derniereligne To 1 Step -1
If Application.CountA(Rows(d)) = Empty Then Rows(d).Delete
Next d

Range("A1").Select

End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Macro supprimer lignes vides

Bonjour à tous

good57
Voir ce que cette macro donne sur ton fichier
Code:
Sub SupprimerLignesVideSaufFormules()
Dim derniereligne&, i&
derniereligne = Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
For i = derniereligne To 1 Step -1
If Not Rows(i).SpecialCells(xlCellTypeFormulas, 23).Count > 0 Then
If Application.CountA(Rows(i)) = 0 Then
Rows(i).EntireRow.Delete
End If
End If
Next
End Sub
 

job75

XLDnaute Barbatruc
Re : Macro supprimer lignes vides

Bonjour good57, Tentative, JM,

Avec le filtre avancé :

Code:
Sub SupprimerLignesVides()
Dim P As Range, a$
Application.ScreenUpdating = False
Rows(1).Insert
Set P = Range([A1], ActiveSheet.UsedRange)
P(1) = "Titre1": P(1).AutoFill P.Rows(1)
a = P.Rows(2).Address(0, 0)
P(2, P.Columns.Count + 1) = "=SUMPRODUCT(N(" & a & "<>""""))=0"
P.AdvancedFilter xlFilterInPlace, P(1, P.Columns.Count + 1).Resize(2)
P.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
P.AdvancedFilter xlFilterInPlace, ""
Columns(P.Columns.Count + 1).Delete
Rows(1).Delete
Set P = ActiveSheet.UsedRange 'MAJ des barres de défilement
End Sub
Edit : ajouté la MAJ des barres de défilement

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro supprimer lignes vides

Re, hello Docmarti,

Au post #1 on parle de la plage A7:AR500.

Si l'on ne veut pas supprimer les lignes vides en dehors des lignes 7:500 :

Code:
Sub SupprimerLignesVides()
Dim P As Range, a$
Set P = Intersect(Rows("7:500"), ActiveSheet.UsedRange)
If P Is Nothing Then Exit Sub
Application.ScreenUpdating = False
P.Rows(1).EntireRow.Insert
Set P = Union(P, P.Rows(0))
P(1) = "Titre1": P(1).AutoFill P.Rows(1)
a = P.Rows(2).Address(0, 0)
P(2, P.Columns.Count + 1) = "=SUMPRODUCT(N(" & a & "<>""""))=0"
P.AdvancedFilter xlFilterInPlace, P(1, P.Columns.Count + 1).Resize(2)
P.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
P.AdvancedFilter xlFilterInPlace, ""
P(2, P.Columns.Count + 1) = ""
P.Rows(1).EntireRow.Delete
Set P = ActiveSheet.UsedRange 'MAJ des barres de défilement
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Macro supprimer lignes vides

Re,

J'ai proposé la suppression avec filtre avancé ne connaissant pas le fichier à traiter car elle conserve les hauteurs des lignes.

Mais il faut savoir que s'il y a beaucoup de zones disjointes à supprimer cela prend beaucoup de temps.

La suppression avec tri est alors beaucoup plus rapide.

Voyez le fichier joint avec 10000 lignes et ces 2 macros :

Code:
Sub SuppressionAvecFiltreAvancé()
Dim t, P As Range, a$
t = Timer
Set P = ActiveSheet.UsedRange
Application.ScreenUpdating = False
a = P.Rows(2).Address(0, 0)
P(2, P.Columns.Count + 1) = "=SUMPRODUCT(N(" & a & "<>""""))=0"
P.AdvancedFilter xlFilterInPlace, P(1, P.Columns.Count + 1).Resize(2)
P.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
P.AdvancedFilter xlFilterInPlace, ""
P(2, P.Columns.Count + 1) = ""
Set P = ActiveSheet.UsedRange 'MAJ des barres de défilement
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub

Sub SuppressionAvecTri()
Dim t, P As Range
t = Timer
Set P = ActiveSheet.UsedRange
Application.ScreenUpdating = False
With P.Columns(P.Columns.Count + 1)
  .FormulaR1C1 = "=1/SUMPRODUCT(N(RC1:RC[-1]<>""""))"
  .Value = .Value
  Union(P, .Cells).Sort .Cells, xlAscending 'tri pour accélérer
  On Error Resume Next
  .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
  .Value = ""
End With
Set P = ActiveSheet.UsedRange 'MAJ des barres de défilement
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
Sur Win 8 - Excel 2013 :

- suppression avec filtre avancé => près de 22 secondes

- suppression avec tri => 0,47 seconde.

A+
 

Pièces jointes

  • Suppression lignes vides(1).xlsm
    408.6 KB · Affichages: 71

job75

XLDnaute Barbatruc
Re : Macro supprimer lignes vides

Re,

A la réflexion sur votre plage 7:500 inutile d'utiliser le filtre avancé, utiliser la même macro :

- sans tri s'il y a des hauteurs de lignes différentes à conserver :

Code:
Sub SuppressionLignesSansTri()
Application.ScreenUpdating = False
With Intersect([7:500], ActiveSheet.UsedRange.EntireColumn)
  With .Columns(.Columns.Count + 1)
    .FormulaR1C1 = "=1/SUMPRODUCT(N(TRIM(RC1:RC[-1])<>""""))"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
    .Value = ""
  End With
  With .Parent.UsedRange: End With 'MAJ des barres de défilement
End With
End Sub
- avec tri, plus rapide, si les hauteurs de lignes sont les mêmes :

Code:
Sub SuppressionLignesAvecTri()
Application.ScreenUpdating = False
With Intersect([7:500], ActiveSheet.UsedRange.EntireColumn)
  With .Columns(.Columns.Count + 1)
    .FormulaR1C1 = "=1/SUMPRODUCT(N(TRIM(RC1:RC[-1])<>""""))"
    .Value = .Value
    .EntireRow.Sort .Cells, xlAscending 'tri pour accélérer
    On Error Resume Next
    .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
    .Value = ""
  End With
  With .Parent.UsedRange: End With 'MAJ des barres de défilement
End With
End Sub
Edit : ajouté TRIM (SUPPRESPACE) pour supprimer aussi les lignes qui ne contiennent que des espaces.

Bonne nuit.
 
Dernière édition:

good57

XLDnaute Occasionnel
Re : Macro supprimer lignes vides

Bonjour Tentative.

Mes cellules qui contiennent des formules sont susceptibles d'afficher une valeur mais n'afficheront RIEN et resteront donc vides le cas échéant. Un test sur la somme n'est donc pas la solution.
 

job75

XLDnaute Barbatruc
Re : Macro supprimer lignes vides

Eh bien chapeau bas, même pas un salut pour les autres intervenants.

Quant aux solutions proposées c'est sans doute de la bibine.

Dans ces conditions je vais annuler la solution donnée sur l'autre fil.
 

good57

XLDnaute Occasionnel
Re : Macro supprimer lignes vides

Bonjour job75,

Ne nous énervons pas. Je suis actuellement entrain de tester les différentes solutions.

Mais tant qu'a faire, j'en profite pour vous remercier tous pour votre investissement !
 

Discussions similaires

Statistiques des forums

Discussions
312 213
Messages
2 086 302
Membres
103 174
dernier inscrit
OBUTT