Supprimer les lignes vides dans une feuille Excel, Excel VBA

Supprimer les lignes vides dans une feuille Excel, Excel VBA

Voici un code détaillé en VBA pour supprimer les lignes vides dans une feuille Excel, avec une explication approfondie.
Code VBA pour Supprimer les Lignes Vides

Sub DeleteBlankRows()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim r As Long
    Dim rng As Range
    ' Définir la feuille de travail active
    Set ws = ActiveSheet
    ' Trouver la dernière ligne utilisée dans la feuille
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    ' Parcourir les lignes de la dernière à la première (pour éviter de sauter des lignes)
    For r = lastRow To 1 Step -1
        ' Vérifier si toute la ligne est vide
        If Application.WorksheetFunction.CountA(ws.Rows(r)) = 0 Then
            ws.Rows(r).Delete
        End If
    Next r
    ' Libérer la mémoire
    Set ws = Nothing
End Sub

Explication Détailée du Code
1. Déclaration des Variables

Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim rng As Range
  • ws : Stocke la référence de la feuille de calcul.
  • lastRow : Stocke la dernière ligne utilisée dans la feuille.
  • r : Utilisé comme compteur pour itérer à travers les lignes.
  • rng : (Non utilisé dans cet exemple, mais peut être utile pour sélectionner une plage).

2. Définir la Feuille Active
Set ws = ActiveSheet

  • Cela définit la feuille de travail active sur la variable ws, assurant que l’on travaille sur la bonne feuille.

3. Trouver la Dernière Ligne Utilisée
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

  • ws.Rows.Count renvoie le nombre total de lignes dans la feuille (par exemple, 1 048 576 pour Excel 2007+).
  • .End(xlUp) remonte depuis la dernière ligne de la colonne A jusqu’à ce qu’il trouve une cellule non vide.
  • Cette technique permet de trouver la dernière ligne utilisée dans la feuille.

4. Boucle à Travers les Lignes (De Bas en Haut)
For r = lastRow To 1 Step -1

  • Nous parcourons de bas en haut, de la ligne lastRow à la ligne 1 (Step -1 permet de ne pas sauter de lignes).
  • Si nous parcourions de haut en bas, la suppression des lignes déplacerait les numéros de ligne, ce qui entraînerait l’oubli de certaines lignes vides.

5. Vérifier si la Ligne est Vide
If Application.WorksheetFunction.CountA(ws.Rows(r)) = 0 Then

  • CountA(ws.Rows(r)) compte le nombre de cellules non vides dans toute la ligne.
  • Si le résultat est 0, cela signifie que la ligne est complètement vide.

6. Supprimer la Ligne Vide
ws.Rows(r).Delete

  • Cette ligne supprime la ligne entière lorsqu’elle est vide.

7. Libérer la Mémoire
Set ws = Nothing

  • Cette ligne est utilisée pour libérer la mémoire après l’exécution de la macro.

Méthode Alternative Utilisant AutoFiltre
Cette méthode est plus rapide pour les grandes bases de données.

Sub DeleteBlankRowsWithFilter()
    Dim ws As Worksheet
    Dim rng As Range
    ' Définir la feuille de travail
    Set ws = ActiveSheet
    ' Définir la plage couvrant toutes les lignes utilisées
    On Error Resume Next
    Set rng = ws.UsedRange
    On Error GoTo 0
    ' Vérifier si la plage est valide
    If Not rng Is Nothing Then
        ' Appliquer un filtre pour trouver les lignes vides dans la colonne A (modifiez si nécessaire)
        rng.AutoFilter Field:=1, Criteria1:="="
        ' Supprimer les lignes visibles après le filtrage
        On Error Resume Next
        ws.Rows("2:" & ws.Rows.Count).SpecialCells(xlCellTypeVisible).Delete
        On Error GoTo 0
        ' Désactiver le filtre
        ws.AutoFilterMode = False
    End If
    ' Libérer la mémoire
    Set ws = Nothing
End Sub

Avantages de la Méthode AutoFiltre
Plus rapide pour les grandes bases de données
Évite de parcourir chaque ligne
Efficace pour les grandes feuilles de calcul

Conclusion

  • Pour les petites bases de données, la première méthode (boucle à travers les lignes) fonctionne bien.
  • Pour les grandes bases de données, la méthode AutoFiltre est beaucoup plus rapide et efficace.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x