• Initiateur de la discussion Initiateur de la discussion olivier1870
  • Date de début Date de début

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 !

O

olivier1870

Guest
Bonjour,

j observe le phenomene suivant:

j ai une macro parcourant une feuille excel ligne par ligne. Cette macro est en principe tres rapide. Sitot que je selectionne la zone d impression, la macro devient tres lente. J interprete cela comme le fait qu a chaque modification de ligne p. ex., la zone d impression est recalculee. Ce que je ne comprend en revanche pas est que le probleme persiste une fois la zone d impression deselectionnee. Quelqu un aurait il une astuce?

D avance je vous remercie
 
Re : macro ralentie

Non, cela ne suffit malheureusement pas. Voici le code. C est bien la commande "ligne.EntireRow.Hidden = True" qui ralentit le tout. L idee de la macro est simplement de cacher des lignes indexees par "1" dans la colonne A.

Sub Macro3()
'



Application.Calculation = xlCalculationManual




Application.ScreenUpdating = False 'desactive le rafraichissement de l ecran
For Each ligne In ActiveSheet.UsedRange.Rows
If ligne.Cells(1, 1).Value = "1" Then
'si la cellule de la colonne 1 est 1, la ligne est masquée
ligne.EntireRow.Hidden = True
End If
Next
Range("A1").Select

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True 'reactive le rafraichissement de l ecran
End Sub
 
Re : macro ralentie

Bonjour, essaie ceci, inutile de balayer toute la zone, la colonne A suffit :

Application.ScreenUpdating = False
For i = [a65000].End(xlUp).Row To 1 Step -1
With Cells(i, 1)
If .Value = "1" Then .EntireRow.Hidden = True
End With
Next

Edit : Bonjour Pierrot, collision!
 
Re : macro ralentie

Re, bonjour bhbh, Epaf

essaye peut être comme ceci :

Code:
Sub test()
Dim c As Range, zi As String
zi = ActiveSheet.PageSetup.PrintArea
ActiveSheet.PageSetup.PrintArea = ""
For Each c In Range("A1:A" & Range("A65536").End(xlUp).Row)
    If c.Value = "1" Then c.EntireRow.Hidden = True
Next c
ActiveSheet.PageSetup.PrintArea = zi
End Sub

@+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
367
A
  • Question Question
Réponses
3
Affichages
2 K
J
  • Question Question
Réponses
17
Affichages
5 K
Juretig
J
N
Réponses
6
Affichages
702
K
Réponses
0
Affichages
3 K
K
T
Réponses
5
Affichages
2 K
J
Réponses
2
Affichages
7 K
J
Retour