Microsoft 365 ProgressBar dans traitement fichiers

patty58

XLDnaute Occasionnel
Bonjour à tous
J'ai écrit un "programme" pour renommer en série des fichiers.
Comme je trouve, lors de la sélection de répertoires où j'ai beaucoup de sous-répertoires et de fichiers, que le temps
est un peu long et que l'on se demande par conséquent s'il se passe quelque chose, j'ai voulu mettre un userform avec barre
de progression.
Mais je n'arrive pas à mettre ma macro "Patienter" de telle sorte que tout se passe de façon correcte.
Pour ce cas, fichier : Renommer_Fichiers_avec_mess-patience.xlsm

J'ai essayé avec userform différent en calculant le nombre de fichiers à traiter et par conséquent faire évoluer
en pourcentage...dans les 2 cas, je galère..rien n'est correct
Pour ce cas, fichier : renommer_test_progress_pcent.xlsm

Je vous joins les 2 fichiers, peu m'importe message simple (1er cas) ou pourcentage (2ème cas), l'essentiel est que tout se passe d'une
façon cohérente.

Je précise que je peux avoir de 10 fichiers à 5000 fichiers à renommer selon les cas.
Inutile de dire que j'ai parcouru beaucoup de forums, mais je n'ai pas réussi à adapter les exemples correctement pour mon cas.

Grand merci par avance à ceux qui pourront me sortir de là.
Bonne journée.
 

Pièces jointes

  • Renommer_Fichiers_avec_mess-patience.xlsm
    40.6 KB · Affichages: 6
  • renommer_test_progress_pcent.xlsm
    46.8 KB · Affichages: 11

job75

XLDnaute Barbatruc
Bonjour patty58, bienvenue sur XLD,

Je n'ai pas ouvert les fichiers mais le problème est simple.

Pour qu'une barre de progression soit cohhérente il faut pouvoir estimer dès le début la durée du traitement.

Donc ici connaître au moins le nombre de fichiers à traiter.

Mais justement ce n'est qu'en fin de traitement qu'on peut connaître le nombre de fichiers - je suppose que l'algorithme est basé sur la récursivité.

Pour faire patienter essayez de diffuser une douce musique :rolleyes:

A+
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

le plus simple est sans doute de faire apparaitre dans la barre de message le nombre de fichiers traités.
L'utilisateur voit que ça travaille, et s'il a une idée de la volumétrie peut estimer où il en est.
eric
 

patty58

XLDnaute Occasionnel
Bonsoir
En fait, j'ai essayé 2 méthodes , en comptant le nombre de fichiers et travailler avec pourcentage..
et aussi simplement en faisant évoluer ma barre , mais tout est trop confus pour moi, comme je vous l'ai dit , cela ne ressemble à rien
Ayez pitié, car j'étais dans l'informatique.. ne travaillais sous excel que peu pour moi seulement et suis à la retraite depuis un moment...donc une personne d'un certain âge qui a du mal à se concentrer des heures entières...et pourtant cela fait des jours que je galère
Merci à vous d'essayer de m'aider...
Je m'y remettrai encore demain
Bonne soirée
 

zebanx

XLDnaute Accro
Bonjour patty58, job75 ;) , eriiic;), le forum

J'en ai fini personnellement d'un userform pour afficher les temps de passages.
Pas trop compris votre fichier mais j'aime beaucoup les solutions apportées par RolandM et PatrickToulon sur ce fil là pour afficher une progressbar en bas d'excel.
C'est une autre approche mais cela peut peut-être être utilisable dans votre cas.
Par cas, considérer les informations présentées par JOB75 et ERIIIC avec un début et une fin pour paramétrer la progressbar.

xlment
zebanx
 

patty58

XLDnaute Occasionnel
Bonsoir
Merci à tous
En fait, je m'en suis sortie en mettant la liste des fichiers traités qui défilent dans un userform et c'est nickel. Je me cassais la tête avec des pourcentages ou autres, alors que c'était tout simple ainsi.
Merci encore.
Bonne soirée à tous.
 

job75

XLDnaute Barbatruc
Bonjour patty58, le forum,

Téléchargez les dossiers et fichiers zippés joints et voyez la barre de progression.

Cliquez sur le bouton Lancer pour exécuter le code :
VB:
Dim CheminInitial$, fso As Object, Nmax&, n&, L#, NouveauNom$ 'mémorise les variables

Sub Lancer()
CheminInitial = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Nmax = 0
n = 0
L = Feuil1.OLEObjects("Label1").Width
Feuil1.OLEObjects("Label2").Width = 0
Feuil1.Range("C2") = "0% des fichiers sont renommés"
NouveauNom = "Mon beau fichier " '"Classeur" 'à adapter
Compte CheminInitial
Renomme CheminInitial
End Sub

Sub Compte(chemin$)
Dim sf As Object
For Each sf In fso.GetFolder(chemin).subfolders
    Compte sf.Path 'récursivité pour traiter l'arborescence
    Nmax = Nmax + sf.Files.Count
Next sf
End Sub

Sub Renomme(chemin$)
Dim sf As Object, f As Object, numero&, extension$
For Each sf In fso.GetFolder(chemin).subfolders
    Renomme sf.Path 'récursivité pour traiter l'arborescence
    numero = 0
    For Each f In sf.Files
        If Not f.Name Like NouveauNom & "*" Then
            '--renomme le fichier (à adapter)---
            numero = numero + 1
            extension = Mid(f.Name, InStrRev(f.Name, "."))
            Name f.Path As sf.Path & "\" & NouveauNom & Format(numero, "0000") & extension
            '---barre de progression---
            n = n + 1
            Feuil1.OLEObjects("Label2").Width = L * n / Nmax
            Feuil1.Range("C2") = Format(n / Nmax, "0%") & " des fichiers sont renommés"
            Application.ScreenUpdating = True
        End If
Next f, sf
End Sub
La progression est saccadée parce qu'il n'y a que 51 fichiers renommés.

Avec 1000 fichiers la progression est régulière.

A+
 

Pièces jointes

  • Mes fichiers.zip
    635.3 KB · Affichages: 27

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 151
Membres
103 133
dernier inscrit
mtq