afficher une barre de progression evolution execution macro

KTM

XLDnaute Occasionnel
Salut chers tous
J'ai une longue macro qui met 30 secondes à s'exécuter
J'aimerais afficher une barre de progression a l'écran lors de l'exécution
Pouvez vous me guider? Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pouvez vous joindre le classeur ?

Parce que vous n'avez peut être pas besoin de sa version récente la plus étoffée qui permet d'estimer un nombre de pas forfaitaire avant une action durant laquelle on ne peut pas invoquer OùÇaEnEst…
 

Fichiers joints

Dernière édition:

phlaurent55

XLDnaute Barbatruc
Bonjour à tous,

Il ne faut pas perdre de vue qu'ajouter une animation (barre de progression) ne fera qu'allonger le temps d'exécution

À+
Philippe
 

Dranreb

XLDnaute Barbatruc
Bonjour Phlaurent55.
La méthode OùÇaEnEst de mon UFmProg n'allonge rien de concrètement mesurable, car elle n'effectue qu'un appel à QueryPerformanceCounter, puis 6 tests ne portant que sur des variables Private et une addition, avant de rendre la main aussitôt, sauf 4 fois par seconde où elle actualise l'aspect de l'UserForm.
Édition: Mais je vais l'améliorer pour qu'elle exécute encore moins d'instructions quand il n'y a pas lieu d'actualiser.
 
Dernière édition:

zebanx

XLDnaute Accro
Bonsoir à tous,

La solution pour implémenter une progress bar sur une macro quelconque n'est finalement... pas si simple que cela (je vois plein de démo avec des boucles inclus dans un userform mais pour relier une progress bar à une macro quelconque, c'est nettement moins intuitif (non?)).

Ici une proposition beaucoup plus simple et clairement par défaut en utilisant statusbar qui donne l'avancement (% progression) et un timer dans le statusbar progressif, ce qui complète le très habituel msgbox format (timer - t0...).
Le code principal n'est pas ralenti non plus.

dtstart = Now
....
Application.ScreenUpdating = False
....

For i = 2 To derLigne
Application.StatusBar = "macro is running..." & Round((i / derLigne * 100), 0) & "%" & " " & Format(Now - dtstart, "ss") & ".sec"
......
Next i
Application.ScreenUpdating = True
Application.StatusBar = ""


@+
zebanx
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir zebanx
Rien du traitement n'est inclus dans ma UFmProg et son utilisation s'intègre très facilement à n'importe quelle procédure existante munie d'une boucle dont on connait le nombre de passages prévu, au prix de l'appel de deux de ses méthodes : UFmProg.Tâche et UFmProg.OùÇaEnEst
 

zebanx

XLDnaute Accro
Bonjour dranreb

Merci pour ton commentaire.
Mon inexpérience / incompétence avec l'usage des USF me rend difficile d'utiliser ta solution (ce qui ne sera peut-être pas le cas du demandeur).
Une solution par statusbar (découvert hier seulement) me parait avec 3 lignes rajoutées dans un code principal léger à utiliser (et sur excel 2003) et répond à mes propres besoins, sans répondre à la demande précise du demandeur.
Et il faut reconnaître que les USF que tu proposes présentent pour ceux qui en auraient le besoin un affichage remarquable et que c'est sympa de les proposer.

@+
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Non, aucune difficulté. Juste ne pas oublier, comme d'hab, de glisser les modules de service dont deux de classe en plus du UFmProg
 

Haut Bas