Barre de progression pendant boucle While

yaciin

XLDnaute Nouveau
Bonjour le Forum,

J'utilise une boucle while pour empecher l'exécution de certains lignes dans ma macro avant la création de quelques fichiers. Je souhaite afficher une barre de progression ou bien un petit cercle animé ou n'importe quel animation, avec un message "veuillez patienter", le temps de l'exécution de creation des fichiers. (le temps que le programme est bloqué dans la boucle while)

Mon souci c'est que je connais pas le temps que la boucle while vas prendre, du coup je peux pas adopter les solutions classiques des barres de progression (rectangle dans un rectangle etc) car je connais pas le taux d'évolution des opérations (qui vont créer les fichiers necessaires pour la poursuite de la macro) pendant la boucle while.

Merci d'avance.
 

tbft

XLDnaute Accro
Re : Barre de progression pendant boucle While

Bonjour

je pense qu'il faudrat modifier la boucle while afin qu'elle puisse gérer la barre de progression.
il est possible d'afficher une page sur le quelle est ecrit "je travail et je rend dés que possible" avant de rentrer dans la boucle et de revenir à la page d'avant à la fin de l'éxécution de la boucle.

il doit y avoir des trucs comme ça sur le forum
 

Dranreb

XLDnaute Barbatruc
Re : Barre de progression pendant boucle While

Bonjour.
Je subodore qu'il devrait y avoir moyen d'exécuter un traitement préparatoire assez rapide permettant d'établir combien il va y avoir de fichiers à créer. Et dès lors qu'on connaît le nombre d'opérations élémentaires à exécuter, j'ai un petit Userform qui affiche:
- L'activité en terme de nombre d'opérations par seconde,
- Une barre de progression,
- Le pourcentage effectué du traitement,
- L'heure de fin prévue,
- Le délai restant jusqu'à cette heure.
Quelle que soit la durée d'une opé, qu'il y en ait une dizaine ou des dizaines millers, l'affichage n'est révisé que tous les quarts de seconde au maximum (ne serait-ce que pouvoir y lire quelque chose, mais aussi pour ne pas pénaliser par cette opération la durée du traitement).
Bien sûr, au début, l'affichage est d'autant moins chaotique que les durées des opérations élémentaires effectuées sont proches de leur durée moyenne globale.
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Barre de progression pendant boucle While

bonsoir à tous,

voir ci-joint !
 

Pièces jointes

  • BarreProgress1.xls
    35 KB · Affichages: 151
  • BarreProgress1.xls
    35 KB · Affichages: 172
  • BarreProgress1.xls
    35 KB · Affichages: 206
Dernière édition:

yaciin

XLDnaute Nouveau
Re : Barre de progression pendant boucle While

Bonjour et Merci tout le monde,

j'ai procédé différemment car on m'a compris qu'on peut pas faire une progression si y a pas une référence de ce progrès, du coup j'ai essayé d'utiliser un userform le temps d'attente, mais j'ai pas pu fermer cet userform à la fin du temps d'attente malgré plusieurs essais
voilà mon code :

'affichage du userform
sap.Show vbModeless

fichier_1 = "table_inventaire.txt"
fichier_2 = "table_mard.txt"
chemin = ThisWorkbook.Path & "\"

'premier temps d'attente
Set fso1 = CreateObject("scripting.filesystemobject")
While fso1.FileExists(chemin & fichier_1) = False
Wend
'deuxieme temp d'attente
Set fso2 = CreateObject("scripting.filesystemobject")
While fso2.FileExists(chemin & fichier_2) = False
Wend

'fermeture que j'ai essayé
sap.Hide
Unload sap

avec ou sans la ligne 19 (sap.hide) ça marche pas, il attend que je ferme le userform pr continuer l'exécution des lignes qui viennent parés le "Unload sap" dans ma macro :confused:
Help plz, c'est simple je devine mais ça me bloque :/
Merci
 

Dranreb

XLDnaute Barbatruc
Re : Barre de progression pendant boucle While

Bonjour.
Apparemment c'est un processus extérieur qui doit créer les fichiers pour qu'on puisse continuer ?
Dans ce cas il ne va pas avoir d'occasion de travailler s'il n'y a pas de DoEvents dans vos boucles !
 

Roland_M

XLDnaute Barbatruc
Re : Barre de progression pendant boucle While

tu ne pratiques pas correctement !
voir ce que t'explique Dranreb ! (que je salut au passage)

ça signifie qu'il te faut mettre ton code dans l'userf !
exemple avec un bouton dans l'usert pour lancer ce code !

Sub TonButton_Click()
fichier_1 = "table_inventaire.txt"
fichier_2 = "table_mard.txt"
chemin = ThisWorkbook.Path & "\"

'premier temps d'attente
Set fso1 = CreateObject("scripting.filesystemobject")
While fso1.FileExists(chemin & fichier_1) = False
Wend
'deuxieme temp d'attente
Set fso2 = CreateObject("scripting.filesystemobject")
While fso2.FileExists(chemin & fichier_2) = False
Wend

'ici avant end Sub tu mets unload me ou sinon tu clic sur la croix rouge de l'userf pour refermer !
unload me
end sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Barre de progression pendant boucle While

Il n'empêche que de telles boucles mobilisent toutes les ressources CPU au détriment des tâches en attente de traitement asynchrone. Je ne vois pas comment les fichiers pourraient se mettre à exister tout à coup, permettant de sortir des boucles, puisque rien d'autre ne peut tourner pendant ce temps ! Il faudrait déjà ajouter une instruction DoEvents dans les boucles pour qu'un autre processus ait l'occasion de fabriquer les fichiers.
 

Discussions similaires

Réponses
5
Affichages
557