Office 365 Masquer lignes vides

Claudy

XLDnaute Impliqué
Bonsoir
pour masquer des lignes vides , j'ai sorti la macro suivante:

Sub Masquer_lignes()


For Each cel In Range("A1:A30")
If cel.Value = "" Then
cel.EntireRow.Hidden = True
End If
Next
End Sub

Mais cela me semble assez long, sachant que je devrai travailler sur +/- 150 lignes.

merci d'avance pour vos lumières,
Claudy
 

sylvanu

XLDnaute Impliqué
Supporter XLD
Bonsoir Claudy,
En rajoutant quelques lignes, on va 100 fois plus vite :
VB:
Sub Masquer_lignes()
Application.ScreenUpdating = False
Application.Calculation = xlManual
T0 = Timer
    For Each cel In Range("A2:A300")
        If cel.Value = "" Then
            cel.EntireRow.Hidden = True
        End If
    Next
MsgBox Timer - T0
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sur mon PC sans les blocages, cela met 3.95s avec cela tombe à 0.03125s;
Essayez, mettez mes 2 premières lignes en commentaires, puis rééssayez en remettant dans l'état.
 

sylvanu

XLDnaute Impliqué
Supporter XLD
Sorry, i don't understand.
Je remettais les lignes dans leur état de départ, c'est pour ça qu'à la fin vous ne voyez pas de différences.:) . C'est ça qui vous posait problème ?
Le même sans remettre en état à la fin.
Mais obtenez vous un gain en vitesse ? :)
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Claudy, sylvanu

Deux variantes
VB:
Sub Masquer_lignes_B()
Application.ScreenUpdating = False
Application.Calculation = xlManual
T0 = Timer
    For Each cel In Range("A2:A300")
      cel.EntireRow.Hidden = IsEmpty(cel)
    Next
MsgBox Timer - T0
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub MasquerDemasquer_lignes_C()
Application.ScreenUpdating = False
Application.Calculation = xlManual
T0 = Timer
On Error Resume Next
Range("A2:A300").SpecialCells(4).Rows.Hidden = Not Range("A2:A300").SpecialCells(4).Rows.Hidden
MsgBox Timer - T0
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
La dernière offre un petit bonus
Le 1ère exécution masque les lignes, la seconde exécution les démasque
Une macro deux en un , quoi ;)
 

sylvanu

XLDnaute Impliqué
Supporter XLD
Bonsoir Claudy, Bonsoir Staple,
Juste pour le plaisir de la polémique :
cel.EntireRow.Hidden = IsEmpty(cel) est plus long que cel.EntireRow.Hidden = True : 35.9ms pour IsEmpty contre 31.4ms pour True.
;):)
Bon allez, bonne nuit.
 

Staple1600

XLDnaute Barbatruc
Re

Peut-être mais c'était juste pour le plaisir de la variante (et pour supprimer un If/End If)
Et quid de :
VB:
Sub Masquer_Ligne_D()
Application.ScreenUpdating = False
Application.Calculation = xlManual
T0 = Timer
    For Each cel In Range("A2:A300")
      cel.Rows.Hidden = cel = ""
    Next
MsgBox Timer - T0
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub Masquer_Ligne_E()
Application.ScreenUpdating = False
Application.Calculation = xlManual
T0 = Timer
    For Each cel In Range("A2:A300")
    If Not Len(cel) Then cel.Rows.Hidden = True
    Next
MsgBox Timer - T0
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas