[VBA] Macros trop longues et à optimiser

Signaler
-
 Camille -
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 :p
Je vous joins un fichier test https://www.cjoint.com/c/JGbnvn3hMEP

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 !

1 réponse

Messages postés
29179
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 681
Bonjour,

Dans tes boucles sur les cellules, tu pourrais, en effet, ne prendre que celles qui sont visibles
un truc du genre
For Each xcell In xrgTxt.SpecialCells(xlCellTypeVisible)

Oui, ça semble bien merci, tu saurais comment le greffer dans le code ? c'est un code que j'ai un peu de mal à modifier ?

De ce que je comprend, sur la ligne
Chercher_Colorier_plage_liste Range("A" & i + 2, "C" & i + PasTot), Range("O" & i + 1, "O" & i + PasTot)
On définit la plage d’application,
Messages postés
29179
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 681 > Camille
ben... en remplaçant tes boucles par le code que je t'ai donné....
>
Messages postés
29179
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Ah oui je vois !
Dans le module
Sub Chercher_Colorier_plage_liste(xrgTxt As Range, xrgQuoi As Range)
' 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.SpecialCells(xlCellTypeVisible)
Chercher_Colorier_un_liste xcell, xrgQuoi
Next xcell
Application.ScreenUpdating = old
End Sub