XL 2010 Faire Fonctionner le contrôle "ProgressBar"

cathodique

XLDnaute Barbatruc
Bonjour,

Cela fait une semaine que je rame. Je n'ai pas de solution.
J'ai fait un fichier par rapport à mon original ne laissant que le strict nécessaire pour illustrer mon problème.
Le processus est le suivant:
  • au clic sur le bouton, demande de saisie d'une année pour créer un dossier
  • vérification de l'existence de ce dossier (création ou non)
  • mise en page de certaines feuilles
  • création du dossier et sous-dossier
  • copie du fichier sous un autre nom
  • enregistrement et ferme Excel.
Le processus est long, c'est pour cela que je voudrais ajouter une progressBar que je n'arrive pas à faire fonctionner.
En vous remerciant par avance.

Bonne journée.
 

Pièces jointes

  • ProgressBar.xlsm
    79.8 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
re
Bonjour @cathodique
mais c'est quoi ce fatra mon cher cathodique?

alors explication:
un control progressbar a une propriété (Max et Min) tu le règle comme tu veux en fonction de la taille et le visuel du pas

dans ton code tu remet toujours a une seconde elle peut pas avancer c'est sur

j'ai 15 actions a faire
donc par exemple
maprogressbar.max=100
maprogressbar.min=0
segment=100/15
for i= 1 to 15
maprogressbar.value=maprogressbar.value+segment
next
si tes actions sont gérées dans des modules la variable segment devra été public ou global module ou static dans le userform

juste comme ca en passant
on met une progressbar pour avoir un visuel afin de savoir quand c'est fini
perso même si j'adore m'amuser avec des effets visuels je met simplement un msgbox a la fin je ne peux pas le rater
je dis ça moi je dis rien ;)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si ça vous intéresse, j'ai un UFmProg très facile à utiliser dans la plupart des cas, muni d'une méthode Tâche pour le démarrer, à laquelle on indique entre autres combien de fois on le fera avancer, et une méthode Avance pour le faire avancer, à invoquer autant de fois qu'on l'aura spécifié à Tâche.
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Dranreb
perso je vais au plus simple

exemple j'ai 10 sub ou 10 fonctions a faire sur un fichier par exemple

je fait une sub mise ajour unique avec comme je l'ai dis précédemment une variable global module
a chaque sub ou fonction je lance la sub mise a jours
exemple je prend un userform et je lui met un progressbar
je ne met aucun code dedans
dans un module standard j'ai mes 10 sub ou fonction
pour l'exemple je simule une pose api sleep (elle n'est pas nécessaire en temps normal
la variable global module a pour valeur le MAX de la progressbar / par le nombre de fonctions ou sub a lancer
et dans chacune des subs je lance la mise à jour
au premier lancement de la mise ajour je show le userform si il n'est pas visible
c'est on ne peut plus simple
VB:
Public segment#
Function Pose(LapsedTime)
    ExecuteExcel4Macro "CALL(""kernel32"",""Sleep"",""JJ""," & (LapsedTime) & ")"
End Function

Sub mise_a_jour_progress()
  If visu.Visible = False Then visu.Show 0
    With visu.ProgressBar1
   If segment = 0 Then segment = .Max / 10
     .Value = .Value + segment
    .Parent.Repaint
If .Value >= .Max Then MsgBox "fini"
End With
DoEvents
End Sub

Sub action1()
    mise_a_jour_progress
    Pose 1000
    action2
DoEvents
End Sub

Sub action2()
    Pose 1000
    mise_a_jour_progress
    action3
End Sub

Sub action3()
    Pose 1000
    mise_a_jour_progress
    action4
End Sub

Sub action4()
    Pose 1000
    mise_a_jour_progress
    action5
End Sub

Sub action5()
    Pose 1000
    mise_a_jour_progress
    action6
End Sub

Sub action6()
    Pose 1000
    mise_a_jour_progress
    action7
End Sub

Sub action7()
    Pose 1000
    mise_a_jour_progress
    action8
End Sub

Sub action8()
    Pose 1000
    mise_a_jour_progress
    action9
End Sub

Sub action9()
    Pose 1000
    mise_a_jour_progress
    action10
End Sub

Sub action10()
    mise_a_jour_progress
End Sub
je lance la sub action1
résultat chaque sub met bien a jour la progressbar
demo.gif
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
on peut le faire pour une même su qui fairait plusieurs action relativement longues et sur la meme base de code
VB:
Public segment#
Function Pose(LapsedTime)
    ExecuteExcel4Macro "CALL(""kernel32"",""Sleep"",""JJ""," & (LapsedTime) & ")"
End Function

Sub mise_a_jour_progress2(nbAction&)
  If visu.Visible = False Then visu.Show 0
    With visu.ProgressBar1
   If segment = 0 Then segment = .Max / nbAction
     .Value = .Value + segment
    .Parent.Repaint
If Round(.Value, 0) >= .Max Then MsgBox "fini"
End With
DoEvents
End Sub

'j'ai 6 actions a faire dans une sub qui prennent beaucoup de temps
Sub PlusieursActionDansUneSub()
   'je fait quelque chose
   Pose 1000
    mise_a_jour_progress2 6
    'je fait autre chose chose
   Pose 1000
    mise_a_jour_progress2 6
   'je fait encore quelque chose
   Pose 1000
    mise_a_jour_progress2 6
   'je continu c'est la farandole
   Pose 1000
    mise_a_jour_progress2 6
  'et allez on continu!!
   Pose 1000
    mise_a_jour_progress2 6
  'jamais ça s’arrête
   Pose 1000
    mise_a_jour_progress2 6
 
End Sub
 

cathodique

XLDnaute Barbatruc
re
Bonjour @cathodique
mais c'est quoi ce fatra mon cher cathodique?

alors explication:
un control progressbar a une propriété (Max et Min) tu le règle comme tu veux en fonction de la taille et le visuel du pas

dans ton code tu remet toujours a une seconde elle peut pas avancer c'est sur

j'ai 15 actions a faire
donc par exemple
maprogressbar.max=100
maprogressbar.min=0
segment=100/15
for i= 1 to 15
maprogressbar.value=maprogressbar.value+segment
next
si tes actions sont gérées dans des modules la variable segment devra été public ou global module ou static dans le userform

juste comme ca en passant
on met une progressbar pour avoir un visuel afin de savoir quand c'est fini
perso même si j'adore m'amuser avec des effets visuels je met simplement un msgbox a la fin je ne peux pas le rater
je dis ça moi je dis rien ;)
Bonjour @patricktoulon ;),

Houlala, tu me fais rappeler un de mes profs. Il était sympa mais avait du mal à abaisser son niveau à celui de ses élèves. On est pas tous nantis du même niveau intellectuel.
Mon ami, je comprends vite mais il faut m'expliquer longtemps:cool:.
j'ai reculé au max l'ouverture d'un post, je croyais y arriver seul.
Au lieu de me mettre un doigt dans l’œil, j'ai mis tout le bras.
Merci beaucoup, pour tes explications. Je vais m'y remettre en espérant arriver à bon port.

Bonne journée.
 

patricktoulon

XLDnaute Barbatruc
re
ce n'est pas une question d' intellect
mais seulement de raisonnement
d'ailleurs je suis nul en tout je connais même pas la couleur du cheval blanc d'henry 4
si tant est!!! qu'il y en ai eu un 4 eme par ce qu'avec les histoires moi hein ;)
je fais une faute tout les 4 mots dans une phrase et encore niveau ce1 (et je m'en fou d'ailleurs )
enfin ca arrive surtout quand il y a beaucoup de lignes ( moi au dessus de 3 c'est mort)
et c'est sans compter sur une dyslexie aiguë du lobe pariétal droit de l'oreille gauche
des fois je me demande
Mais où est donc or ni car j'arrive jamais à le chopper celui là


nan... j'arrête .. Ok je sort
🤣
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Bonjour.
Si ça vous intéresse, j'ai un UFmProg très facile à utiliser dans la plupart des cas, muni d'une méthode Tâche pour le démarrer, à laquelle on indique entre autres combien de fois on le fera avancer, et une méthode Avance pour le faire avancer, à invoquer autant de fois qu'on l'aura spécifié à Tâche.
Bonjour @Dranreb ;),

Je sais que tu es très compétent en la matière. Lors de mes recherches, j'ai bien trouvé un de tes fichiers.
Je t'avoue que je n'ai pas su l'adapter à mon userform du fichier joint. C'est assez compliqué pour moi, d'autant plus que je dois aussi l'adapter sur mon véritable fichier.
Mon objectif est de le faire sur mon urserform.

Merci beaucoup pour ta proposition.
 

cathodique

XLDnaute Barbatruc
re
ce n'est pas une question d' intellect
mais seulement de raisonnement
d'ailleurs je suis nul en tout je connais même pas la couleur du cheval blanc d'henry 4
si tant est!!! qu'il y en ai eu un 4 eme par ce qu'avec les histoires moi hein ;)
je fais une faute tout les 4 mots dans une phrase et encore niveau ce1 (et je m'en fou d'ailleurs )
enfin ca arrive surtout quand il y a beaucoup de lignes ( moi au dessus de 3 c'est mort)
et c'est sans compter sur une dyslexie aiguë du lobe pariétal droit de l'oreille gauche
des fois je me demande
Mais où est donc or ni car j'arrive jamais à le chopper celui là


nan... j'arrête .. Ok je sort
🤣
Re,
ce n'est pas une question d' intellect
mais seulement de raisonnement
On m'a donc raconter des bobards! Qui ont un bon sens de raisonnement?
je connais même pas la couleur du cheval blanc d'henry 4
Il n'avait pas un chameau blanc Henry 4 ?!!!🤣
et encore niveau ce1 (et je m'en fou d'ailleurs )
Tu as une longueur d'avance sur moi. je suis au niveau Ardoise (et je m'en Fouuuu, comme toi)

Merci pour ta démonstration.
Des fois, je ne comprends pas pourquoi on demande de fournir un fichier.
Je vais essayer de comprendre ton raisonnement et tenter d'arriver à mon but.
 

cathodique

XLDnaute Barbatruc
L'UFmProg est non modal. Par conséquent pour l'afficher depuis un autre UserForm il faut que celui ci ne soit pas modal non plus. S'il l'est, faire Me.Hide devant l'UFmProg.Tâche puis Me.Show après le traitement.
C'est très gentil de ta part. Mais je voudrais que ça soit sur mon userform. Mon fichier fonctionne bien. J'avais mis dans un label un message pour que l'utilisateur patiente. Mais j'ai trouvé que ça ne retenait pas assez son attention. D'où mon idée, de rajouter quelque chose de dynamique.
Je ne sais pas si vous (Dranreb et PatrickToulon) avaient ouvert mon fichier et consulté mon code.
J'ai passé pas mal de temps sur ce fichier pour craindre de tout massacrer, juste pour un ajout de dernière minute.
Merci beaucoup.

edit: c'est bien ton userform
1678205322105.png
 

cathodique

XLDnaute Barbatruc
Pourquoi voulez vous qu'il soit affiché sur votre UserForm ?
Il devrait être possible de positionner ses Left et Top par rapport à ceux de votre UserForm s'il n'est pas modal.
Je t'avoue qu'il y a beaucoup de choses que je n'arrive pas à retenir et assimiler.
La propriété de mon formulaire ShowModal est à False.
Tout ce fait via ce formulaire affiché en plein écran.
J'espère avoir répondu à ta question.
Merci pour ton intérêt.
Bonne soirée.
 

Dranreb

XLDnaute Barbatruc
Ben alors ça va, mon UFmProg devrait pouvoir s'afficher par dessus
Donc où que soit programmé votre traitement, il suffit d'y ajouter devant un UFmProg.Tâche Titre, NbrPrévus
et derrière NbrPrévus fois UFmProg.Avance.
Dans sa version la plus complète il utilise aussi quelques modules de service.
Tout est dans dans ce classeur
 

Pièces jointes

  • Progression.xlsm
    196.5 KB · Affichages: 5

cathodique

XLDnaute Barbatruc
Ben alors ça va, mon UFmProg devrait pouvoir s'afficher par dessus
Donc où que soit programmé votre traitement, il suffit d'y ajouter devant un UFmProg.Tâche Titre, NbrPrévus
et derrière NbrPrévus fois UFmProg.Avance.
Dans sa version la plus complète il utilise aussi quelques modules de service.
Tout est dans dans ce classeur
Merci beaucoup. Le fichier que tu viens de joindre faisait partie de ma petite biblio.
Je t'avoue que je suis incapable de prendre uniquement le nécessaire à utiliser dans mon fichier.
Je te promets que j'étudierais tes codes lorsque j'aurai un peu plus de temps.

Bonne soirée.
 

Discussions similaires

Statistiques des forums

Discussions
312 187
Messages
2 086 024
Membres
103 097
dernier inscrit
Benduch