XL 2013 Affichage lignes très long

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,

LOL ça faisait longtemps car grâce à vous toutes et tous, j'ai pu apprendre et solutionner beaucoup de mes soucis ;)

Me voilà à nouveau devant vous pour un souci d'affichage de lignes :

Mon fichier de travail peut contenir en moyenne jusqu'à + ou - 50 000 lignes.

Pour notre gestion, selon des critères, on affiche les lignes qui sont utiles à afficher.
Mais c'est très long ...
Pour afficher toutes les lignes, ça prend quasiment 2 minutes.
Voici ci-dessous mon code :
Code:
Sub LignesSuivis70Trie()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
 
    Sheets("SuivisAppels").Select
    ActiveSheet.Unprotect Password:=""
    Rows("7:50000").Hidden = False

    Range("X1").Select
    ActiveCell.FormulaR1C1 = _
        "=CONCATENATE(""à traiter"",""                          "",R5C32-R5C35)"
    Range("V1").Select
    ActiveCell.FormulaR1C1 = "=R5C35"
     
    With Worksheets("SuivisAppels") 'Nom feuille à adapter au besoin
     With .Range("a7:az" & .Range("t65536").End(xlUp).Row)
    .Sort key1:=.Cells(1, 20), order1:=xlAscending, Header:=xlNo
    End With
    End With
 
    ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlNoRestrictions
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
    Call Remonte
End Sub

Vu la taille du fichier et les infos confidentielles, il m'est difficile de joindre mon fichier.
Auriez-vous une idée pour réduire le temps de traitement ?
Avec mes remerciements,
Je vous souhaite à toutes et à tous un très bon WE,
Amicalement,
Lionel,
 

Papou-net

XLDnaute Barbatruc
Bonjour Lionel,

Heureux de te revoir par ici.

Voici comment j'écrirais ton code, sachant qu'il n'est pas nécessaire de sélectionner des cellules pour les manipuler:

Sub LignesSuivis70Trie()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
With Sheets("SuivisAppels")
.Unprotect
.Rows("7:50000").Hidden = False
.Range("X1").FormulaR1C1 = "=CONCATENATE(""à traiter"","" "",R5C32-R5C35)"
.Range("V1").FormulaR1C1 = "=R5C35"
End With
With Worksheets("SuivisAppels") 'Nom feuille à adapter au besoin
.Range("a7:az" & .Range("t65536").End(xlUp).Row).Sort _
key1:=.Cells(1, 20), order1:=xlAscending, Header:=xlNo
End With
ActiveSheet.Protect
ActiveSheet.EnableSelection = xlNoRestrictions
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Call Remonte
End Sub


Je ne pense pas que cette proposition améliorera la rapidité du traitement mais, par contre, il serait intéressant de connaître la teneur de la procédure "Remonte"

Cordialement.
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Papou-net,

Merci pour cette rapide réponse ;)
Voici ci-dessous le code Remonte :
Code:
Sub Remonte1()

    If [y5] = "oubli" Then
     Call blocage
    Exit Sub
    End If

    ActiveWindow.LargeScroll Down:=-1
End Sub

et code Blocage :
Code:
Sub blocage1()
Application.EnableEvents = False
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:=""
    Target.Offset(0, 17).Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-18]<2,"""",IF(AND(AND(AND(AND(AND(AND(AND(RC[-16]<>"""",RC[-15]<>"""",RC[-13]<>"""",RC[-9]<>"""",RC[-8]<>"""",RC[-7]<>"""",RC[-6]<>"""",RC[-5]<>0))))))),0,1))"
ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoRestrictions
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Je suis obligé de sortir pour environ 1 heure, je regarde dès mon retour.
Amicalement,
Lionel,
 

Papou-net

XLDnaute Barbatruc
RE

Celà semble confirmer ce que je supposais: le fait d'appliquer des formules sur ~50000 lignes doit fortement ralentir le traitement.

Si tu pouvais joindre une copie allégée de ton fichier (une centaine de lignes par exemple) et sans données confidentielles, çà m'aiderait à vérifier si une solution par macro ne serait pas préférable.

Je suis à mon tour obligé de sortir, mais je lirai ta réponse dès mon retour.

Cordialement.
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Papou-net,
Bonjour à toutes et à tous,

Tout, je suis désolé de ne pas être revenu plus tôt ..... soucis ... soucis LOL
Suite à tes réponses, j'ai fais un fichier test de 50.000 lignes sur 44 colonnes (réplique de mon fichier de travail) qui ne contient que des valeurs (pas de formules) et là, masquage et affichage sont instantanés.

Je suis donc en train de travailler sur mon fichier qui ne contient également que des formules.
Il y a forcément un truc que je n'ai pas vu ....... o_O

Quand j'aurai la résultat, je reviendrai.
Bonne journée à toutes et à tous,
Amicalement,
Lionel,
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Papou-net,

Me voilà de retour après "trop longtemps" LOL.
- Mes occupations et la création d'un fichier test.
- Puis mes essais et recherches pour tenter de trouver d'où provient la temps long d'affichages des lignes,
Beaucoup de temps ....

Mais j'ai trouvé :confused:
Le fichier test joint contient deux feuilles :
- SuivisAppels origine,
- SuivisAppels Modifie,

J'ai donc reproduit les codes pour qu'ils fonctionnent pour les 2 feuilles.
SuivisAppels Modifie = temps de réaction rapide donc normal pour moi
SuivisAppels Modifie = Temps très long (surtout que nous avons besoin de répéter l'action des dizaines de fois pas jour).

J'ai testé en modifiant les contenus de chaque colonne de texte ou nombre et en exécutant le code à chaque étape.

Résultat :
Ce sont les textes des annonces qui plombent le temps d'exécution.

Je ne comprends pourquoi ??? :confused:
Bonne fin de dimanche à toutes et à tous,
Amicalement,
Lionel
 

Pièces jointes

  • Test affiche masque lignes2.zip
    3.2 MB · Affichages: 54
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

arthour973
Un fichier exemple de 4,6 Mo c'est un chouia (en tout cas à mon sens) trop volumineux.
On a besoin que de l'essentiel et sinon on peut prendre le temps de zipper son fichier ;)

Pourquoi tous ces Select encore là sont-ils?
Et cette macro est censé produire quel effet?
VB:
Sub blocage()
    Sheets("SuivisAppels Modifie").Select
    'Oubli_date.Show
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    
    Range("I7:t50000").Select
        Selection.SpecialCells(xlCellTypeBlanks).Select
        ActiveWindow.ScrollRow = Selection.Row

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonsoir JM,

Merci d'être encore là,

C'est vrai, puisque j'ai souhaité mettre un exemple "significatif", il ne pouvait pas être moins gros.
Je n'ai pas pensé à le zipper.
Le fait le faire et le remplacer.

Le code blocage est fait pour bloquer la saisie si une ligne n'est pas complètement remplie.
Dans le fichier test, puisque toutes les lignes sont complètent, la condition n'est pas remplie et il est sans effet.
Bonne fin de dimanche :)
Amicalement,
Lionel,
 

Staple1600

XLDnaute Barbatruc
Re

@arthour973
Zippé ou pas, chez moi, ton fichier plante mon Excel.
D'où mon premier message ;)
Donc si on pouvait disposer d'un fichier minimal au niveau poids mais avec tout le code VBA, je pourrais aller plus loin dans mes tests.
Pour le moment, je me dirige vers mon bol de soupe à l'oignon et laisse ma place à mes petits camarades de jeu ;)
 

Staple1600

XLDnaute Barbatruc
Re

@arthour973
Mieux vaut prévenir que guérir
Exemple de données non fictives
"votre disposition pour toute information complémentaire tel: 068xx2xx44 "

Comme le dit la charte: "aucune donnée confidentielle"
Sans oublier
"6 – Toute pièce jointe doit respecter les lois en vigueur (copyright, etc)."

En plus sans ces données ton classeur serait encore plus léger.;)
 

Discussions similaires

Réponses
12
Affichages
519
Réponses
4
Affichages
466

Statistiques des forums

Discussions
315 095
Messages
2 116 167
Membres
112 675
dernier inscrit
Tazra_IMOU