afficher masquer des lignes code plus rapide

  • Initiateur de la discussion Initiateur de la discussion pascal21
  • 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 !

pascal21

XLDnaute Barbatruc
Code:
Sub masquer_ligne_Vide() 
Dim cel As Range 
For Each cel In Range("nd13:And500")
If cel = "1" Then 
cel.EntireRow.Hidden = True 
End If 
Next
End Sub
bonjour
j'ai ce code pour masquer les lignes dont la colonne nd contient la valeur 1
ça fonctionne mais c'est terriblement lent (env 30sec)
que faut-il fairemodifier pour l'accélérer
merci
 
Dernière édition:
Re : afficher masquer des lignes code plus rapide

Bonjour, pascal21, le Forum,

Tenter l'ajout de ces deux lignes :

Code:
Sub masquer_ligne_Vide()
Dim cel As Range
Application.ScreenUpdating = False
...
Application.ScreenUpdating = True
End Sub

A bientôt 🙂
 
Re : afficher masquer des lignes code plus rapide

bonjour double zéro
merci pour ta réponse
j'avais pensé mettre ces deux lignes après avoir finalisé le code en fait
elles ne servent qu'à masquer l'exécution du code sans l'accélérer
visuellement c'est mieux mais c'est tout
 
Re : afficher masquer des lignes code plus rapide

Bonsour®

🙄 autre méthode :
Code vba:
Sub Masque1()
On Error GoTo fini
With Worksheets(1).Range("nd13:nd500")
Set c = .Find(1, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.EntireRow.Hidden = True
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
fini:
End Sub
 
Re : afficher masquer des lignes code plus rapide

Bonjour Pascal, DoubleZero, mapome,

Oui mapomme puisque Pascal a écrit :

j'ai ce code pour masquer les lignes dont la colonne nd contient la valeur 1

Code:
Sub masquer_ligne_Vide()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
On Error Resume Next 'si Excel 2003 ou si aucune cellule = 1
[ne:ne].Insert
[ne13:ne500].FormulaR1C1 = "=LN(RC[-1]=1)"
[ne13:ne500].SpecialCells(xlCellTypeFormulas, 1).EntireRow.Hidden = True
[ne:ne].Delete
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Edit : salut Modeste geedee, MJ13

A+
 
Dernière édition:
Re : afficher masquer des lignes code plus rapide

Bonjour à tous (Z'êtes nombreux 😀)
Une proposition qui devrait être rapide.
Il faudra quand même penser à réafficher les lignes un jour 😀
VB:
Sub test()
Dim I&, Tb As Variant, Plg As Range
With Sheets("Feuil1")
    Tb = .Range("ND1:ND500")
    For I = 13 To 500
        If Tb(I, 1) = 1 Then Set Plg = Union(.Rows(I), IIf(Plg Is Nothing, .Rows(I), Plg))
    Next I
    If Not Plg Is Nothing Then Plg.Rows.Hidden = True
End With
End Sub

Cordialament
 
Dernière édition:
Re : afficher masquer des lignes code plus rapide

Bonjour à tous,

Oui mapomme puisque Pascal a écrit :
Envoyé par pascal21
j'ai ce code pour masquer les lignes dont la colonne nd contient la valeur 1

En fait, je faisais cette remarque car, en restreignant le code de pascal21 aux 500 lignes de la colonne ND et avec un ScreenUpdating à False, le temps d'excécution ne prend, chez moi, que 0.03 s ce qui n'est quand même pas très lent (même si on peut être plus rapide). Donc je pensais plutôt que la lenteur provenait de la coquille "nd13:And500".

VB:
Sub masquer_ligne_Vide()
Dim cel As Range, T1
  Application.ScreenUpdating = False

  Range("nd3:nd500").EntireRow.Hidden = False
  T1 = Timer
  
  For Each cel In Range("nd3:nd500")
    If cel = "1" Then cel.EntireRow.Hidden = True
  Next
  MsgBox "durée en s : " & Format(Timer - T1, " 0.00")
  
  Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Dernière édition:
Re : afficher masquer des lignes code plus rapide

Re à Tous
Je me faisais une remarque similaire à mapomme ; 30 Secondes pour ça, il y a un loup...
Je pense que la feuille est remplie de formules plus ou moins lourdes.
Une proposition, qui réaffiche ces pauvres lignes 😀 :
VB:
Sub test_2()
Dim I&, Tb As Variant, Plg As Range
With Sheets("Feuil1")
    Tb = .Range("D1:D500")
    For I = 13 To 500
        If Tb(I, 1) = 1 Then Set Plg = Union(.Rows(I), IIf(Plg Is Nothing, .Rows(I), Plg))
    Next I
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    .Rows.Hidden = False
    If Not Plg Is Nothing Then Plg.Rows.Hidden = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End With
End Sub
Cordialement
 
Dernière édition:
Re : afficher masquer des lignes code plus rapide

(re) Bonjour,
Je pense que la feuille est remplie de formules plus ou moins lourdes.

Ce doit être la bonne raison, puisque Pascal constatait que le ScreenUpdate à faux n'accélérait pas le traitement (ce qu'il aurait du faire même petitement)

Du coup, Efgé 🙂, je modifie aussi mon fichier (avec le code de Pascal) en désactivant/activant aussi le calcul auto.
 

Pièces jointes

Dernière édition:
Re : afficher masquer des lignes code plus rapide

Re,

Le même fichier que v2 mais avec un peu plus de 700 formules Sommeprod sur la colonne ND. La différence entre calcul manuel et auto est plus que sensible... (de 0,3 s à 5,6 s)
 

Pièces jointes

Dernière édition:
Re : afficher masquer des lignes code plus rapide

re
j'ai tout essayé les propositions
certaines ne fonctionnaient pas
mais les autres ne faisaient rien gagner
j'ai retenue la version de Mapomme qui l'emporte sur le score de 13.67
je précise qu'il n'y a rien dans les cellules de la zone (aucune formule et encore pas de données)
merci pour vos propositions
le sujet avait l'air de vous passionner mais à l'air hardu
 
- 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
3
Affichages
468
Réponses
2
Affichages
329
Réponses
3
Affichages
777
Réponses
7
Affichages
278
Retour