Optimisation temps d'execution Macro

Bonjour a tous,

Svp J'aurais besoin d'aide afin d'améliorer le temps d'execution de la macro en fichier joint. Il s'agit d'une macro qui a partir d'une fiche que l'utilisateur rempli et clique sur le bouton, la macro remplie automatiquement la base de donnée.

La macro fonctionne bien, mais au fus et a mesure que la base de donnée est pleine, la macro devient de plus en plus lente.

Merci pour votre aide précieuse

21macro-lente.xlsm (274.22 Ko)

Bonjour,

Ce n'est pas cette macro qui ralenti l'ensemble mais les autres macros contenues dans le classeur.

Peut-être des macros Worksheet_Change ou des Functions...

A+

Bonjour,

Ce n'est pas cette macro qui ralenti l'ensemble mais les autres macros contenues dans le classeur.

Peut-être des macros Worksheet_Change ou des Functions...

A+

Si c'est le cas il faudra :

Application.EnableEvents = False
Application.Calculation = xlManual

et remettre à la fin :

Application.EnableEvents = True
Application.Calculation = xlAutomatic

Bonjour, Salut à tous !

Attendons de savoir ce qu'il y a d'autre dans le classeur pour faire des propositions...

On peut considérer le code cité comme optimisé.

Peut-être faut-il en effet interrompre les évènements si macros évènementielles susceptibles de se lancer... mais il est sage d'attendre les infos permettant un diagnostic un peu plus précis... (NB- Je ne crois guère par contre à un effet du recalcul, gênant généralement lors de manipulations, mais lors de l'exécution d'une macro, si j'ai déjà rencontré la nécessité inverse, soit de forcer le recalcul, jamais le besoin de le stopper...)

Cordialement.

Bonjour @ tous

de mon coté, la macro provoque une erreur....

Mais je ne dois pas être réveillé !

@ bientôt

LouReeD

Bonjour a tous,

Merci beaucoup pour vos réponses.

Oui effectivement, il existe plusieurs autres macro dans mon classeur. Je ne sait pas vraiment laquelle vous montrer puisqu' elles sont nombreuses.

Sinon la plus grande macro est celle qui copie les informations dans ma base de donnée et rempli une feuille sous forme de cédule de travail.

Option Explicit

Sub Suivi_BT_PROD()

Dim bScreenWasUpdating As Boolean, xlCalc As XlCalculation

bScreenWasUpdating = Application.ScreenUpdating

xlCalc = Application.Calculation

On Error GoTo ErrorHandler

Application.Calculation = xlCalculationManual

Worksheets("Suivi Bon de Travail Encours").Select

Dim iLastRow As Long

iLastRow = Cells(Rows.Count, "B").End(xlUp).Row

If iLastRow > 13 Then

Range("B14:X" & iLastRow).ClearContents

End If

Application.ScreenUpdating = False

Dim iScheduleRow As Long

iScheduleRow = 14

Dim rwGeneralProduct As ListRow

For Each rwGeneralProduct In Worksheets("OM General Produit").ListObjects(1).ListRows

If rwGeneralProduct.Range.Cells(1, 13) = [L11] Then

Dim iScheduleCol As Integer

iScheduleCol = 3

If rwGeneralProduct.Range.Cells(1, 18) = 1 Then

Cells(iScheduleRow, 2) = rwGeneralProduct.Range.Cells(1, 1)

Cells(iScheduleRow, iScheduleCol) = rwGeneralProduct.Range.Cells(1, 3)

Cells(iScheduleRow, iScheduleCol + 1) = rwGeneralProduct.Range.Cells(1, 4)

Cells(iScheduleRow, iScheduleCol + 2) = rwGeneralProduct.Range.Cells(1, 6)

Cells(iScheduleRow, iScheduleCol + 3) = rwGeneralProduct.Range.Cells(1, 16)

Cells(iScheduleRow, iScheduleCol + 4) = rwGeneralProduct.Range.Cells(1, 5)

Cells(iScheduleRow, iScheduleCol + 5) = rwGeneralProduct.Range.Cells(1, 7)

Cells(iScheduleRow, iScheduleCol + 6) = rwGeneralProduct.Range.Cells(1, 8)

Cells(iScheduleRow, iScheduleCol + 7) = rwGeneralProduct.Range.Cells(1, 23)

Cells(iScheduleRow, iScheduleCol + 8) = rwGeneralProduct.Range.Cells(1, 25)

iScheduleRow = iScheduleRow + 1

End If

End If

Next rwGeneralProduct

ErrorExit:

On Error Resume Next

Application.Calculation = xlCalc

Application.ScreenUpdating = bScreenWasUpdating

Exit Sub

ErrorHandler:

MsgBox Err.Number & vbLf & Err.Description

Resume ErrorExit

End Sub

Si tu veux tester la longueur de tes programmes, tu peux essayer de mettre un point d'arrêt au debut et à la fin de chacun, quand tu lanceras ton programme, tu verras le temps que ça met pour passer du debut de ton programme à la fin de celui-ci, sinon tu dois pouvoir lancer un timer qui les chronomètre. Simple idée

Moi je verrai plutôt des macros :

Private sub  Worksheet_Change...

A+

Rechercher des sujets similaires à "optimisation temps execution macro"