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

4 réponses

  1. nexus1991t Messages postés 36 Statut Membre 21
     
    Tu utilises ce code dans Excel ?
    0
  2. nexus1991t Messages postés 36 Statut Membre 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
  3. 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
    1. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      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