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 ligne1
(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.