Bonjour à tous,
Petit problème de principe que je soumets à la communauté, sachant que j'ai résolu ce problème en le contournant. Mais j'aime bien approfondir et comprendre les choses, alors si quelqu'un a une explication...
Le contexte : Je veux créer une animation en VBA Excel, et contrôler un temps de pause entre deux affichages successifs d'une image (mais pas toujours le même temps). Pour pouvoir régler cette durée, j'ai créé une sub "Test" dans laquelle je calcule le temps écoulé à partir de la variable "Timer".
Voici le code de la sub Test, qui est très simple :
Petite précision : L'exemple ci-avant est simplifié, car en réalité Timer ne s'affiche qu'avec 2 décimales. En réalité, j'ai donc modifié mes variables pour prendre en compte la 4ème décimale de Timer. Mais ceci ne change rien au problème, car je constate avec surprise qu'avant que la variable T1 n'affiche une valeur supérieure à celle du départ T0 (et donc que la boucle Do / Loop se termine), mon compteur K0 affiche une valeur qui peut varier de 500 à parfois plus de 20 000. Et c'est trop long pour mon animation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub Test K0=0 ' Variable de comptage T0=Timer ' Temps de début de boucle Do K0=K0 +1 ' Comptage T1=Timer ' Temps de fin de boucle Loop until T1<> T0 ' Fin de boucle dès qu'une variation de Timer est détectée End Sub
Sur le principe, j'ai contourné le problème avec une boucle For / Next qui s'exécute tout au début du programme, et dans laquelle j'incrémente une variable pendant une seconde, ce qui me donne une référence de comptage pour le 1/100 ou même le 1/1000 ème de seconde, ceci permettant de pallier les différences de rapidité d'un ordinateur à un autre.
Autre surprise : Entre le début et la fin de la boucle, la valeur de Timer (lue à la 4ème décimale) n'évolue pas de façon régulière : Parfois à peine plus de 0.01 seconde, parfois plus de 0.02 seconde. Je suppose donc qu'il y a quelque part des interruptions système qui d'une part expliquent ces différences de résultat, et surtout qui empêchent que l'indicateur Timer ne soit mis à jour plus rapidement.
Question : Peut-on empêcher ces interruptions système (et lesquelles ?), ou tout simplement accélérer ou forcer le rafraichissement de Timer ?
Autre précision : J'ai essayé d'employer les instructions "Application.EnableEvents = False", "Application.Calculation = xlManual" ou "'Application.ScreenUpdating = False", mais rien n'a changé...
Merci d'avance !
JR
Partager