1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" _
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, _
ByVal dwCopyFlags As Long) As Long
'----------------------------------------------------------------------------------------
Public Function CopieFichierEx(FichierSrc As String, FichierDest As String, _
Optional SupprSiExiste As Boolean = True, _
Optional CallBack As Long = 0) As Long
'----------------------------------------------------------------------------------------
' Copie FichierSrc vers FichierDest et affiche une progression.
' Retourne 0 si échec dans la copie, ou si le fichier existait déjà car l'API
' est configurée dwCopyFlags = 1 : ne remplace pas un fichier existant.
' Si SupprSiExiste = True alors suppression de la destination avant la copie.
' Retourne une autre valeur si la copie est réussie.
' Pour afficher la progression :
' Utilise la fonction de rappel CopieFichierExProgression ou l'adresse passée
' dans l'argument : CopieFichierEx(FichierSrc, FichierDest, True, AddressOf MaProgression)
'----------------------------------------------------------------------------------------
Dim bCancel As Long
Dim AncStatusBar As Variant
Dim AncCursor As XlMousePointer
' Mémorise l'état de la barre d'état et la forme du curseur:
AncCursor = Application.Cursor
AncStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
' Supprime le fichier s'il existe et que c'est demandé dans les arguments:
On Error Resume Next
If SupprSiExiste = True Then Kill FichierDest
On Error GoTo 0
' Copie et utilise la fonction de rappel CopieFichierExProgression ou une autre fonction si renseigné:
If CallBack = 0 Then
CopieFichierEx = CopyFileEx(FichierSrc, FichierDest, AddressOf CopieFichierExProgression, 0, bCancel, 1)
Else
CopieFichierEx = CopyFileEx(FichierSrc, FichierDest, CallBack, 0, bCancel, 1)
End If
' Restaure l'état de la barre d'état et la forme du curseur:
Application.StatusBar = False
Application.DisplayStatusBar = AncStatusBar
Application.Cursor = AncCursor
End Function
'----------------------------------------------------------------------------------------
Private Function CopieFichierExProgression(ByVal TotalFileSize As Currency, _
ByVal TotalBytesTransferred As Currency, _
ByVal StreamSize As Currency, ByVal StreamBytesTransferred As Currency, _
ByVal dwStreamNumber As Long, ByVal dwCallbackReason As Long, _
ByVal hSourceFile As Long, ByVal hDestinationFile As Long, ByVal lpData As Long) As Long
'----------------------------------------------------------------------------------------
' Mise à jour de la barre d'état:
Application.StatusBar = "Copie en cours : " & Int(TotalBytesTransferred / TotalFileSize * 100) & "%"
' Continue la copie:
CopieFichierExProgression = 0
End Function |
Partager