[VBA] Macros trop longues et à optimiser

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

  1. Modérateur
    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)
    

    1. 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,
    2. Modérateur
      @Camilleben... en remplaçant tes boucles par le code que je t'ai donné....
    3. @jordane45Ah 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