Procedure à temps d'execution élevé raffraichissement affichage

  • Initiateur de la discussion Initiateur de la discussion bigmousse
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour