Je vois plusieurs articles sur la suppression de lignes vides dans une plage et d'autres sur la suppression de lignes de table basées sur une seule colonne vide, mais rien sur la suppression de lignes de table entièrement vides.

Quelle est la manière la plus rapide de procéder?

J'ai publié ma solution ci-dessous pour aider les autres, mais je suis intéressé de voir si quelqu'un a une méthode plus rapide.

1
ChrisB 2 août 2017 à 21:57

2 réponses

Cela devrait fonctionner. Je ne sais pas si c'est plus rapide, mais c'est une autre façon de le faire:

Sub delete_blank_table_rows()
Dim Rng As Range, tempRng As Range
Set Rng = Range("Table1")    ' Change as necessary
Set Rng = Range(Cells(Rng.Rows(1).Row, Rng.Columns(1).Column), Cells(Rng.Rows(Rng.Rows.Count).Row, Rng.Columns(Rng.Columns.Count).Column))

Dim i       As Long
For i = Rng.Rows.Count To 1 Step -1
    Cells(Rng.Rows(i).Row, Rng.Columns(1).Column).Select
    Set tempRng = Range(Cells(Rng.Rows(i).Row, Rng.Columns(1).Column), Cells(Rng.Rows(i).Row, Rng.Columns(Rng.Columns.Count).Column))

    If WorksheetFunction.CountA(tempRng) = 0 Then
        tempRng.Delete shift:=xlUp
    End If

Next i
End Sub

Edit: Et bien sûr, pour l'accélérer, vous devez désactiver la mise à jour de l'écran, le calcul pendant son exécution.

1
BruceWayne 2 août 2017 à 20:00

Je pense que cela peut être plus rapide (vous pouvez modifier lastrow et lastcol pour correspondre aux dimensions de votre table):

Sub delete_rows_blank2()

t = 1
lastrow = ActiveSheet.UsedRange.Rows.Count
lastcol = ActiveSheet.UsedRange.Columns.Count

Do Until t = lastrow

For j = 1 To lastcol

    If Cells(t, j) = "" Then

        j = j + 1

            If j = lastcol Then
            Rows(t).Delete
            t = t + 1
            End If

    Else

        t = t + 1

    End If

Next

Loop

End Sub
0
user8608712user8608712 27 févr. 2018 à 15:05