Bonjour,
J'ai un problème de lenteur d'exécution pour des filtres sur un gros tableau (planning annuel, 1500 lignes x 1100 colonnes, avec des formules et des formats conditionnels, un peu plus de 10Mo).
J'ai essayé plusieurs choses pour essayer de comprendre ce qui faisait ralentir (outre le fait que le tableau soit "hénaurme") :
En filtrant manuellement, il faut plus d'une minute pour avoir le résultat d'un filtre simple sur 1 colonne.
Le masquage de plusieurs lignes (ou la modification de leur hauteur) est également très lent lorsque exécuté manuellement.
En virant toutes les formules et formats conditionnels, ça ne va pas beaucoup plus vite (en tout cas, pas assez !)
J'ai donc essayé de faire une fonction filtre "maison" avec une boucle type "for each" qui teste la valeur de chaque ligne dans une colonne donnée et qui masque ou non la ligne entière avec "rows(x).hidden" (ou encore avec rows(x).height = 0 pour masquer la ligne artificiellement)
Dans les deux cas, c'est bien plus rapide qu'un filtre exécuté manuellement (environ 15 secondes contre plus d'une minute pour le filtre auto), mais encore trop lent pour être utilisable...
Pour moi, la lenteur d'exécution ne vient pas du test des valeurs mais bien du masquage de chaque ligne, que ce soit avec la propriété "Hidden" ou "Height", individuellement ou par groupe de lignes.
A noter qu'en début de procédure, j'ai mis Application.ScreenUpdating et Application.EnableEvents à False, et Application.Calculation = xlCalculationManual, histoire de ne pas sauter d'une procédure à l'autre sans arrêt vu que pas mal d’événements déclenchent des actions automatiques (en exécution pas à pas il n'y a pas de saut d'une procédure à l'autre)...
Des idées ?
D'avance merci et bonne fin de journée.
Partager