[VBA] Macros trop longues et à optimiser

11test-mef.zip (700.62 Ko)
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 !

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

@+

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

Rechercher des sujets similaires à "vba macros trop longues optimiser"