[VBA] Macros trop longues et à optimiser
A
Bonjour le forum,
Avec ce que j'ai trouvé sur le net et sur le forum, j'ai réussi a bricoler une macro de retraitement et de mise en forme
Je vous joins un fichier test
Les macros fonctionnent, par contre l'exécution totale met beaucoup de temps (plusieurs minutes)
C'est pour ça que j'ai besoin de votre expertise
Visiblement ça prend du temps a cause des macro "chercher_colorier"
Une piste intéressante je pense pourrait être de ne pas appliquer la macro Chercher_Colorier_plage_liste sur les lignes masquées. (je ne sais pas comment le faire)(les lignes masquées sont celles où la colonne N = 0)
En effet, avant de lancer la macro MEF_descriptif, je masque toutes les lignes non concernées (mais le code s’applique quand même dessus.
Le but de la macro est, selon le nombre d'onglet EC (X) de réaliser un descriptif à imprimer.
Ce descriptif se remplis via des formule en AF, et pour modifier modifier la police à l’intérieur d'une formule je n'ai trouvé que la méthode suivante :
-Copier/coller les valeurs,
-Réinitialiser la police,
-Appliquer la police souhaitée sur les bouts de textes souhaités (selon police dans la colonne O)
Merci !
Avec ce que j'ai trouvé sur le net et sur le forum, j'ai réussi a bricoler une macro de retraitement et de mise en forme
Je vous joins un fichier test
Les macros fonctionnent, par contre l'exécution totale met beaucoup de temps (plusieurs minutes)
C'est pour ça que j'ai besoin de votre expertise
Visiblement ça prend du temps a cause des macro "chercher_colorier"
Une piste intéressante je pense pourrait être de ne pas appliquer la macro Chercher_Colorier_plage_liste sur les lignes masquées. (je ne sais pas comment le faire)(les lignes masquées sont celles où la colonne N = 0)
En effet, avant de lancer la macro MEF_descriptif, je masque toutes les lignes non concernées (mais le code s’applique quand même dessus.
Le but de la macro est, selon le nombre d'onglet EC (X) de réaliser un descriptif à imprimer.
Ce descriptif se remplis via des formule en AF, et pour modifier modifier la police à l’intérieur d'une formule je n'ai trouvé que la méthode suivante :
-Copier/coller les valeurs,
-Réinitialiser la police,
-Appliquer la police souhaitée sur les bouts de textes souhaités (selon police dans la colonne O)
Merci !
Invité
Bonjour Anthony47,
Je pense que tu as un autre souci, car avec le fichier partagé, c'est rapide (4 à 5s)
Sinon, pour le code, tu peux essayer comme ceci
Sub Chercher_Colorier_plage_liste(xrgTxt As Range, xrgQuoi As Range)
' Si cellule N = 0 on sort
If Range("N" & xrgTxt.Row) = 0 Then Exit Sub
' idem précédent mais on recherche au sein d'une plage de cellule xrgTxt.
' C'est le cas le plus général: on recherche au sein de toute la plage xrgTxt
' chaque mot de la plage xrgQuoi et on applique la mise en forme graisse et couleur
Dim xcell As Range, old As Boolean
old = Application.ScreenUpdating: Application.ScreenUpdating = False
For Each xcell In xrgTxt
Chercher_Colorier_un_liste xcell, xrgQuoi
Next xcell
Application.ScreenUpdating = old
End Sub@+
A
Bonjour Bruno,
Votre message m'a mis la puce à l'oreille, j'ai redémarrer le PC et ça va déjà un peu mieux.
Par contre votre bout de code ne semble pas fonctionner, et la macro continue de traiter toutes les lignes meme quand N=0
J'ai trouvé pour n'appliquer qu'au cellule visible
Dim xcell As Range
old = Application.ScreenUpdating: Application.ScreenUpdating = False
For Each xcell In xrgTxt.SpecialCells(xlCellTypeVisible)Je sais pas si c'est le plus optimal, mais ça réduit beaucoup le temps de traitement