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 -
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
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:
- Réduire le temps d'exécution d'une macro vba
- Comment réduire la taille d'un fichier - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Reduire taille image - Guide
- Reduire clavier iphone - Guide
- Renommer plusieurs fichiers en même temps - Guide
4 réponses
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.
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.
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.
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
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
Attention avec
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
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
.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.Calculateavant de prendre une valeur dans un cellule, afin d'éviter les problèmes)