XL 2013 Utiliser userform comme barre de progression pendant l'execution d'une macro

ksimat

XLDnaute Junior
Bonjour au forum,

En glanant sur le NET (Merci à tous ceux qui reconnaîtront un bout de leur trouvaille) j'ai concocté une macro qui sauve d'abord les modifications du classeur actif puis enregistre une copie du classeur après avoir effacé au préalable certaines données de certains onglets. Dans mon classeur original, la procédure dure entre 10 et 15 secondes pendant lesquelles je voudrais faire patienter l'utilisateur en affichant un userform contenant une barre de progression avec le pourcentage de l’évolution. J'ai opté pour le userform car mon excel n'a pas le contrôle ProgressBar (la liste des contrôles supplémentaires ne s'affiche pas malgré toutes mes tentatives et recherches). Je joins un fichier avec plus de détails. J'ai recherché et trouvé des exemples de ce types mais je n'ai pas pu les adaptés à ma macro.

Merci d'avance.
 

Pièces jointes

  • TestProgressBare.xlsm
    38.6 KB · Affichages: 84

Dranreb

XLDnaute Barbatruc
Bonjour.
Et si vous l'équipiez de cette méthode :
VB:
Option Explicit

Public Sub Afficher(ByVal Pourcent As Double)
Label2.Font.Name = "Terminal"
Label2.Caption = String(Pourcent * 64, "Û")
If Not Me.Visible Then Me.Show
End Sub
Et dans la procédure
VB:
Sheets("Notes1").Range("C6:V105").ClearContents: UserForm1.Afficher 1 / 4
    Sheets("Notes2").Range("C6:V105").ClearContents: UserForm1.Afficher 1 / 2
    Sheets("Notes3").Range("C6:V105").ClearContents: UserForm1.Afficher 3 / 4
    Sheets("Listes").Range("K7:L26,C7:F106,H7:H106").ClearContents: UserForm1.Afficher 1
 
Dernière édition:

ksimat

XLDnaute Junior
Bonjour, Danreb, le forum...
Je vous remercie Danreb pour votre aide mais vous excuserez mon incompétence. Je ne parviens pas à appliquer vos conseils. Pour la partie option explicit je l'ai placée dans un nouveau module. Mais pour le reste je ne sais pas à quel niveau et dans quelle procédure je dois mettre ce code. Je vous prie de me confirmer, s'il vous plait, si j'ai bien utilisé "les lignes de codes pour afficher et masquer l'userform1).
Je joins le fichier test à toute fin utile.
Merci
 

Pièces jointes

  • TestProgressBare.xlsm
    38.6 KB · Affichages: 43

Dranreb

XLDnaute Barbatruc
Si, ça à l'air de marcher, mais ça va trop vite pour qu'on le voie une fois enlevé tous les Select et Selection

Edit: Ah non, je me suis trompé j'avais encore l'ancien sous les yeux.
En fait vous n'avez rien modifié ni dans la Sub Bouton2_Cliquer ni dans l'UserForm1 ?

Option Explicit est à placer en tête de tous les modules pour faciliter la mise au point.
 
Dernière édition:

ksimat

XLDnaute Junior
Salut Danreb,
Je vous cite "En fait vous n'avez rien modifié ni dans la Sub Bouton2_Cliquer ni dans l'UserForm1 ?"

Eh bien, c'est là où je galère. Je ne sais pas exactement quoi changer, surtout dans l'userform1. Depuis plusieurs jours je pioche et bute sur cela, car je voudrais le résoudre avec mes propres investigations. Je crois que je suis brouillé avec trop de lecture et tentatives.
Je vais encore creuser et si je ne tombe pas sur le filon d'or recherché, peut être j'arriverai à la nappe de pétrole: je gagne dans tous les cas.
Merci
 

ksimat

XLDnaute Junior
Re-bonjour Danreb, le forum,
Danreb, voilà en fichier joint ce que j'ai fait. Cela ne marche pas. je crois je me suis mélangé les pédales. Merci de jeter un coup d'oeil critique sur mon code.
 

Pièces jointes

  • TestProgressBare1.xlsm
    41.3 KB · Affichages: 38

ksimat

XLDnaute Junior
Voilà, après correction, il me semble que j'avance enfin. Seulement l'animation de la progression n'est pas visible. Est-ce dû à la vitesse d'exécution comme vous dites? Est-ce qu'il y a un moyen de s'assurer de son fonctionnement en allant pas à pas ou en augmentant la charge de travail qui ralentirait l'exécution par exemple. A cet effet, j'ai mis l'userform en mode showmodal=true ce qui le fige. En fermant chaque fois l'userform par la croix on voit une succession de 0000000000 qui s'affiche dans le label2.
Par ailleurs je voudrais afficher le pourcentage de progression dans le label3.
Merci Maître Danreb
 

Pièces jointes

  • TestProgressBare2.xlsm
    35.3 KB · Affichages: 33

ksimat

XLDnaute Junior
Bonsoir Danreb, le forum,
Danreb, votre userform est merveilleux mais je n'ai pas pu le comprendre et l'adapter à mon projet, malgré deux jours de galère. Merci pour l'exercice, c'est tout bénéfique car j'ai beaucoup acquis.

Par contre avec l'aide de Danreb je suis arrivé à mettre en place un userform contenant une barre de progression (label2) qui s'affiche pendant l'exécution de la macro liée à un bouton "créer un fichier". Le système semble fonctionner sauf qu'il y a deux défaillances:

1) la barre de progression affiche une suite de zéros 00000000000 au lieu d'un remplissage uniforme. Je ne sais pas comment confectionner et animer ce truc.

2) Je voudrais que le label3 présent dans l'userform affiche le pourcentage de la progression de l'exécution de la macro.

Je sollicite une aide pour toute correction ou d'amélioration du projet.
Je joins un le fichier test pour toute personne qui voudrait apporter sa pierre à mon édifice.
Merci d'avance.
 

Pièces jointes

  • TestProgressBare2.xlsm
    42.9 KB · Affichages: 57

Dranreb

XLDnaute Barbatruc
Bonsoir.
Ben non, si l'UfmBarProg vous plait, c'est lui qu'il faut utiliser !
Aucune adaptation n'est à effectuer dans les modules UFmBarBrog ni MBarreProg.
Juste quelque chose comme ça dans module1 :
VB:
Sub Bouton2_Cliquer()
Application.ScreenUpdating = False
Dim Reponse As Integer, X$, Fichier$
Reponse = MsgBox("ATTENTION!  VOUS ETES SUR LE POINT DE CRÉER UN NOUVEAU FICHIER VIERGE. Etes vous sûr de vouloir CONTINUER?", _
    vbYesNo + vbQuestion, "CREATION D'UN NOUVEAU FICHIER VIERGE")
If Reponse = vbYes Then 'Si oui
    Tâche "Création", 6, "actions"
    ThisWorkbook.Save: OùÇaEnEst
    Sheets("Notes1").Range("C6:V105").ClearContents: OùÇaEnEst
    Sheets("Notes2").Range("C6:V105").ClearContents: OùÇaEnEst
    Sheets("Notes3").Range("C6:V105").ClearContents: OùÇaEnEst
    Sheets("Listes").Range("K7:L26,C7:F106,H7:H106").ClearContents: OùÇaEnEst
    X = ActiveWorkbook.FullName
    Fichier = Mid(X, 1, InStrRev(X, "\")) & "Copie_" & ActiveWorkbook.Name
    Application.DisplayAlerts = False
    ThisWorkbook.SaveCopyAs Fichier: OùÇaEnEst
    MsgBox "UN NOUVEAU FICHIER VIERGE A ÉTÉ CRÉÉ. Vous devez d'abord le RENOMMER avant de l'UTILISER pour un AUTRE GROUPE.", _
      vbInformation, "CONFIRMATION DE LA CREATION DU NOUVEAU FICHIER VIERGE"
    ThisWorkbook.Close False
Else 'Si non
   MsgBox "CREATION DE FICHIER ANNULEE.", vbInformation, "ANNULATION"
   End If
End Sub
 

Statistiques des forums

Discussions
298 015
Messages
1 965 153
Membres
200 864
dernier inscrit
b.sami