Microsoft 365 filtrages temps exécution très long

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 !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
J'ai un gros problème de tris que je ne parviens pas à résoudre malgré mes recherches et mes tentatives.
Je me permets de me tourner une fois de plus vers vous pour demander de l'aide.

Procédure
Mon fichier de travail contient beaucoup de lignes (environ 60.000 actuellement) que je dois classer ,en fonction des urgences de rappels.
Si mon souci retient votre attention, vous le verrez dans le classeur test joint, il y a 5 types de classements des appels (+ Afficher toutes les lignes).
A appeler URGENT :
- aujourd’hui,

A appeler BIENTÔT :
- dép. A Rapp (dates dépassées sur rappels à faire),
- dép. Rép. (dates dépassées sur Répondeurs),
- OK RdV (vendeurs ayant donné le OK RdV au Rappel),
- les autres (s/A Rapp. et Repond.).

J'ai 5 boutons pour les tris permettant d'afficher UNIQUEMENT les lignes de rappels.
Bien évidemment les lignes des rappels URGENTS sont priorisées.

Pour afficher les lignes voulues, j'ai codé en filtrage avec classement (macros AffichageSuivisAppels).

Si je supprime les formatages de toutes les lignes à partir de la ligne 7 ... plus de problème les filtrages sont instantanés.

Mais, afin de pouvoir avoir une visibilité minimum pour consulter une ligne avant appel, , je dois conserver le formatage des lignes pour les colonnes :
- J N° Client,
- S commentaires après appels,
- T et V Dates de rappels,
- X situation au dernier appel,

Et là, ça ne va plus du tout, les filtrages sont très longs et cela me cause une perte de temps très importante.
Je me suis permis de joindre un fichier test "un peu gros" environ 6.500 lignes.
Si vous testez, vous pourrez constater les temps de filtrages pour 6.500 lignes.
Alors vous pourrez imaginer pour 60.000 et plus.

En espérant avoir été clair (il m'arrive souvent de ne pas l'être LOL), je joins le fichier test dans l'espoir d'une solution 🙂
Un grand merci déjà pour m'avoir lu.

Je vous souhaite une bonne fin de dimanche.
Amicalement,
lionel,
 

Pièces jointes

Solution
Bonjour Lionel, le forum,
Je fais ce filtrage des dizaines de fois par jour et 10 secondes c'est vraiment trop long.
Alors en effet il faut effacer tous les formats de la ligne 7 jusqu'à la dernière ligne de la feuille.

Et les recréer ensuite sur les lignes du VisibleRange, voyez ce fichier (2) et ces 2 macros :
VB:
Sub Filtrer(critere As Range)
Trie_Ttlignes
[6:6].AutoFilter
[6:6].AutoFilter Field:=24, Criteria1:=[E3] 'Field:=1 colonne filtrage
[X1] = "=""Affiché""&""                          ""&SUBTOTAL(103,R[6]C:R[99999]C)"
[V1] = "=IF(R5C35>0,R5C35,""O"")"
[AA5] = "=COUNTIF(C[-3],""" & critere & """)"
lig = 0
VisibleRangeFormat
End Sub

Sub VisibleRangeFormat()
Dim col%, P As Range
If ActiveWindow.ScrollRow <> lig And...
Bonsoir Gérard,
Une fois de plus merci à toi de m'avoir répondu 🙂

Effectivement, partant du principe que les lignes sont classées à l'ouverture par date de rappel ( col T), il n'est peut-être pas utile de refaire un tri après chaque filtrage (sauf peut-être si après appel, la nouvelle date de rappel prévue laisse la ligne dans la même catégorie filtrée ... à voir).
Mais, même trie supprimé, ça reste trop long ... bcp trop long.

Toutefois ta remarque, judicieuse "comme toujours lol", m'a fait penser à ceci :

Puisque si les formats des lignes sont supprimés et qu'alors les filtrages sont instantanés.
Je pourrais dé-formater les lignes, faire le filtrage souhaité et re-formater UNIQUEMENT les lignes affichées après après filtrage.

Je vais voir ça ...
Merci Gérard pour ton intervention 🙂
lionel,
 
Re-Gérard,

Je fais ce filtrage des dizaines de fois par jour et 10 secondes c'est vraiment trop long.
Mais comme je le dis dans mon précédent message, ce que tu m'as dit m'a fait penser à :
Dé-formater les lignes, faire le filtrage souhaité et re-formater UNIQUEMENT les lignes affichées après après filtrage.

Trop fatigué pour ce soir, je pense que je verrai cela demain et je te tiendrai informé.
Bonne nuit Gérard ... et à toutes et à tous,
lionel,
 
Bonjour Lionel, le forum,
Je fais ce filtrage des dizaines de fois par jour et 10 secondes c'est vraiment trop long.
Alors en effet il faut effacer tous les formats de la ligne 7 jusqu'à la dernière ligne de la feuille.

Et les recréer ensuite sur les lignes du VisibleRange, voyez ce fichier (2) et ces 2 macros :
VB:
Sub Filtrer(critere As Range)
Trie_Ttlignes
[6:6].AutoFilter
[6:6].AutoFilter Field:=24, Criteria1:=[E3] 'Field:=1 colonne filtrage
[X1] = "=""Affiché""&""                          ""&SUBTOTAL(103,R[6]C:R[99999]C)"
[V1] = "=IF(R5C35>0,R5C35,""O"")"
[AA5] = "=COUNTIF(C[-3],""" & critere & """)"
lig = 0
VisibleRangeFormat
End Sub

Sub VisibleRangeFormat()
Dim col%, P As Range
If ActiveWindow.ScrollRow <> lig And ActiveWorkbook.Name = ThisWorkbook.Name And UCase(ActiveSheet.Name) = "SUIVISAPPELS" Then
    lig = ActiveWindow.ScrollRow
    Application.ScreenUpdating = False
    ActiveSheet.Protect Password:="", UserInterfaceOnly:=True
    Rows("7:100000").ClearFormats 'RAZ
    Set P = Intersect(ActiveWindow.VisibleRange.EntireRow, Range("A7:A100000")).SpecialCells(xlCellTypeVisible).EntireRow
    For col = 1 To 29
        With Intersect(Columns(col), P)
            If col < 27 Then .Borders.Weight = xlHairline: .VerticalAlignment = xlCenter
            Select Case col
                Case 2: .VerticalAlignment = xlTop: .Orientation = xlVertical
                Case 5, 20, 22: .NumberFormat = "dd mm yyyy hh:mm": .WrapText = True: .ShrinkToFit = True: .HorizontalAlignment = xlCenter
                Case 19, 24: .WrapText = True
                Case 29: .Interior.Color = 15592941 'gris clair
            End Select
        End With
    Next
End If
On Error Resume Next
Application.OnTime t, "VisibleRangeFormat", , False
t = Now + 1 / 86400 'temporisation 1 seconde
Application.OnTime t, "VisibleRangeFormat"
End Sub
La 2ème macro est relancée toutes les secondes par Application.OnTime.

Si pour une raison quelconque le processus est arrêté il suffit de cliquer sur le bouton "Afficher toutes les lignes" pour le relancer.

Voyez aussi les macros dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
VisibleRangeFormat 'lance la macro et le processus
Me.Saved = True 'évite l'invite à la fermeture si aucunemodification
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime t, "VisibleRangeFormat", , False 'évite la relance du processus
End Sub
J'ai testé sur 60 000 lignes : les filtrages se font chez moi en 0,5 seconde environ.

A+
 

Pièces jointes

Dernière édition:
Bonjour Gérard, le Forum,

Vraiment super MERCI 🙂 je pensais bien à cette solution mais je n'avais pas eu le temps de le faire et je ne l'aurais pas fait aussi bien lol 🙂

Merci Gérard de l'avoir fait et 0.5 sec (chez moi aussi) c'est génial (comme toujours 🙂)
Amicalement,
lionel,
 
- 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
240
Réponses
7
Affichages
722
Réponses
23
Affichages
1 K
Retour