Comment réduire le temps d'exéctuion de mon code VBA

Jasmine -  
skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai rencontré un problème de code VBA.
Le code marche bien, mais ça prend trop de temps pour l'exécution.
Quelqu'un peut m'aider d'optimiser le code,stp?

Sub distribution_duree_moy()
Application.ScreenUpdating = False
Dim i As Integer
Dim j As Integer
Dim N As Integer
Dim Mu As Long
Dim Sigma As Long
Dim Nb_Lignes_MP_Initial As Long
Dim nb_lignes_éclatés As Long

Nb_Lignes_MP_Initial = Range(Worksheets("MP initial").Cells(2, 2), Worksheets("MP initial").Cells(2, 2).End(xlDown)).Rows.Count
N = 1

For i = 1 To Nb_Lignes_MP_Initial
Sheets("méthode 1").Range("B2").Value = i

Worksheets("mu_sigma").Activate

SolverOk SetCell:="$E$14", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$16,$C$17", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$E$14", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$16,$C$17", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1

Sheets("MP initial").Cells(i + 1, 39).Value = Sheets("mu_sigma").Cells(16, 3).Value
Sheets("MP initial").Cells(i + 1, 40).Value = Sheets("mu_sigma").Cells(17, 3).Value
Sheets("MP initial").Cells(i + 1, 41).Value = Sheets("méthode 1").Cells(13, 10).Value
Sheets("MP initial").Cells(i + 1, 43).Value = Sheets("méthode 1").Cells(16, 10).Value
nb_lignes_éclatés = Sheets("méthode 1").Cells(10, 3).Value

For j = 1 To nb_lignes_éclatés
Sheets("MP final").Cells(j + N, 1).Value = Sheets("méthode 1").Cells(2, 3).Value
Sheets("MP final").Cells(j + N, 2).Value = Sheets("méthode 1").Cells(2, 4).Value
Sheets("MP final").Cells(j + N, 3).Value = Sheets("méthode 1").Cells(2, 5).Value
Sheets("MP final").Cells(j + N, 4).Value = Sheets("méthode 1").Cells(2, 6).Value
Sheets("MP final").Cells(j + N, 5).Value = Sheets("méthode 1").Cells(2, 7).Value
Sheets("MP final").Cells(j + N, 6).Value = Sheets("méthode 1").Cells(2, 8).Value
Sheets("MP final").Cells(j + N, 7).Value = Sheets("méthode 1").Cells(2, 9).Value
Sheets("MP final").Cells(j + N, 8).Value = Sheets("méthode 1").Cells(2, 10).Value
Sheets("MP final").Cells(j + N, 9).Value = Sheets("méthode 1").Cells(2, 11).Value
Sheets("MP final").Cells(j + N, 10).Value = Sheets("méthode 1").Cells(2, 12).Value
Sheets("MP final").Cells(j + N, 11).Value = Sheets("méthode 1").Cells(2, 13).Value
Sheets("MP final").Cells(j + N, 12).Value = Sheets("méthode 1").Cells(2, 14).Value
Sheets("MP final").Cells(j + N, 13).Value = Sheets("méthode 1").Cells(2, 15).Value * Sheets("méthode 1").Cells(12 + j, 8).Value
Sheets("MP final").Cells(j + N, 14).Value = Sheets("méthode 1").Cells(2, 16).Value * Sheets("méthode 1").Cells(12 + j, 8).Value
Sheets("MP final").Cells(j + N, 15).Value = Sheets("méthode 1").Cells(2, 17).Value * Sheets("méthode 1").Cells(12 + j, 8).Value
Sheets("MP final").Cells(j + N, 16).Value = Sheets("méthode 1").Cells(2, 18).Value
Sheets("MP final").Cells(j + N, 17).Value = Sheets("méthode 1").Cells(2, 19).Value
Sheets("MP final").Cells(j + N, 18).Value = Sheets("méthode 1").Cells(2, 20).Value
Sheets("MP final").Cells(j + N, 19).Value = Sheets("méthode 1").Cells(2, 21).Value
Sheets("MP final").Cells(j + N, 20).Value = Sheets("méthode 1").Cells(2, 22).Value
Sheets("MP final").Cells(j + N, 21).Value = Sheets("méthode 1").Cells(12 + j, 7).Value
Sheets("MP final").Cells(j + N, 22).Value = 0
Sheets("MP final").Cells(j + N, 23).Value = Sheets("méthode 1").Cells(2, 25).Value
Sheets("MP final").Cells(j + N, 24).Value = Sheets("méthode 1").Cells(2, 26).Value
Sheets("MP final").Cells(j + N, 25).Value = Sheets("méthode 1").Cells(2, 27).Value
Sheets("MP final").Cells(j + N, 26).Value = Sheets("méthode 1").Cells(2, 28).Value
Sheets("MP final").Cells(j + N, 27).Value = Sheets("méthode 1").Cells(2, 29).Value
Sheets("MP final").Cells(j + N, 28).Value = Sheets("méthode 1").Cells(2, 30).Value
Sheets("MP final").Cells(j + N, 29).Value = Sheets("méthode 1").Cells(2, 31).Value
Sheets("MP final").Cells(j + N, 30).Value = Sheets("méthode 1").Cells(2, 32).Value
Sheets("MP final").Cells(j + N, 31).Value = Sheets("méthode 1").Cells(2, 33).Value
Sheets("MP final").Cells(j + N, 32).Value = Sheets("méthode 1").Cells(2, 34).Value

Next
N = N + nb_lignes_éclatés

Next

Application.ScreenUpdating = True

End Sub

A voir également:

4 réponses

nexus1991t Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   21
 
Tu utilises ce code dans Excel ?
0
skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour
Essaye d'utilisé les conseil de ce site.

http://www.info-3000.com/vbvba/conseiloptimisation.php

Je pense notamment à la désactivation du calcule automatique.
0
nexus1991t Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   21
 
L'idéal c'est de cacher ta feuille avant le traitement puis de la ré afficher à la fin, car il y a toute une partie graphique qui alourdi, comme le déplacement de cellule en cellule. Ainsi tu n'affiche ta fenêtre qu'à la fin du traitement et suivant celui ci c'est presque immédiat.
0
Maurice
 
bonjour
si on a beaucoup de foction & de vba un peux partout


Ex: macro

Sub test()
With Application
.ScreenUpdating = False
.Calculation = xlManual
.EnableEvents = False
End With
' - Code
'
'
'
' Fin
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

A+
Maurice
0
skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   54
 
Attention avec
.Calculation = xlManual 
!

Car imagine que tu utilises les données d'une cellule pour savoir le nombre de ligne complète de ta feuille et que cette cellule utilise une formule
=NBVAL(A:A)
par exemple alors la formule ne se mettra pas à jour.

Si ta macro consiste à ajouter des nouvelles lignes et que tu prend toujours le NBVAL comme référence pour le nombre de ligne dans la liste, alors tu écriras toujours dans la même ligne.

(Un peu complex pour rien dire, en gros faut quand même faire attention et pas hésiter a mettre un
ActiveSheet.Calculate
avant de prendre une valeur dans un cellule, afin d'éviter les problèmes)
0