XL 2016 Accélérer une macro

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
😉
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.
 
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
😉
 
Bonjour Sylvanu,
j'ai essayer avec et sans :
MESSAGE EXCEL.PNG


Bonjour Patricktoulon,
Merci, c'est clairement plus rapide avec ta méthode.
Bravo ;-)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
163
Réponses
4
Affichages
243
Retour