Microsoft 365 UserForm barre de chargement déroulement d'un programme

spike29

XLDnaute Occasionnel
Bonjour,

J'ai un programme faisant appel à une série de macro. l’exécution de l'ensemble du programme met un certain temps et je souhaiterai donc mettre en place un Userform afin de montrer à l'utilisateur la bonne exécution du programme via :

- Une barre de chargement accompagné d'un % d’exécution
- Une textBox affichant au fur et à mesure la séquence du programme qui est en court d’exécution

Le programme faisant appel à tout une série de macro, difficile de précisément mesurer l'avancement au globale de celui-ci.
J'aimerai donc via un système de balises placées entre chaque macros faisant évoluer l'avancement du % d’exécution et de la barre de chargement.

J'ai essayé de creuser le sujet mais je ne suis pas très à l'aise avec l'utilisation des UseForms, c'est pourquoi je vous transmet un fichier exemple qui reprend la structure de mon programme. J'y ai créer l'userform que je souhaite utiliser.

Le code du programme principale utilisé :

J'ai indiqué dans des commentaires, la manière dont j'imagine déployer les différentes balises d’exécution du programme.
Pour information je travail sous office 365 et je suis en 64 bits. Exit donc l'ensemble des formatages en Kernel32, ils ne fonctionnent pas chez moi.

Merci d'avance pour votre aide.

Bonne fin de journée.

VB:
Sub MainProgramm()

Dim start As Single
Dim Usf As Object


start = Timer

    With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
 

    If Usf Is Nothing Then
        Chargement_SITU.Show
        ProgressionPrecedente = 0
    End If
    
'% d'execution 5%
'commentaire textbox : Effacement des pages"
Call Effacer
'% d'execution 15%
'commentaire textbox : Test Boucles"

Call TestBoucles
'% d'execution 35%
'commentaire textbox : Test Boucles2"

Call TestBoucles2
'% d'execution 70%
'commentaire textbox : Test Boucles3"

Call TestBoucles3
'% d'execution 100%
'commentaire textbox : Fin du programme"

With Application
    .ScreenUpdating = True
    .EnableEvents = True
End With

MsgBox "durée du traitement: " & Timer - start & " secondes"


MsgBox "Fin du programme", vbInformation, Info

End Sub
 

Pièces jointes

  • Test.xlsm
    153.9 KB · Affichages: 20

sylvanu

XLDnaute Barbatruc
Supporter XLD

Pièces jointes

  • Test (2).xlsm
    158 KB · Affichages: 33
Bonjour spike29, sylvanu, Dudu2, le forum

Le programme faisant appel à tout une série de macro, difficile de précisément mesurer l'avancement au globale de celui-ci.
@spike29 , sur de gros programmes assez longs en exécution, j'utilise souvent une double barre de progression, une pour le programme maître, une pour les sous programmes. Pour la mise à jour des temps d'exécution intermédiaires, j'utilise cette fonction personnalisée Temps écoulé qui me retourne jusqu'aux centièmes de secondes. Un repaint de l'userform et un doevents peuvent être nécessaires pour la mise à jour de l'affichage en centièmes de secondes.

Je l'intégrerai en démo dans ton fichier tout à l'heure, je dois m'absenter !

Bien cordialement, @+
 
Dernière édition:

spike29

XLDnaute Occasionnel
Bonjour à tous, bonjour le fil,

Un grand merci pour vos différentes proposition.
@Dudu2 merci pour ton fichier, il me semble l'avoir vu passé en fouillant sur le forum, toutefois je n'ai pas réussi à l'adapter à mon besoin.

Concernant Bernard_XLD et Sylvanu encore une fois vous tapez dans le mille.
Vos deux programmes fonctionnent à merveilles après adaptation à mon fichier.

Je n'ai pas encore tranché sur le choix des deux solutions, a vrai dire je les trouvent bien toutes les deux :)

Encore merci à tous pour vos réponses aussi rapides qu'efficaces.

Bonne journée et bon weekend ;)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour spike29, le fil,

Je n'ai pas encore tranché sur le choix des deux solutions, à vrai dire je les trouve bien toutes les deux :)

voici un moyen facile pour les départager :
* sylvanu est Barbatruc, mais il n'est pas Membre du staff

* Yeahou est Membre du staff, mais il n'est pas Barbatruc
(il aurait pu l'être depuis longtemps si le système des grades était apparu plus tôt !)

moi je ne compte pas : je suis Barbatruc, mais je ne t'ai pas proposé de solution,
et je ne suis pas Membre du staff, ni Modo, ni Administrateur. 😜

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Dudu2,

pour créer le spoiler :​

Image.jpg

soan
 

spike29

XLDnaute Occasionnel
Bonsoir le fil !

Réponse tardive mais réponse quand même ^^
Effectivement Soan, choix difficile tant les deux solutions fonctionnent à la perfection.
Finalement j'ai opté pour la solution Bernard_XLD car il fallait bien choisir.
Celle de Sylvanu fonctionnait parfaitement et à mon sens elle a l'avantage d'être plus légère que le déclenchement d'un Userform.

Toutefois au niveau mon programme la différence est minime et je préfère l'esthétisme d'un userform donc j'ai opté pour ce dernier.

Mais je me suis gardé de côté la technique du statusbar qui je trouve est très intéressante.

Encore une fois, un grand merci à tous pour votre aide et vos réponses toujours aussi enrichissantes ;)

Bonne soirée
 

spike29

XLDnaute Occasionnel
Petite piste d'amélioration.

J'en profite, dans ce cas précis ou j'ai deux solutions qui me sont apportées et qui répondent parfaitement à ma problématique, j'aurais aimé pouvoir les sélectionner toutes les deux comme solution.
Le forum ne permet pas de sélectionner plusieurs réponses comme solutions.
Dans mon cas et dans plein d'autres je suppose ça serait un plus. En plus d'être gratifiant pour leurs auteurs, cela permet d'indiquer aux futurs lecteurs l'ensemble des réponses qui fonctionnent et répondent à la problématique.

Bonne journée à tous et encore merci !
 

David Aubert

XLDnaute Barbatruc
Administrateur
Modérateur
Bonjour à tous, bonjour @spike29,
Oui je suis d'accord ce n'est pas top de ne pas pouvoir choisir plusieurs solutions.
Malheureusement l'outil est ainsi fait pour l'instant.
J'espère voir arriver une solution pour améliorer cela.
En attendant tu peux utiliser la fonctionnalité de votes qui se trouve juste au dessus de la case "solutions".
Tu peux voter positivement pour tous les posts qui t'ont aidé à trouver la solution.
C'est déjà un entre deux pas si mal :)
Bonne journée
David
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 126
Membres
112 666
dernier inscrit
Coco0505