Procedure à temps d'execution élevé raffraichissement affichage

bigmousse

XLDnaute Occasionnel
Bonjour,
Lorsque j'ai une procedure VBA qui dure (l'ordre de la minute), Excel se bloque et ne m'affiche le resultat seulement à la fin.
Dans le cas où je veux placer un statut ou un progress bar, ce dernier est inutile puisque excel ne repond pas et le raffraichissement de l'écran ne s'effectue pas.

Il ya t'il une option sous vista ou ailleur qui permet de laisser Excel executer sa tâche sans qu'il soit détecté comme un programme qui ne reponds pas.
Merci
mousse
 

Lii

XLDnaute Impliqué
Re : Procedure à temps d'execution élevé raffraichissement affichage

Bon soir,

à tester :
Code:
Option Explicit
Option Base 1
Sub MAIN()
  Dim MON_TOTAL_LIGNE As Long
  Dim MON_TOTAL_LIGNE_BD As Long
  Dim x As Long, y As Long
  
  Dim TdB, TdD, TdF
  Dim TdA
  Dim Test
  Application.DisplayStatusBar = True
  Application.Calculation = xlCalculationManual
  MON_TOTAL_LIGNE = Sheets("Tableau de bord").[A60000].End(xlUp).Row
  MON_TOTAL_LIGNE_BD = Sheets("Volume_Mag").[A60000].End(xlUp).Row
  ReDim TdB(MON_TOTAL_LIGNE_BD - 1)
  ReDim TdD(MON_TOTAL_LIGNE_BD - 1)
  ReDim TdBxx(MON_TOTAL_LIGNE_BD - 1)
  ReDim TdA(MON_TOTAL_LIGNE - 5, 3)
  For x = 6 To MON_TOTAL_LIGNE
    TdA(x - 5, 1) = Sheets("Tableau de bord").Range("A" & x)
  Next
  With Sheets("Volume_Mag")
    TdB = .Range("B2:B" & MON_TOTAL_LIGNE_BD)
    TdD = .Range("D2:D" & MON_TOTAL_LIGNE_BD)
    TdF = .Range("F2:F" & MON_TOTAL_LIGNE_BD)
    For y = 1 To MON_TOTAL_LIGNE_BD - 1
      For x = 1 To MON_TOTAL_LIGNE - 5
        If TdA(x, 1) = TdB(y, 1) Then
          If TdD(y, 1) = 1 Then TdA(x, 2) = TdA(x, 2) + TdF(y, 1)
          If TdD(y, 1) = 2 Then TdA(x, 3) = TdA(x, 3) + TdF(y, 1)
          TdA(x, 1) = TdA(x, 1)
        End If
      Next
      Test = CInt((y / MON_TOTAL_LIGNE_BD) * 100)
      Application.StatusBar = "Progression de l'analyse : " & Round((y / MON_TOTAL_LIGNE_BD) * 100, 2) & "%"
      DoEvents
    Next
  End With
  With Sheets("Tableau de bord")
    For x = 6 To MON_TOTAL_LIGNE
      .Cells(x, 7) = TdA(x - 5, 3) / .Cells(x, 3)
      .Cells(x, 9) = TdA(x - 5, 2) / .Cells(x, 3)
    Next
  End With
  Application.StatusBar = False
  Application.Calculation = xlCalculationAutomatic
End Sub

j'ai préféré passer par des boucles For ... pour mieux contrôler les lignes.
Application.Calculation = xlCalculationManual augmente la vitesse surtout quand de nombreuses cellules contiennent des formules.
And ralentit un peu, mais un peu + un peu + ....
With augemente quelque peu la vitesse, mais un peu + un peu + ...
 

Pièces jointes

  • CalculsSi.xlsm
    34.4 KB · Affichages: 72

bigmousse

XLDnaute Occasionnel
Re : Procedure à temps d'execution élevé raffraichissement affichage

Merci Lii, trés rapide par rapport à mon code...je viens de le tester, j'apporte les modifs au miens et je te tiens au courant...
Merci, et excuse moi de ne pas t'avoir repondu plus tôt.
Mousse
 

Statistiques des forums

Discussions
312 391
Messages
2 087 941
Membres
103 679
dernier inscrit
yprivey3