Barre de progression

Nonno 94

XLDnaute Occasionnel
:confused: :confused: Bonjour le Forum,

j'ai besoin de votre aide pour me dire pour quelle raison, lorsque dans le fichier joint, la macro ci-dessous est lancée,

Code:
Sub ShowUserForm()
    UserForm1.Show
End Sub

la barre de progression s'affiche avec ce code :

Code:
Private Sub UserForm_Activate()
    UserForm1.Label2.Width = 0
    Call Main
End Sub

et pas avec celui-là :

Code:
Private Sub UserForm_Activate()
    UserForm1.Label2.Width = 0
    Call Insérer        'Main
End Sub

???

Je vous remercie par avance pour vos réponses et vous souhaite un bon après-midi.
Cordialement.

Nonno 94.
 

Pièces jointes

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Barre de progression

Re-bonjour,

l'animation de la barre de progression et la sauvegarde sont demandées dans le code:
d'abord l'animation ETensuite la sauvegarde
il n'est pas possible de faire les deux en même temps

comme je l'ai déjà signalé au post#5:
il ne faut pas predre de vue que l'ajout d'une barre de progression va inévitablement allonger la procédure
est-ce le but recherché ?
et l'exemple donné à la réponse précédente (#15) est le type même de la procédure inutile puisqu'elle ne peut pas se dérouler en même temps que la sauvegarde et a pour effet de retarder l'exécution de celle-ci.

le problème étant:
En fait je souhaite créer une barre de progression qui s'affiche lors de l'enregistrement, la copie et la fermeture de mes fichiers; procédure relativement longue dont j'aimerais suivre la progression.
la réponse est: ce n'est pas possible

une solution de remplacement serait de mettre un message dans la StatusBar
Application.StatusBar = "Prennez le temps d'aller boire un café, j'effectue la sauvegarde"

Pour le cas où la procédure effectuerais la sauvegarde de 10 fichiers, cela reste possible de faire progresser une barre de 10% entre chaque sauvegarde


Sinon, il n'est pas possible de manger de la farine en sifflant la Marseillaise

à+
Philippe
 

jpb388

XLDnaute Accro
Re : Barre de progression

Bonjour à tous

Pour la barre non car il faut une boucle ou l'étaler sur une routine mais impossible juste sur une instruction c'est pour cela que j'avais parlé de simulacre

pour le curseur je suis étonné il doit apparaitre un sablier ou un rond bleu selon les types excel

chez moi j'ai 2 ordis avec le même excel sur l'un j'ai le sablier et sur l'autre le rond pourquoi mystère mais dans les deux cas la macro fonctionne

mais sinon le laisser tel quel me parait bien aussi
 

Modeste geedee

XLDnaute Barbatruc
Re : Barre de progression

Bonsour® Nonno 94
une barre de progression VBA à besoin de 2 informations

la quantification totale du process (temps total, nbr d'élement à traiter)
l'etat actuel du process (temps actuel , nbr élements traités)
dans le cas d'un process Windows(enregistrement, sauvegarde), il n'y a pas de de retour vers VBA de cet avancement
la progression ne pet donc etre suivi
(sauf via des API faire des interruption system pour connaitre cett avancement, genre usine à gaz qui de toute façon ralentirait le process lui-même comme la signalé Laurent)

tout au plus tu pourrais afficher et actualiser une horloge (On time) pour le temps écoulé, mais sans avoir de vue sur le temps final
qui de toute fàçon serait allongé ...
 

Nonno 94

XLDnaute Occasionnel
Re : Barre de progression

Re-bonjour à tous et merci pour tous vos conseils.

Ceux-ci m'ont amené à "réfléchir" (si, si !!) et à décider de remplacer la barre de progression par un label "d"attente".
Je réserve les barres de progressions pour des cas "plus adaptés".

J' ai donc créé ce label ainsi que vous le verrez dans le fichier joint pour qu'il reste affiché pendant toute la durée du traitement.
Comme il a décidé d'être sympa avec moi et de m'encourager, il reste effectivement affiché pendant toute la durée.
Petit problème cependant, le texte qu'il contient n'apparaît ..... qu'en fin de traitement (c'eût été trop facile et je n'aurais pas eu à recourir à nouveau à votre expertise !!!!).

Ma nouvelle demande est donc de savoir s'il est possible de faire apparaître le texte dès le début du traitement; à savoir dès que l'on clique sur la commande "Fichier/Fermer" pour fermer le fichier après l'avoir copié et enregistré ?

Bon après-midi et à nouveau MERCI et BRAVO à tous pour vos conseils et votre patience.
Cordialement.

Nonno 94.
 

Pièces jointes

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Barre de progression

Re,

l'instruction fermant l'userform est placée trop haut dans le code, il faut la descendre un peu comme ceci:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

UserForm1.Show vbModeless

ActiveWorkbook.Save

ActiveWorkbook.SaveAs "C:\Users\Edmond\Documents\Médoc (Excel 2003)\R'sIG\Barre progression Copie.xls"
        'Range("A1").Select
                
Dim sht As Worksheet
Dim MotPass
MotPass = InputBox("Saisissez le mot de passe :", "R'sIG")
Unload UserForm1
                    Dim bonjour As String

    MsgBox prompt:="Le R'sIG vous remercie de votre visite et espère vous revoir bientôt.", Title:="Espace 'Rékia's I G'"
    'décommenter la ligne suivante pour que le programme se termine après l'affichage du message
    'unload me


End Sub
Bon après-midi et à nouveau MERCI et BRAVO à tous pour vos conseils et votre patience.
Cordialement.

Nonno 94.
Surtout pour la patience :D:D:D

à+
Philippe
 
Dernière édition:

Nonno 94

XLDnaute Occasionnel
Re : Barre de progression

En ce qui me concerne, j'ai patienté en dégustant une PILS et comme la réponse se faisait attendre, je me suis laissé tenter par une GUEUZE.

Plaisanterie mise à part, Monsieur le Belge (de ma part cette "appellation" est une grande marque de respect, pas vraiment justifiée au vu de vos performances, qui était celle sous laquelle un de vos compatriotes que j'ai cotoyé il y a quelques 20 ans s'est fait une réputation inégalée à ce jour dans le monde sportif français), votre modification de code n'a apporté aucun changement à l'affichage du texte du Label; celui-ci n'apparaît qu'après que l'on ait cliqué sur un des boutons de la MsgBox demandant si l'on souhaite remplacer l'ancienne copie.
Je l' ai testée sur un code plus long pour confirmation.
Voici ce code :


Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)


'Application.StatusBar = "Prennez le temps d'aller boire un café, j'effectue la sauvegarde"

    UserForm1.Show vbModeless
        'For i = 1 To 10000        '10000
            'UpDateProgressBar (i / 10000)   '(i / 10000)
    'Next


    Sheets("AIR ").Select
    
            ActiveSheet.Unprotect

        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
    Sheets("ESSI").Select
    
            ActiveSheet.Unprotect
            
        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
    Sheets("GEMA").Select
    
            ActiveSheet.Unprotect
            
        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
    Sheets("ICAD").Select
    
            ActiveSheet.Unprotect
            
        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
             
            
    Sheets("INGE").Select
    
            ActiveSheet.Unprotect
            
        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
    Sheets("IPSE").Select

            ActiveSheet.Unprotect

        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
                
    Sheets("LORE").Select

            ActiveSheet.Unprotect

        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
                
    Sheets("SCOR").Select

            ActiveSheet.Unprotect

        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
             
            
                
    Sheets("SES").Select

            ActiveSheet.Unprotect

        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
             
                
    Sheets("VINC").Select

            ActiveSheet.Unprotect

        Range("A140").Select
                k = ActiveCell.Value                                'Colonne à verrouiller
                l = ActiveCell.Value
                
            Plage = Cells(12, l).Address + "," + Range(Cells(16, l), Cells(17, l)).Address
                Range(Plage).Select
                Selection.Locked = True
                Selection.FormulaHidden = False

            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            
            
            
    Sheets("Evolution").Select
        Range("A137").Select
                k = 1
                l = ActiveCell.Value
            Cells(k, l - 6).Select
        Range("A1").Select
        
    Sheets("Evolution (Moy. mobiles)").Select
        Range("A136").Select
                k = 1
                l = ActiveCell.Value
            Cells(k, l - 6).Select
        Range("A1").Select
        
    Sheets("Evol. vs. CAC").Select
        Range("A110").Select
                k = 1
                l = ActiveCell.Value
            Cells(k, l - 6).Select
        Range("A1").Select
        
        
    Sheets("Rendement").Select
        Range("A110").Select
                k = 1
                l = ActiveCell.Value
            Cells(k, l - 6).Select
        Range("A1").Select
        
    Sheets("Rendement (moy. mobiles)").Select
        Range("A110").Select
                k = 1
                l = ActiveCell.Value
            Cells(k, l - 6).Select
        Range("A1").Select

    Sheets("Sélection").Select
        Saisie_Cours_Verrouiller
        
        
        
                ActiveWorkbook.Save
                
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\Edmond\Documents\Médoc (Excel 2003)\R'sIG\Sélection Barre Copie.xls" _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
        'Range("A1").Select
                

Dim sht As Worksheet
Dim MotPass
MotPass = InputBox("Saisissez le mot de passe :", "R'sIG")
Unload UserForm1
                    Dim bonjour As String

    bonjour = MsgBox(prompt:="Le R'sIG vous remercie de votre visite et espère vous revoir bientôt.", Title:="Espace 'Rékia's I G'")
    'décommenter la ligne suivante pour que le programme se termine après l'affichage du message
    'unload me


End Sub

Remarquez : vous pourrez toujours me dire que puisque le UserForm s'affiche (même sans texte), eh bien c'est parce qu'un traitement est ........en cours; ce qui est parfaitement exact !!

Je m'arrête là pour ne pas abuser de votre ......grande patience. Bonne soirée.
Très cordialement.

Nonno 94.
 

Nonno 94

XLDnaute Occasionnel
Re : Barre de progression

Bonsoir Monsieur Le Belge,

Si vous voulez bien vous en donner la peine, je vous invite à ouvrir le fichier joint pour y "découvrir un bricolage de code à la Nonno".
J'ai déjà fait pire.

Aussi, c'est décidé, moi qui n'en boit jamais, eh bien, .........."J'vais m'mettre à la bière" !!!!
C'est peut-être, après tout, la clef du succès Outre Quiévrain ?
Qu'en pensez-vous ?

Bonne soirée et toujours très cordialement.

Nonno 94.
 

Pièces jointes

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Barre de progression

Re-bonjour,

l'exemple posté au #23 ne m'est pas d'une grande utilité

par contre dans le code présenté au #22, je remarque qu'il y a 16 blocs similaires commençant par

Sheets("nom de la feuille").Select

la solution consistera à faire précéder ces 16 lignes d'une instruction qui aura pour but d'incrémenter la barre de progression d'une valeur de 6,25 ( 100/16 ) ou de 625 si la valeur max de la progressbar est de 10000


à+
Philippe
 

Nonno 94

XLDnaute Occasionnel
Re : Barre de progression

:confused: :confused: Bonjour Phlaurent55 et merci pour votre suggestion.

Afin de la mettre en application, auriez-vous la gentillesse de m'indiquer quelle est la modification du code à effectuer pour insérer la nouvelle instruction ?
Je ne suis, en effet, pas parvenu à la "trouver !!

Avec mes remerciements et en vous souhaitant une bonne journée.
Cordialement.

Nonno 94.
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Barre de progression

Re- bonjour,

après avoir vu sur ce fil de discussion un grand nombre d'exemples différents, je préfèrerais travailler directement sur le fichier réel (sans données confidentielles) dans le but de ne pas l'allonger indéfiniment, d'éviter de s'y perdre et apporter la réponse la mieux adaptée

Je serai très peu disponible ces prochains jours (un petit clic sur les liens ci-dessous pour comprendre)

à+
Philippe
 

Nonno 94

XLDnaute Occasionnel
Re : Barre de progression

Re-bonjour et merci pour la promptitude de votre réponse.

Le fichier sur lequel je travaille est trop lourd pour que je vous le fasse parvenir.

Le code que je souhaite modifier est celui du #22. Aussi, si vous voulez bien faire une tentative d'amélioration sur cette base ....
Dans le cas contraire, je me contenterai du code actuel.

Cordialement.

Nonno 94.
 

Nonno 94

XLDnaute Occasionnel
Re : Barre de progression

;) ;) Bonsoir Monsiieur Le Belge,

je savais (et je ne suis pas le seul n'est-ce pas ?) que j'avais des progrès (considérables) à faire en "Excel", mais j'ignorais qu' il en est de même en "belge"; car j'ai lu en #16 :

la réponse est: ce n'est pas possible

et aujourd'hui, je reçois 2 fichiers qui correspondent à ma demande et tendraient à prouver ......le contraire !!!!

Dans ces conditions, je ne peux que dire un grand BRAVO au Belge "patient"

Surtout pour la patience

et MERCI.

Ainsi, je connaissais parmi nos voisins et .....amis "Raymond la science" et j'ai découvert "Philippe l'expert ès Excel".
"ça doit s'arroser", non ?

Bonne soirée.
Cordialement.

Nonno 94.
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Barre de progression

Re,

comme j'ai dit au post #16:
l'animation de la barre de progression et la sauvegarde sont demandées dans le code:
d'abord l'animation ETensuite la sauvegarde
il n'est pas possible de faire les deux en même temps
et je maintiens que ce n'est pas possible

Ma dernière réponse apporté concerne ce qui se passe AVANT la sauvegarde
je maintiens donc qu'il n'est pas possible de faire évoluer une barre de progression PENDANT la sauvegarde
entendons par là , pendant l'instruction "Save"

D'où l'utilité , cher ami Français de poser les questions de manière très précises


"ça doit s'arroser", non ?
Pour moi ce sera un OrvaL :p

à+
Philippe
 

Discussions similaires

Réponses
3
Affichages
211
Réponses
3
Affichages
557
Réponses
49
Affichages
1 K

Statistiques des forums

Discussions
315 289
Messages
2 118 057
Membres
113 420
dernier inscrit
Mourad Ben Ghazela