XL 2016 Accélérer une macro

jeromeN95

XLDnaute Impliqué
Bonjour,
pour un classeur multi feuille, j'ai crée une petite macro pour masquer des lignes vides histoire de faire propre automatiquement mais la macro est lente (10 secondes).

Pourriez vous me dire si je peux améliorer, sélection d'une plage plutôt que lignes ?

VB:
'Private Sub Worksheet_Change(ByVal Target As Range)
Private Sub Worksheet_Activate()

Application.ScreenUpdating = 0

Dim cel As Range
Rows("21:40").EntireRow.Hidden = False 'Masque les lignes vide des produits
For Each cel In Range("ContratPret!A21:A40")
If cel = "" Then
cel.EntireRow.Hidden = True
End If
Next

End Sub
 
Solution
bonjour
je sais pas peut être que ta mémoire n'aime pas que tu masque une a une les lignes complètes
et que peut être si tu masque toutes les lignes concernées d'un coup ton UC appréciera

VB:
Private Sub Worksheet_Activate()
    Dim p As Range, Cel As Range
    Application.ScreenUpdating = 0
    Rows("21:40").EntireRow.Hidden = False    'Masque les lignes vide des produits
    For Each Cel In Range("ContratPret!A21:A40")
        If Cel = "" Then If p Is Nothing Then Set p = Cel Else Set p = Union(p, Cel)
    Next
    p.EntireRow.Hidden = True
End Sub
;)

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jérome,
Je ne vois pas comment votre macro peut prendre 10s.
Essayez le contraire :
VB:
Private Sub Worksheet_Activate()
Dim T0 As Long
Application.ScreenUpdating = 0
Dim cel As Range
For Each cel In Range("ContratPret!A21:A40")
If cel = "" Then
    cel.EntireRow.Hidden = True
End If
Next
MsgBox Timer - T0
End Sub
Chez moi les deux types de macros prennent que quelques ms.
Essayez dans ce cas d'ajouter au début avant Dim :
Code:
Application.ScreenUpdating = false
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayAlerts = False
et à la fin avant End Sub
Code:
Application.ScreenUpdating = true
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayAlerts = True
Peut être y e t il un tas de calculs derrière.
 

patricktoulon

XLDnaute Barbatruc
bonjour
je sais pas peut être que ta mémoire n'aime pas que tu masque une a une les lignes complètes
et que peut être si tu masque toutes les lignes concernées d'un coup ton UC appréciera

VB:
Private Sub Worksheet_Activate()
    Dim p As Range, Cel As Range
    Application.ScreenUpdating = 0
    Rows("21:40").EntireRow.Hidden = False    'Masque les lignes vide des produits
    For Each Cel In Range("ContratPret!A21:A40")
        If Cel = "" Then If p Is Nothing Then Set p = Cel Else Set p = Union(p, Cel)
    Next
    p.EntireRow.Hidden = True
End Sub
;)
 

jeromeN95

XLDnaute Impliqué
Bonjour Sylvanu,
j'ai essayer avec et sans :
MESSAGE EXCEL.PNG


Bonjour Patricktoulon,
Merci, c'est clairement plus rapide avec ta méthode.
Bravo ;-)
 

Discussions similaires

Réponses
2
Affichages
156

Statistiques des forums

Discussions
312 361
Messages
2 087 610
Membres
103 606
dernier inscrit
lolo1970