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.Countrenvoie 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-1permet 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.