Bonjour,

Dans un formulaire où l'utilisateur lance à destination d'un SQL Server un traitement long de synchronisation avec de nombreuses requêtes SQL, j'ai souhaité inclure une progress bar et un chronomètre permettant à l'utilisateur de visualiser l'avancement et la durée de ce traitement de plusieurs minutes (et surtout d'avoir une idée approximative de la durée restante).

Pour la progress bar, j'ai utilisé un contrôle activex et pour le calcul du pourcentage d'avancement, je n'ai pas réinventé la poudre --> au début, calcul du nombre d'enregistrements puis insertion d'une clause if dans les boucles de recordsets qui met à jour la progress bar tous les 100, 200, ou etc. enregistrements. Ca marche bien.

Pour le chronomètre, j'ai un peu plus de mal.
Tout d'abord, j'ai essayé de passer par le Form_Timer et le GetTickCount du kernel32. Ca marche très bien pour des phases statiques mais ... comme VBA ne gère pas le parallel processing, Form_Timer perd la main dès qu'une sub s'exécute. Et donc le chrono se fige jusqu'à ce que la sub ait fini de s'exécuter --> méthode inutilisable à l'intérieur d'un traitement.
Ensuite, j'ai procédé comme pour la progress bar, en incrémentant le chrono dans les boucles de recordsets.

Cela fonctionnerait pas trop mal ... s'il n'y avait un gros souci. En fait, certaines requêtes chargent via le réseau des recordsets assez volumineux (de type rst.Open "SELECT ......"), ce qui rend plutôt très long leur temps de chargement (plusieurs dizaines de secondes). Et donc durant ce laps de temps où cette instruction est exécutée, la progress bar et le chronomètre sont bien évidemment scotchés. Le chrono prend ensuite x secondes d'un coup dès que le rst.open est chargé et que la boucle du rst est exécutée.



Au final, à moins de réaliser un recordset par enregistrement (ce qui serait contre-productif en terme de durée, puisque certaines tables font des dizaines de milliers de lignes), je ne vois pas comment je pourrais obtenir une progress bar et un chronomètre qui tiendraient la route ???!!!

Auriez-vous quelques suggestions lumineuses qui pourraient m'aiguiller ? Merci d'avance.