Macro très lente

Bonjour à tous,

J'ai un problème de lenteur avec la macro principale d'un outil excel qui je développe (j'apprend tout sur le tas :)

J'ai une Front Page (Onglet 1) ou je choisie 3 référence dans 3 plages de donnée distinctes et qui par la suite :

1 - les 3 références viennent se copier/coller dans 3 cellules (A1/B1/C1) et une référence globale est produite en D1 (=A1&B1&C1)

2 - Les 3 cellules sélectionnées sont colorié en Rouge et la précédente redevient blanche (couleur de toutes les cellules non sélectionnées sur les plages)

3 - Ma macro principale (macro inscrite dans l'onglet 1) vient lire la référence et vient renseigner le contenu de 78 Formes différentes !!! (aussi dans l'onglet 1) en passant par l'onglet 2 ou elle cherche dans un tableau de données la référence en Colonne 1 puis va lire la cellule en Colonne 10 et affiche le contenu de cette cellule dans la forme.

J'ai segmenté mes tableau de données dans 6 onglets différents (pensant que la macro prendrait moins de temps si le tableau etait moins grand à lire)

Résultat, j'ai répétais 78 fois le même code dans ma macro pour afficher mes 78 résultats :(

Voici le code répété :

If Not Intersect(Target, Me.Range("$A$1:$C$1")) Is Nothing And Target.Count = 1 Then

 Valeur = Me.Range("D1") 

With [PUTG100].ListObject.DataBodyRange 

Set Plage = .Find(Valeur) 

If Not Plage Is Nothing Then Me.[UTG - OPENRAISE - ALLPROFIL - TABLEAU 1].Text = Worksheets("UTG100").Range(.Cells(Plage.Row - .Row + 1, 10)).Value End With

  • Temps d'exécution de ma macro : 18s
  • Temps d'exécution de ma macro (sans l'étape 2) : 4s mais encore trp lent

Auriez vous des pistes à me proposer ?

Merci

bonjour,

Au lieu de montrer un petit bout de code d'une macro qui ne vous donne de toute façon pas satisfaction, joignez le classeur et un exemple du résultat souhaité.

A+

Bonjour,

A l'aveugle dans un premier temps vous pouvez arretez la mise à jour de l'ecran ainsi sue les calculs.

Les accès feuille ralentissent les codes, donc essayez de travailler en memoire le plus possible.

@ bientôt

LouReeD

Hello LouReeD

J'ai ajouté ce code en debut de macro et l'inverse en fin mais cela n'a pas d'incidence.

Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False

Question bete : la lenteur d'une macro peut elle venir du chemin a parcourir pour trouver l'information ?

Bonjour,

une fois les options de calcul et d'affichage réglées ..

... la lenteur d'une macro peut elle venir du chemin a parcourir pour trouver l'information ?

... oui, cela peut être même la raison principale. Surtout quand tu fais un find sur l'ensemble d'un tableau et qui va balayer chaque cellule. 2 pistes :

  1. Il vaudrait mieux uploader le databodyrange dans un array et travailler en mémoire.
  2. Si en plus tu peux spécifier une colonne ordonnée, tu peux alors faire une recherche dichotomique.

Comme dit Galopin, il faudrait en voir davantage.

Re-

Résultat, j'ai répétais 78 fois le même code dans ma macro pour afficher mes 78 résultats :(

Voici le code répété :

If Not Intersect(Target, Me.Range("$A$1:$C$1")) Is Nothing And Target.Count = 1 Then

 Valeur = Me.Range("D1") 

With [PUTG100].ListObject.DataBodyRange 

Set Plage = .Find(Valeur) 

If Not Plage Is Nothing Then Me.[UTG - OPENRAISE - ALLPROFIL - TABLEAU 1].Text = Worksheets("UTG100").Range(.Cells(Plage.Row - .Row + 1, 10)).Value End With

Passe de 78 x .Find(Value) à 1 fois

Hello,

Je viens de modifier ma macro sur les conseils de Steelson. Le temps d'execution est passé de 17s à - d'1 seconde :)

Merci beaucoup pour tes conseils.......

Rechercher des sujets similaires à "macro tres lente"