Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Un chronomètre qui affiche TOUTES les secondes pendant la durée d'un traitement

crocrocro

XLDnaute Impliqué
Bonjour,
Je cherche à afficher un chronomètre, par exemple ici dans la cellule A1 (nommée CHRONO) qui affiche TOUTES les secondes pendant que se déroule un traitement (Macro "Go" activé par le bouton GO). La macro "Go" déclenche le chronomètre et appelle la macro "MaMacroQuiPrendDuTemps" . Le chronomètre est arrêté avec le bouton STOP.
Mon problème : L'affichage du chronomètre ne se produit qu'après la fin de la macro "MaMacroQuiPrendDuTemps", c'est à dire environ 3 ou 4 secondes après le déclenchement du traitement.
Mon traitement réel est une suite de macros pour lesquelles :
- il n'y a aucune intervention utilisateur,
- le traitement ne comporte que des instructions séquentielles (pas de boucles qui auraient éventuellement permis tous les x itérations de reprendre la main pour afficher la valeur courante du chronomètre).
Ici, dans la macro "MaMacroQuiPrendDuTemps" j'ai mis des boucles, juste pour faire durer artificiellement le traitement.
Peut-être une solution en utilisant le chronomètre de windows avec un paramétrage du mode "Chronomètre" ou "Compte à rebours" serait possible, mais là encore, je ne sais pas faire.
Merci à ceux qui se pencheront sur mon problème.
Le code VBA

VB:
Public ProchainChrono, Start
Sub Go()
    Start = Timer()
    majChrono
    MaMacroQuiPrendDuTemps
End Sub
Sub MaMacroQuiPrendDuTemps()
Dim Cellule As Range

    'Du code bidon qui dure et pendant lequel le chrono doit continuer à s'afficher toutes les secondes
    For Each Cellule In Range("MA_PLAGE")
        Cellule.Value = Int((1000 - 1 + 1) * Rnd + 1)
    Next Cellule
    For Each Cellule In Range("MA_PLAGE")
        Cellule.Value = Cellule.Value * 3
    Next Cellule
        
End Sub
Sub majChrono()
    Sheets("Chrono").Range("CHRONO") = Format((Timer() - Start) / 3600 / 24, "hh:mm:ss")
    ProchainChrono = Now + TimeValue("00:00:1")
    Application.OnTime ProchainChrono, "majChrono"
End Sub
Sub Arret()
    On Error Resume Next
    Application.OnTime ProchainChrono, Procedure:="majChrono", Schedule:=False
End Sub
 

Pièces jointes

  • Chronometre.xlsm
    184.3 KB · Affichages: 13

jurassic pork

XLDnaute Occasionnel
Hello,
cela est faisable en utilisant l' Addin Excel Dna avec dedans une winform c# qui contient deux labels et un timer et accessible par un ComServer.
Voici un exemple de code VBA qui lance le chrono pour 20 secondes en même temps que la macro qui prend du temps :
VB:
Sub Go()
 Dim chrono As Object
 Set chrono = CreateObject("DnaLibJP.Chrono")
 chrono.Start 20
 MaMacroQuiPrendDuTemps
 End Sub

et voici le résultat :


Ami calmant, J.P
 

Pièces jointes

  • ChronoDna.gif
    172.9 KB · Affichages: 6

crocrocro

XLDnaute Impliqué
Bonjour J.P.
merci pour ce retour.
cela est faisable en utilisant l' Addin Excel Dna avec dedans une winform c# qui contient deux labels et un timer et accessible par un ComServer.
Tout cela est nouveau pour moi. Je vais regarder et aurai certainement des questions (installations nécessaires, création de la winform, paramétrage dans excel, ...)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Dans le cas de votre exemple, on peut utiliser une barre de progression, parce que, étant donné qu'elle semble avoir écrite exprès de telle sorte qu'elle prenne du temps, on peut connaitre à l'avance le nombre d'accès aux cellules qui seront effectués. Si ça vous intéresse, voulez vous que j'en équipe votre classeur ?
 

patricktoulon

XLDnaute Barbatruc
un exemple comme ça vite fait à l’arrache
vérifie les déclaration en 64 si tu es en 64
ton chrono est en addressOF
Pour l'exemple j'ai pris un tableau de 5000 lignes
 

Pièces jointes

  • macrochronocroco.xlsm
    18.5 KB · Affichages: 8

crocrocro

XLDnaute Impliqué
Bonjour Patrick, bonjour Dranreb,
comme je l'ai précisé dans mes posts 8 et 11, pas de DoEvents possible
Donc ta solution Patrick ne convient
Dranreb, je pense que tu m'avais déjà fait cette proposition (post 4) qui ne convenait pas non plus.
Merci tout de même
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…