[VBA] ProgressBar

Résolu/Fermé
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 - 7 juin 2005 à 11:23
 hafid - 28 août 2012 à 15:31
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
7 juin 2005 à 12:13
;-)

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 mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
7 juin 2005 à 13:19
Quelle érudition ! Merci bien, on va dire que ça va suffire. ;)
2
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
7 juin 2005 à 13:05
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
7 juin 2005 à 13:15
;-)

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 mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 10:32
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 10:49
;-)

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 mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 11:00
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 11:12
;-)

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

;-)
0
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 11:16
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 11:39
;-)

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 mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 11:44
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 12:20
;-)

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 mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 13:18
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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 13:30
;-) No problemo...
0
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 14:10
Dis voir WhiteFang, tu connais le php ? Enfin, je veux dire tu le maîtrise ?
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 14:26
;-)

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 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 14:27
;-) Mais ici, y'a des bons !! ;-) Enfin, sûrement meilleurs que moi...
0
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 14:28
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 mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497 > Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007
8 juin 2005 à 14:33
Et je viens de m'inscrire sur ton faux rhum ^^
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204 > Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007
8 juin 2005 à 14:52
;-)

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

;-)

Ps: Cool.. ;-) Merci..
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
8 juin 2005 à 17:13
;-)

Bien !
... Et quand tu auras le temps fait nous une jolie petite Userform ! ;-)
0
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
8 juin 2005 à 17:58
Lol on verra ;9
0
Erdnax Messages postés 2273 Date d'inscription mercredi 1 octobre 2003 Statut Contributeur Dernière intervention 1 octobre 2007 497
22 juin 2005 à 14:35
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
ajouter ca :
windows_name.Repaint
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
22 juin 2005 à 20:21
;-)

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
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 lundi 23 juin 2008 Statut Membre Dernière intervention 31 juillet 2008
30 juin 2008 à 15:13
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