Mise à jour de la barre de progression

Salut à tous,

J'aimerais comprendre pourquoi ma barre de progression ne fonctionne pas dans ce code qui sert à compiler différents fichiers (ajout des différentes lignes). En effet, le userform apparait et la barre est complète à la fin, mais aucun rafraichissement malgré le DoEvents.

Public Count As Integer

Sub Compilateur()

Dim Twb As Workbook
Dim Awb As Workbook
Dim Rep As FileDialog
Dim Delws As Integer
Dim Nbr As Integer
Dim Folder As String
Dim Asn As String
Dim nf As String

Set Twb = ThisWorkbook
Set Rep = Application.FileDialog(msoFileDialogFolderPicker)

    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False

        ' Affichage barre de progression
Count = 0
Chargement.Show vbModeless

        'Ajout des entrÈes
Nbr = ThisWorkbook.Worksheets.Count

ChDir "C:\Users\aaroard\Documents\Macros\Compilation\Data\"
nf = Dir("*.xl*", vbNormal)

Do Until nf = ""

Count = Count + 1

    For k = 1 To Nbr

'Corps de la boucle
        Workbooks.Open Filename:=nf
        Worksheets(k).Select
        Worksheets(k).UsedRange.Offset(1, 0).Copy
        ThisWorkbook.Worksheets(k).Activate
        Range("A1048576").End(xlUp).Offset(1, 0).Select
        Worksheets(k).Paste
        Workbooks(nf).Close
        Range("A1048576").End(xlUp).Offset(1, 0).Select

        DoEvents
    Next

     nf = Dir

Loop

Twb.Worksheets(1).Select
Range("A1").Select

    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True

End Sub

J'ai aussi tenté un "chargement.repaint" sans plus de succès.

Le userform chargement est tout bête (je ne me soucis pas de l'esthétique pour le moment, je veux juste que ma barre progresse avant d'adapter la formule !) :

Sub UserForm_Activate()

Bar.Width = Count * 50

End Sub

Merci pour vos réponses, malgré mes recherches et tentatives je suis un peu perdu...!

Bonjour Aurel59, peux-tu joindre ton fichier excel avec le userform utilisé? Sans ça, il va être difficile de t'aider.

Merci d'avance.

Voici le fichier,

Il faut juste changer le répertoire d'accès (il y a une partie en commentaire qui servira à sélectionner le dossier avec les fichiers de même structure à compiler, et qui est en chantier)

La macro fonctionne jusqu'ici, mis à part ce soucis de barre !

Un grand merci pour le coup de main !

19compilation.xlsm (25.62 Ko)

Je ne vois pas comment ton code pourrait marcher ^^

Tu exécute le code suivant UNE FOIS (à l'ouverture de ton UserForm1)

Bar.Width = Count * 40

Sauf que tu ne transmets jamais la valeur "Count" ni ne la met à jour. Ta barre de progression ne peut pas fonctionner. (D'ailleurs comme tu ne donnes pas de valeur à Count, il prend comme valeur 0. et 40 * 0 = 0 =)

Le fait d'écrire

Bar.Width = Count * 40

ne veut pas dire qu'en permanence, la largeur de la barre est recalculée.

Avant d'aller plus loin, peut-tu me dire comment ton avancement doit être déterminé? Lorsque tous les fichiers xl ont été traités?

Merci de ta réponse ! Aaah, je crois que tu me fais toucher du doigt un truc, mais j'ai besoin de comprendre un détail...

Le "Count" est incrémenté dans une boucle de la macro principale compilation et est mis en "Public"

Du coup, pourquoi ça ne fonctionnerait pas ?

Une fois la macro terminée, la barre passe de la largeur nulle du début à la largeur finale instantanément, je supposais donc que le Count tournait...!

Et non il ne tourne pas.

Je t'ai rajouté une fonction dans ton userform

Depuis ta procédure "Compilateur", pour faire progresser ta barre, il te suffit de taper le code suivant:

Chargement.pourcentage(pourcent)

Où pourcent est un INTEGER.

Maintenant ce qu'il faut me dire, c'est à quel moment la valeur du pourcentage doit changer, et comment il doit être calculé.

PS1: Chargement.pourcentage(x) ne peut être utilisé que lorsque le UserForm est lancé. Dans le code tu ne peux donc PAS FAIRE

Chargement.pourcentage(0)
Chargement.Show

PS2: La largeur finale de la bar de progression est surement fausse, je ne sais pas quelle est sa largeur finale, à toi de modifier

largeurMax = 150
22compilation.xlsm (21.23 Ko)

Merci pour ton initiative, ça permet de clarifier un peu mieux les choses dans mon cerveau embrumé !

L'idée serait que le pourcentage soit placé juste après le Do Until et avant le For k=1 to Nbr, et donc faire progresser la barre de chargement chaque fois qu'un fichier a été ajouté.

Je compte ajouter une info montrant où en est le traitement dans le userform à terme (genre "Traitement du fichier 45/750") donc ça sera pour le mieux

Question à moitié stupide, mais le userform est uniquement là pour afficher la progression?

Quelle est l'information la plus importante pour toi, la barre de progression, ou le message de progression?

L'idée que j'ai, c'est au lieu d'utiliser un UserForm, simplement mettre ta progression dans la barre de tâches de Excel:

Dim nbFichiers as Integer

nbFichiers = 999

for i = 1 to nbFichiers
Application.StatutBar = "Traitement du fichier " & i & " sur nbFichiers"
next i

Je pensais le mettre au dessus de la barre dans un Label, mais au pire ce n'est pas le plus important, je compte surtout sur la barre pour les utilisateurs qui se plaignent de ne pas avoir de visibilité sur le temps d'attente (parfois plusieurs milliers de fichiers à traiter).

Bon voilà quelques modifications qui devraient te plaire. Par contre je me suis rendu compte de l'endroit où tu souhaitais calculer le pourcentage et le mettre à jour:

De cette manière là c'était impossible sans modification.

Tu utilises un Do Until car tu ne sais pas combien il y a de fichiers à traiter, donc tu ne sais PAS calculer de pourcentage. La solution, avoir une première boucle qui te compte le nombre de fichiers (une boucle pour du beurre), et ensuite ton programme.

Et tu as de la chance, je t'ai fait les changements. à toi de tester

87compilation.xlsm (24.65 Ko)

D3d9x...c'est juste fantastique ! Je comprends désormais pourquoi mon raisonnement était erroné, et effectivement je n'avais pas les connaissances pour sortir de l'ornière.

Un énorme merci d'avoir pris la main dessus et pour ta patience

Ravi d'avoir pu t'aider.

Bonne utilisation

Rechercher des sujets similaires à "mise jour barre progression"