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)