[VBA] ProgressBar

Résolu
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   -  
 hafid -
Hello tout le monde,

J'ai une question en VBA. Dans mon classeur, tout fonctionne bien, mais vu que j'ai une immense formule, copiée sur 500 lignes, et qui doit trier un millier et demi de lignes (quand même !), j'ai mis mon classeur en mode manuel.

J'aimerais, lorsqu'il recalcule le tout, et qu'il se remet en mode automatique pour ça, qu'une progressbar s'affiche afin de montrer l'avancement et surtout faire patienter l'utilisateur, car on a l'impression que tout plante, alors que le travail continue dans le fond... et donc l'utilisateur ferme le programme...

Quelqu'un à une solution ? Merci.

@+

19 réponses

WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Je serais toi, j'utiliserai plutôt le StatusBar (barre d'état, en bas), pour t'éviter pas mal de calculs

Quand tu veux écrire dedans :

application.statusbar="ton texte" (tu peux imaginer un compteur, style "Nombre de ligne " &Compteur &"/" &Total)

Pour remettre la barre d'état à son état "naturel" :

application.statusbar=false

;-)
5
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Quelle érudition ! Merci bien, on va dire que ça va suffire. ;)
2
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Ouais, pourquoi pas. Je vais mettre ça et continuer un peu mes recherches. J'aurais aimé un truc plus visuel, mais c'est déjà un bon début.

Si quelqu'un à une autre idée tant mieux, sinon, c'est pas grave, merci encore.

@+
1
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Le ProgressBar est bien, mais il prend un peu de ressources, alors que le StatusBar, bien moins...

Et si tu veux faire un joli ProgressBar, il te faut recalculer à chaque fois le Max et les propriétés du SmallChange ou Large pour que cela reflète bien la somme des données et de la progression...

C'est pour ça que StatusBar est plus simple à gérer, moins beau, mais plus simple...

;-)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
En fait j'aurais encore qqch à te demander par rapport à ça, si je sais que tout le recalcul dure environ 2 mn, comment puis-je écrire le temps restant estimé ? Un truc du style :

application.statusbar = "Temps restant estimé : "&120-TempsEcoulé&"sec. Merci de patienter."

Mais comment calculer le temps écoulé ?

@+
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bin, si tu sais approx. le temps que cela dure, tu prends une variable qui va récupérer le Now+2 minutes

Puis dans la boucle, tu met un petit format(now,"hh:mm")...

;-)
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
En fait mon problème c'est que je n'ai pas de boucle, donc il faut que j'arrive à trouver qqch qui fait en sorte que toutes les secondes le recalcul soit fait. J'ai essayé avec second(now), mais après reflexion, c'est logique que ça ne marche pas... Alors si tu trouves le moyen de faire un compteur de seconde a partir d'un point, et ben ce sera bon ;)

Merci
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

A partir d'un point ? Explique... ?

;-)
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Non, en fait c'est juste la même fonction qu'un chrono. Au départ il est à zéro, et à chaque seconde, la variable fait +1.
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Alors attends, j'ai un doute....

Tu veux juste un compteur (super simple à faire), où alors, si je reste dans ton post d'origine, et que je vais un peu plus loin, en fait tu veux une procédure qui, en // et indépendante de ce qu'il se passe dans Excel, se déclanche à intervalles réguliers, le tout sous Excel et en VBA ?

Si c'est cela, alors là, désolé, la réponse est NON.... Cela existe en VB pur, mais pas en VBA... En VBA, tu peux piloter tout ce que tu veux, mais pas faire une procédure qui se déclanche en "arrière plan"...

Au pire, tu crée une UserForm, que tu passes en Non-Modale (tu as l'aide, pour fouiner..), dans laquelle tu vas mettre ton code, mais encore là, c'est pas joué... Va falloir ruser !!

;-)
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Bon. Alors. ^^ Ce que je veux faire, maintenant, c'est uniquement faire un compteur de temps restant dans la barre de status. J'ai abandonnée l'idée de faire une progressbar etc. J'aimerais simplement faire en sorte que l'utilisateur puisse se rendre plus ou moins compte du temps qu'il reste avant la fin du recalcul du fichier (au total ~2mn.). C'est clair ou pas encore ? ^^
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Alors, dans ce cas, il faut que tu crée une boîte de dialogue (UserForm)...

Dans les propriétés de ta UserForm, tu lui dis "False" à "ShowModal"...

Tu met un petit bouton "Fermer" et une petite étiquette (qui servivra au compteur)

Ensuite, tu récupères l'heure/minute en cours (minute+2) dans l'événement "Initialize" de ton objet "UserForm"...

Et toujours dans l'événement, tu fait ton compteur...

En //, dans une sub (d'un feuille ou d'un module) qui va demander un "show" de ta userform, juste avant de lancer le recalcul...

Résultat : Comme ta boîte (UserForm) est non modale, elle va s'afficher, ta sub va continuer (le recalcul), et comme tu as mis ton compteur dans l'initialize de la boîte, tu vas voir tout ça tout en pouvant cliquer ailleurs...

;-)
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Ok, bon merci pour tout, mais en fait je vais laisser tomber. Je vais juste garder ton idée dans la barre de status. C'est pas par difficulté (j'aime bien fouiller un peu), mais c'est qu'en fait, comme je l'ai dis dans mon premier post, on dirais qu'Excel plante (ex: en haut à gauche le logo excel est comme quand (ne répond pas), on a donc l'impressions que tout est planté.

Mais la tâche continue, et seule la barre de status est visible, je vais donc juste mettre un petit mot là dedans et ça ira. (Parce qu'après 2mn~ tout reviens normal, mais avec les données modifiées)

Merci pour tout, et désolé de t'avoir fait perdre un peu de temps.

@un de ses 4 sur le forum ;)
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-) No problemo...
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Dis voir WhiteFang, tu connais le php ? Enfin, je veux dire tu le maîtrise ?
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bin, heu....... ;-(

Cliques donc là : http://forum.aceboard.net/index.php?login=113149

Cela te donneras une idée de mes compétences...

En fait, question dev, je suis franchement lèg' en php et tout ce qui va avec, mais je suis dessus... Ca va viendre...

;-)
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-) Mais ici, y'a des bons !! ;-) Enfin, sûrement meilleurs que moi...
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Enfait c'est bon, on vient à l'instant de résoudre le problème. Merci quand même ^^
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497 > Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention  
 
Et je viens de m'inscrire sur ton faux rhum ^^
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204 > Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention  
 
;-)

Me laisse pas dans l'ignorance.... Tu as fait comment pour résoudre ton problème ???

;-)

Ps: Cool.. ;-) Merci..
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bien !
... Et quand tu auras le temps fait nous une jolie petite Userform ! ;-)
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Lol on verra ;9
0
Erdnax Messages postés 2273 Date d'inscription   Statut Contributeur Dernière intervention   497
 
Re White ;)

Alors voilà, j'ai essayé de faire un UserForm pour patienter, mais le problème c'est qu'il s'affiche bien, se masque bien, mais lorsqu'il est affiché, il est tout blanc ! même pas gris comme le fond, tout blanc ! Un peu comme s'il était planté !

Et là, ben... je comprends pas :D Alors si tu as une idée, elle est la bienvenue ;)

Merci
0
hafid
 
ajouter ca :
windows_name.Repaint
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bin écoutes, franchement, j'avoue, je suis un peu débordé, voire même en surcharge, là !!

Vas là : http://forum.aceboard.net/index.php?login=113149 je serais obligé de te répondre, car en ce moment, je ne suis pas très actif ici, au risque de croire qu'on ne veut pas te répondre... Sauf que c'est le temps qui me manque...

;-)
0
Pierre
 
Salut j'ai exactement le problème du fond blanc. Quelqu'un sait coment le résoudre ?
0
Etienne2323 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Tu as juste à insérer ceci dans ta sub à la suite de ton ".Show"

UserForm1.Repaint

Le ".Repaint" fera apparaitre le texte dans ton encadré blanc.

ET
0