Progress Bar et création de fichiers

Hello à tous,

J'ai des difficultés à utiliser la progress bar du tuto :https://www.blog-excel.com/barre-de-progression-excel/.

Je cherche à faire une progression à chaque fichier crée. J'utilise Excel 2010

Dans Microsoft Excel Objets, j'ai Generation_fichier qui va me créer un certain nombre de fichier dans un répertoire donnée spécifié dans mon userform qui fera appelle à userform_progressbar.

J'ai créeé une feuille ProgressBar avec le userform_progressbar en question et je ne sais pas comment faire la ou les boucle.

Ma demarche ne doit pas etre bonne , je pense, à chaque fois que le fichier est créer on fait appelle à userform_progressbar.

ça fait plusieurs jours (en discontinue) que je suis dessus et j'avance pas

Si qq peut m'aider,

Thanks

Bonjour,

juste en passant, une telle barre de progression fait joli mais ralentit la procédure au minimum d'un facteur deux, bon à savoir !

Sinon il y a plein d'autres exemples un peu partout sur le Web …

Oki, et si au met le coté esthétique ? d'un point de vue algorithmique ?

Comme certainement expliqué dans le lien, il y a un compteur servant à faire progresser la barre.

C'est un ratio entre l'itération en cours et le nombre total d'itérations …

Et pour répondre à ma problématique sur la création de fichier et affichage du progress bar en même temps ?

Je suppose que c'est pourtant expliqué dans le lien …

Sinon il y a tellement d'autres exemples sur le Web !

Évidemment le total d'opérations doit être connu à l'avance sinon ce n'est pas la peine …

Hello,

J'avais laissé ce probléme en suspens, mais je n'arrive toujours pas à faire cette barre de progression...

J'ai une méthode qui crée des fichiers sur disque: une ligne de tableau excel créee éventuellement un fichier.

J'ai 810 lignes dans mon classeur, la barre de progression doit pouvoir avancé par rapport à ça

j'ai donc un userform pour ma progress bar, et ma feuille contenant le code qui génére le fichier.

Je ne sais pas comment faire le lien entre la feuille, la progress bar, par un appel de code et quoi mettre surtout...

Euh ya qq ?

????

Bonjour,

Marc L a écrit :

juste en passant, une telle barre de progression fait joli mais ralentit la procédure au minimum d'un facteur deux, bon à savoir !

Non, la barre de progression ne ralentit pas la procédure comme tu sembles le penser, c'est même tout à fait négligeable.

Ce qui est volontairement long dans cet exemple c'est Cells(ligne, col) = ligne + col ... Si tu supprimes cette ligne, tu verras que la procédure devient instantanée.

Excelweb a écrit :

Euh ya qq ?

Tu auras plus de chances d'avoir des réponses en postant un fichier

Cordialement,

Bonjour Sébastien,

ça risque d’être compliqué de mettre un fichier vu qu'il fait plus de 5 Mo et pour des raisons de confidentialité

Tu peux créer un fichier d'exemple avec le strict minimum utile pour ton problème ...

Sébastien a écrit :

Non, la barre de progression ne ralentit pas la procédure comme tu sembles le penser, c'est même tout à fait négligeable.

C'est juste un constat (avec une barre gérée via un UserForm) et je ne suis pas le seul vu les retours dans divers forums !

Lors d'une intervention, j'ai chronométré une procédure avec une telle barre de progression à plus de 48 secondes.

Juste en n'utilisant plus cette barre, l'exécution est tombée à 18 secondes, gain de 30 secondes !

Ce n'est donc pas négligeable lors de l'utilisation répétitive d'une procédure avec une barre de progression !

Après optimisation, j'ai réduit l'exécution à moins de trois secondes lors du premier appel, les suivants étant instantanés …

Marc L a écrit :

C'est juste un constat (avec une barre gérée via un UserForm) et je ne suis pas le seul vu les retours dans divers forums !

Lors d'une intervention, j'ai chronométré une procédure avec une telle barre de progression à plus de 48 secondes.

Juste en n'utilisant plus cette barre, l'exécution est tombée à 18 secondes, gain de 30 secondes !

Ce n'est donc pas négligeable lors de l'utilisation répétitive d'une procédure avec une barre de progression !

Ici, je te parlais uniquement de la barre de progression de l'exemple du blog ... Il y a probablement d'autres exemples de barres de progression sur le net beaucoup moins efficaces mais dans ce cas précis c'est quasi instantané (car modifier 100x la longueur d'un contrôle c'est tout à fait négligeable)

Celle du blog est bien une barre de progression via un UserFom et réduire le temps d'exécution de deux tiers

rien qu'en la retirant, ce n'est donc pas vraiment négligeable …

Mais bon, les goûts, les couleurs …

Marc L a écrit :

Celle du blog est bien une barre de progression via un UserFom et réduire le temps d'exécution de deux tiers

rien qu'en la retirant, ce n'est donc pas vraiment négligeable …

Mais bon, les goûts, les couleurs …

Le fait que la barre soit placée dans un UserForm ne veut pas dire qu'elle est forcément lente, il ne faut pas tout mélanger ... Ca t'es peut-être arrivé avec un autre UserForm et une autre barre de progression mais ce n'est pas le sujet ici ...

Si tu en doutes encore, tu n'as qu'à tester ceci :

Sébastien a écrit :
Marc L a écrit :

juste en passant, une telle barre de progression fait joli mais ralentit la procédure au minimum d'un facteur deux, bon à savoir !

Non, la barre de progression ne ralentit pas la procédure comme tu sembles le penser, c'est même tout à fait négligeable.

Ce qui est volontairement long dans cet exemple c'est Cells(ligne, col) = ligne + col ... Si tu supprimes cette ligne, tu verras que la procédure devient instantanée.

Bonjour Sébastien,

Je reviens vers toi après quelques mois

J'ai avancé pour la progress bar par rapport à ce que je voulais faire par contre ça devient de plus en plus complexe quand j'ai des idées...

J'aimerais utilisé ta progress bar pour la copie de fichier et apparemment pour faire ça dans les règles de l'art, il faut faire appel aux handles , aux api 32...

Donc dans un premier temps, j'ai besoin de récupérer le handle de ton userform progress bar.

De plus, pour tout traitement de fichier, l'API SHFileOperation rend bien des services.

Il contient la fonction FileCopyProgress :

  • source : répertoire ou fichier source
  • destination : répertoire ou fichier destination
  • hwnd : Optionnel = handle d'un formulaire (=Me.Hwnd) qui sera le parent de la fenêtre de dialogue
  • NoConfirmation : Optionel = mettre à vrai si on ne veut pas de demande de confirmation
==> la fonction renvoit Vrai si la copie s'est bien déroulée.

Donc dans un module je mets ça:

Option Explicit

Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Const FO_DELETE = &H3
Const FO_COPY = &H2
Const FO_MOVE = &H1
Const FO_RENAME = &H4
Const FOF_CONFIRMMOUSE = &H2
Const FOF_FILESONLY = &H80
Const FOF_MULTIDESTFILES = &H1
Const FOF_NOCONFIRMATION = &H10
Const FOF_NOCONFIRMMKDIR = &H200
Const FOF_RENAMEONCOLLISION = &H8
Const FOF_CREATEPROGRESSDLG = &H0
Const FOF_SILENT = &H4
Const FOF_SIMPLEPROGRESS = &H100
Const FOF_WANTMAPPINGHANDLE = &H20
Const FOF_ALLOWUNDO = &H40
Const FOF_NOERRORUI = &H400
Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Long
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Public Function FileCopyProgress(source As String, destination As String, Optional hwnd As Long, Optional NoConfirmation As Boolean) As Boolean
Dim lShFile As SHFILEOPSTRUCT
    lShFile.hwnd = IIf(hwnd = 0, Application.HwndAccessApp, hwnd)
    lShFile.wFunc = FO_COPY
    lShFile.pFrom = source & vbNullChar
    lShFile.pTo = destination & vbNullChar
    lShFile.fFlags = FOF_CREATEPROGRESSDLG Or (FOF_NOCONFIRMATION * -NoConfirmation) _
                                        Or (FOF_NOCONFIRMMKDIR * -NoConfirmation)
    FileCopyProgress = (SHFileOperation(lShFile) = 0)
End Function

et dans une feuille je mets ça pour y faire appel:

Dim lRetourCopie as boolean
lRetourCopie  = FileCopyProgress("C:\MonFichier1","C:\MonFichier2",Me.Hwnd,True)
If lRetourCopie then
   MsgBox "Copie OK"
Else
   MsgBox "Copie KO", vbCritical
End If

Moi mon userform lance à un moment donnée ton userform progressbar et ça reste à 0%(normal), mais le truc c'est que ça me fait la copie mais ça lance la barre de progression de windows , ça copie bien....

Je précise que les codes au dessus je les ai récupéré d'un autre forum

Autre chose, importante, la ligne:

lShFile.hwnd = IIf(hwnd = 0, Application.HwndAccessApp, hwnd)

j'ai du la modifier en

lShFile.hwnd=hwnd

parce que sinon après débogage, après l’évaluation de cette ligne, je sors directement du module et la suite n'est pas traité....

Ya des choses qui m'échappe

Il n'y a pas une histoire de flag à modifier dans le module ?

Toute aide est la bienvenue (et pis c'est intéressant en plusss)

Personne ne sait ?

Bonjour

Un petit programme sans prétention pour voir l'utilisation d'une ProgressBarr

Merci mais ce n'est pas ce que je cherche vraiment

Imaginons que j'ai un fichier de plus de 1Go à copié, la progress bar interne de windows m'affiche l'evolution (certainement qu'a chaque paquet d'octet copié la barre de progression avance)

Moi j'ai envie de recuperer l'API windows pour non pas afficher la barre de progression interne de windows (comme lorsque vous copiez un fichier dans l'explorateur windows) mais ma propre barre de progression.

Je me demande si c'est possible de faire ça...

Rechercher des sujets similaires à "progress bar creation fichiers"