Rechercher : dans
Par :

[VBA] ProgressBar

Dernière réponse le 30 jun 2008 à 15:13:29 Erdnax, le 7 jun 2005 à 11:23:48 
 Signaler ce message aux modérateurs

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.

@+
P'tit Suisse

Meilleures réponses pour « [VBA] ProgressBar » dans :
Désactiver l'exécution de certains programmes au démarrage VoirDésactiver l'exécution de certains programmes au démarrage - Windows 98/Me/2000/XP/Vista Avec msconfig Avec WinPatrol Avec Startuplite Avec CCleaner Remarques Lorsque vous installez des logiciels, certains s'exécutent à chaque...
Supprimer complètement un programme VoirMalgré la désinstallation d'un programme, il se peut que des clés de registre ou des fichiers soient encore présents sur le PC. Si la méthode "classique" (clic droit/supprimer) ne fonctionne pas, il suffit d'utiliser l'éditeur du registre. Mise en...
Lancer un programme au démarrage du PC VoirLe problème Les solutions 1- Sans toucher au registre 2- En modifiant le registre Désactiver son lancement Le problème Certains programmes tels que Mozilla Firefox, Internet explorer ou encore les programmes de messagerie électronique ne...
Télécharger ProgDVB VoirLa diffusion de programme en numérique est de plus en plus en vogue depuis l'apparition de la connexion haut-débit. ProgDVB est un programme destiné à regarder des chaînes TV et à écouter des stations radio sur votre ordinateur. Il supporte le DVB-S...
VBScript - Les fonctions et les procédures VoirLa notion de procédure On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction (ou procédure)...
Enterprise Resource Planning (ERP) - Progiciel de Gestion Intégr VoirIntroduction aux ERP Les ERP (en anglais Enterprise Resource Planning), aussi appelés Progiciels de Gestion Intégrés (PGI), sont des applications dont le but est de coordonner l'ensemble des activités d'une entreprise (activités dites verticales...
Introduction à la programmation des CGI VoirPrésentation de l'interface CGI Un script CGI (Common Gateway Interface, traduisez interface de passerelle commune) est un programme exécuté par le serveur web (on dit généralement « côté serveur »), permettant d'envoyer au navigateur de...

1

WhiteFang, le 7 jun 2005 à 12:13:50

;-)

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

;-) Wild and Free

Répondre à WhiteFang

2

Erdnax, le 7 jun 2005 à 13:05:50

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.

@+
P'tit Suisse

Répondre à Erdnax

3

WhiteFang, le 7 jun 2005 à 13:15:17

;-)

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...

;-)
Wild and Free

Répondre à WhiteFang

4

Erdnax, le 7 jun 2005 à 13:19:22

Quelle érudition ! Merci bien, on va dire que ça va suffire. ;)
P'tit Suisse

Répondre à Erdnax

5

Erdnax, le 8 jun 2005 à 10:32:01

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é ?

@+
P'tit Suisse

Répondre à Erdnax

6

WhiteFang, le 8 jun 2005 à 10:49:22

;-)

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")...

;-) Wild and Free

Répondre à WhiteFang

7

Erdnax, le 8 jun 2005 à 11:00:18

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
P'tit Suisse

Répondre à Erdnax

8

WhiteFang, le 8 jun 2005 à 11:12:55

;-)

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

;-) Wild and Free

Répondre à WhiteFang

9

Erdnax, le 8 jun 2005 à 11:16: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.
P'tit Suisse

Répondre à Erdnax

10

WhiteFang, le 8 jun 2005 à 11:39:06

;-)

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 !!

;-) Wild and Free

Répondre à WhiteFang

11

Erdnax, le 8 jun 2005 à 11:44:02

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 ? ^^
P'tit Suisse

Répondre à Erdnax

12

WhiteFang, le 8 jun 2005 à 12:20:13

;-)

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...

;-) Wild and Free

Répondre à WhiteFang

13

Erdnax, le 8 jun 2005 à 13:18:02

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 ;)
P'tit Suisse

Répondre à Erdnax

14

WhiteFang, le 8 jun 2005 à 13:30:45

;-) No problemo... Wild and Free

Répondre à WhiteFang

15

Erdnax, le 8 jun 2005 à 14:10:26

Dis voir WhiteFang, tu connais le php ? Enfin, je veux dire tu le maîtrise ? P'tit Suisse

Répondre à Erdnax

16

WhiteFang, le 8 jun 2005 à 14:26:10

;-)

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...

;-) Wild and Free

Répondre à WhiteFang

17

WhiteFang, le 8 jun 2005 à 14:27:25

;-) Mais ici, y'a des bons !! ;-) Enfin, sûrement meilleurs que moi... Wild and Free

Répondre à WhiteFang

18

Erdnax, le 8 jun 2005 à 14:28:34

Enfait c'est bon, on vient à l'instant de résoudre le problème. Merci quand même ^^ P'tit Suisse

Répondre à Erdnax

19

Erdnax, le 8 jun 2005 à 14:33:35

Et je viens de m'inscrire sur ton faux rhum ^^ P'tit Suisse

Répondre à Erdnax

20

WhiteFang, le 8 jun 2005 à 14:52:43

;-)

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

;-)

Ps: Cool.. ;-) Merci.. Wild and Free

Répondre à WhiteFang

21

Erdnax, le 8 jun 2005 à 14:56:54

Non, cette fois c'est pas moi qui avait un problème, j'aidais qqun d'autre, c'est bien quand chacun met ses connaissances à dispo.

Mais si jamais pour info, pour mon cas j'ai simplement mis :

Application.StatusBar = "Veuillez patienter durant le recalcul des données (~2mn)."

Simple, pas très visuel, mais toujours mieux que rien. Et vu qu'Excel donne l'impression de planter (ce qui est en fait un peu le cas), la barre d'etat ressort plus, donc c'est plus visible ;)
P'tit Suisse

Répondre à Erdnax

22

WhiteFang, le 8 jun 2005 à 17:13:34

;-)

Bien !
... Et quand tu auras le temps fait nous une jolie petite Userform ! ;-)
Wild and Free

Répondre à WhiteFang

23

Erdnax, le 8 jun 2005 à 17:58:24

Lol on verra ;9 P'tit Suisse

Répondre à Erdnax

24

Erdnax, le 22 jun 2005 à 14:35:03

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
(_..:: P'tit Suisse ::.._)

Répondre à Erdnax

25

WhiteFang, le 22 jun 2005 à 20:21:05

;-)

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...

;-) Wild and Free

Répondre à WhiteFang

26

Pierre, le 31 mai 2007 à 12:30:44

Salut j'ai exactement le problème du fond blanc. Quelqu'un sait coment le résoudre ?

Répondre à Pierre

27

 Etienne2323, le 30 jun 2008 à 15:13:29

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

Répondre à Etienne2323