Lenteur à masquer / démasquer des lignes

GADENSEB

XLDnaute Impliqué
Bonjour,
J'ai besoin de votre aide

Sur une feuille, deux boutons "Cb_DETAIL" et "Cb_GROUPES" m'aident à faire masquer ou non certaines lignes.


Je passe par des plages nommées non contigues "Tb_L_Details" et "Tb_L_Groupes"

Le code est super lent .... 1 minute environ pour faire un des deux masquage....
En gros chacun masque 50/60 lignes sans recalcul derriere
J'ai mis le blocqage/déblocage du recalcul mais rien n'y fait

je pige pas ....
Qqn aurais une idée ?

Bonne am

Seb


Code:
Private Sub Cb_DETAILS_Click()
Bloque_Recalcul
Range("Tb_L_Details").Select

If Cb_DETAILS = True Then
Cb_GROUPES = False
Selection.EntireRow.Hidden = False
Else
Selection.EntireRow.Hidden = True
End If
Lance_Recalcul
Range("D5").Select

End Sub

Code:
Private Sub Cb_GROUPES_Click()
Bloque_Recalcul
Range("Tb_L_Groupes").Select

If Cb_GROUPES = True Then

Cb_DETAILS = False
Selection.EntireRow.Hidden = True
Else
Selection.EntireRow.Hidden = False
End If
Lance_Recalcul
Range("D5").Select
End Sub
 

GADENSEB

XLDnaute Impliqué
Re : Lenteur à masquer / démasquer des lignes

Hello

en fait mes macros sont

Code:
Sub Bloque_Recalcul()
' Réglage du recalcul sur mode manuel
Dim ModeRecalcul As Long
ModeRecalcul = Application.Calculation
Application.Calculation = xlCalculationAutomatic
End Sub

Code:
Sub Lance_Recalcul()
' Rétablissement du mode de recalcul d'origine
Application.Calculation = xlCalculationAutomatic
End Sub

C'est pourquoi je les appelles avec Bloque_Recalcul et Lance_Recalcul

Mais je ne pense pas que le probléme soit uniquement là !

Mais c'est vrai que cela va plus vite sans les données qui font les calculs (un grand nombre de sommeprod)


Je pense que le fait de

Code:
Cb_DETAILS = True Then
Cb_GROUPES = False

Du coup je lance la procédure

Code:
Private Sub Cb_GROUPES_Click()

du coup il fait des boucles ...... et le processus est long
Purée je sais pas si j'ai été clair .....

Du coup comment simplifier ma procédure :

Si je valide Cb_DETAIL alors je démasque Tb_L_Details et je dévalide Cb_GROUPES
..... et ainsi de suite ....

Voici le code avec tes modifs
et mon fichier de demo

Code:
Private Sub Cb_DETAILS_Click()

Range("Tb_L_Details").Select

If Cb_DETAILS = True Then
Application.Calculation = xlCalculationManual
Cb_GROUPES = False
Selection.EntireRow.Hidden = False
Else
Selection.EntireRow.Hidden = True
End If
Application.Calculation = xlCalculationAutomatic
Range("D5").Select

End Sub

Private Sub Cb_GROUPES_Click()
Range("Tb_L_Groupes").Select

If Cb_GROUPES = True Then
Application.Calculation = xlCalculationManual
Cb_DETAILS = False
Selection.EntireRow.Hidden = True
Else
Selection.EntireRow.Hidden = False
End If
Application.Calculation = xlCalculationAutomatic
Range("D5").Select
End Sub
 

Pièces jointes

  • BUDGET - DEMO.xlsm
    96.8 KB · Affichages: 31
  • BUDGET - DEMO.xlsm
    96.8 KB · Affichages: 35
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Lenteur à masquer / démasquer des lignes

Bonjour à tous,

Il est étonnant que tu aies 5 feuilles de type ThisWorkBook :

Capture 1.png

A+ à tous
 

Pièces jointes

  • Capture 1.png
    Capture 1.png
    2.6 KB · Affichages: 42

GADENSEB

XLDnaute Impliqué
Re : Lenteur à masquer / démasquer des lignes

Fait !

C'est plus simple et cela m'a corrigé un autre soucis ....thanks

Mais tjrs coincé sur le temps long du code

Je l'ai un peu modifié le code

Pour celui-ci, c'est rapide

Code:
Private Sub Cb_DETAILS_Click()

If Cb_DETAILS = True Then
Application.ScreenUpdating = False
Range("Tb_L_Details").Select
Application.Calculation = xlCalculationManual
Cb_GROUPES = False
Selection.EntireRow.Hidden = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Range("D5").Select
End If


If Cb_DETAILS = False Then
Application.ScreenUpdating = False
Range("Tb_L_Details").Select
Application.Calculation = xlCalculationManual
Cb_GROUPES = False
Selection.EntireRow.Hidden = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Range("D5").Select
End If

End Sub

Mais pas pour celui là ...

Code:
Private Sub Cb_GROUPES_Click()


If Cb_GROUPES = True Then
Application.ScreenUpdating = False
Range("Tb_L_Details").Select
Application.Calculation = xlCalculationManual
Cb_DETAILS = False
Selection.EntireRow.Hidden = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Range("D5").Select
End If


If Cb_GROUPES = False Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Cells.Select
Selection.EntireRow.Hidden = False
Range("Tb_L_Details").Select
Cb_DETAILS = True
Cb_DETAILS_Click
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Range("D5").Select
End If

End Sub

Tu as une idée ??

Bonne soirée
Seb
 

Pièces jointes

  • BUDGET - DEMO.xlsm
    87.2 KB · Affichages: 28
  • BUDGET - DEMO.xlsm
    87.2 KB · Affichages: 27
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Lenteur à masquer / démasquer des lignes

Bonjour GADENSEB, Jean-Claude

Pour éviter cette lenteur (quoique tout est relatif sur un XL2007, je ne trouve pas cela si long), tu peux rajouter une colonne avec des codes, type 1, 2). Tu pourras ainsi filtrer normalement plus rapidement et en plus pas besoin de code VBA trop compliqué.

Un code de ce type devrait suffire:

Code:
Sub Macro1()
    ActiveSheet.Range("$A$3:$C$206").AutoFilter Field:=1, Criteria1:="2"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 080
Membres
103 457
dernier inscrit
fab2614