Ce bout de code devrait faire l'affaire.
Il a l'intérêt d'être universel : Il cache toutes les lignes vides, après examen de toutes les lignes.
En revanche, Il n'est pas très rapide.
Dim sheet As Worksheet
Dim cell As Range
Dim line As Range
Dim i As Long
Dim blank As Boolean
Set sheet = Worksheets("Feuil1")
For i = 1 To 65536
Set line = sheet.Rows(i)
blank = True
For Each cell In line.Cells
If cell.Formula <> "" Then
blank = False
Exit For
End If
Next
Application.StatusBar = i \ 656 & "%"
line.Hidden = blank
Next
Application.StatusBar = False
Alors il serait judicieux de sélectionner un sous-ensemble de colonnes dans lesquelles il suffirait de regarder pour savoir si la ligne est vide ou pas.
Dim sheet As Worksheet
Dim cell As Range
Dim chk_z As Range ' zone de vérification
Dim i As Long
Dim blank As Boolean
' // A adapter à la situation
Set sheet = Worksheets("Feuil1")
For i = 1 To 65536
' // A adapter à la situation -------------
Set chk_z = Union(sheet.Cells(2, i), sheet.Cells(4, i))
blank = True
For Each cell In chk_z.Cells
If cell.Formula <> "" Then
blank = False
Exit For
End If
Next
Application.StatusBar = i \ 656 & "%"
chk_z.EntireRow.Hidden = blank
Next
Application.StatusBar = False
Voici la version mono-colonne
Dim sheet As Worksheet
Dim cell As Range
Dim i As Long
Set sheet = Worksheets("Feuil1")
For Each cell In sheet.Range("B1:B65536")
cell.EntireRow.Hidden = cell.Formula = ""
Application.StatusBar = i \ 656 & "%"
Next
Application.StatusBar = False
Comment ça, c'est trop long ?
Oki, retirons donc la lise à jour automatique de l'affichage.
On perd malheureusement le compteur dans la barre d'état.
Comme sur les traitements très longs, j'aime à savoir où j'en suis, j'ajoute quand même les lignes 20 à 24.
Dim sheet As Worksheet
Dim cell As Range
Dim line As Range
Dim i As Long
Dim blank As Boolean
Set sheet = Worksheets("Feuil1")
Application.ScreenUpdating = False
For i = 1 To 65536
Set line = sheet.Rows(i)
blank = True
For Each cell In line.Cells
If cell.Formula <> "" Then
blank = False
Exit For
End If
Next
line.Hidden = blank
If i Mod 300 = 0 Then
Application.ScreenUpdating = True
Application.StatusBar = i \ 656 & "% [" & i & "]"
Application.ScreenUpdating = False
End If
Next
Application.ScreenUpdating = True
---------------------------------------------------------------
Maintenant, voyons de plus près les soucis de T3tSuO.
Il y a trois zones dans ta feuille, de la ligne 1 à la 2499, de la 2500 à la 4999 et de la 5000 à la 65536.
On va donc se mettre sur la dernière ligne de chaque zone et remonter, avec une technique très proche de celle proposée par kiki.
Dim F1 As Worksheet
Dim cell1 As Range
Dim cell2 As Range
' // A adapter --------------
Set F1 = Worksheets("Feuil1")
Set cell2 = F1.Range("A2499")
Set cell1 = c2.End(xlUp).Offset(1)
F1.Range(cell1, cell2).EntireRow.Hidden = True
A refaire pour les deux autres zones.