patricktoulon
XLDnaute Barbatruc
Bonjour à tous
je suis tombé sur une discussion au sujet d'un zipage de fichier et justement en ce moment je travaille la dessus
alors ça fonctionne mais comme je suis un éternel insatisfait j'aimerais améliorer une gestion d'attente
en effet quand on compile plusieurs fichiers dans une archive si l'on met pas un wait 1 seconde entre les deux
au bout du x eme fichiers (c'est aléatoire) on tombe sur une erreur disant que le fichier est occupé
c'est bien sur évident que cette erreur est du au temps que met le shell application pour archiver dans le zip (selon le poids du fichier)
pour l'instant je me contente d'un wait une seconde
sauf sur 100 ou 200 fichiers ben mon café n'a pas le temps de refroidir car j'ai le temps d'en boire 2
si ca continue je vais sauter comme un cabri
j'aimerais donc trouver le moyen de faire une gestion d'attente plus juste
avez vous des idées
mon module
je suis tombé sur une discussion au sujet d'un zipage de fichier et justement en ce moment je travaille la dessus
alors ça fonctionne mais comme je suis un éternel insatisfait j'aimerais améliorer une gestion d'attente
en effet quand on compile plusieurs fichiers dans une archive si l'on met pas un wait 1 seconde entre les deux
au bout du x eme fichiers (c'est aléatoire) on tombe sur une erreur disant que le fichier est occupé
c'est bien sur évident que cette erreur est du au temps que met le shell application pour archiver dans le zip (selon le poids du fichier)
pour l'instant je me contente d'un wait une seconde
sauf sur 100 ou 200 fichiers ben mon café n'a pas le temps de refroidir car j'ai le temps d'en boire 2
si ca continue je vais sauter comme un cabri
j'aimerais donc trouver le moyen de faire une gestion d'attente plus juste
avez vous des idées
mon module
VB:
'******************************************************************************************************
' Collection fichier et zip(archive)
'version 2023
'auteur patricktoulon
'ZIPPER LES FICHIERS D UN DOSSIER SANS LE DOSSIER
'******************************************************************************************************
Option Explicit
Sub ZipDossier() 'mettre le dossier dans un zip
Dim oShell As Object, Dossier$, cheminZip$, archive As Variant
Dossier = "C:\Users\patrick1\Desktop\Nouveau dossier" 'dossier ou sont les fichiers à archiver
cheminZip = ThisWorkbook.Path & "\" & "EssaiDoss.zip" ' chemin de l'archive
archive = createArchiveZip(cheminZip, True)
Set oShell = CreateObject("Shell.Application")
oShell.Namespace(archive).CopyHere (Dossier)
End Sub
'**********************************************************************************************************************
Sub ZipFichier() 'mettre le fichier dans un zip
Dim oShell As Object, sFichier$, archive As Variant
sFichier = "C:\Users\patrick1\Desktop\fich test.xlsx"
cheminZip = ThisWorkbook.Path & "\" & "Essaifich.zip" ' chemin de l'archive
archive = createArchiveZip(cheminZip, True)
Set oShell = CreateObject("Shell.Application")
oShell.Namespace(archive).CopyHere (sFichier)
Set oShell = Nothing
Set FSO = Nothing
End Sub
'**********************************************************************************************************************
Sub ZipallFichier() 'mettre les fichiers d'un dossier dans un zip
Dim oShell As Object, F, Dossier$, cheminZip$, archive As Variant, i
Dossier = "C:\Users\patrick1\Desktop\Nouveau dossier" 'dossier ou sont les fichiers à archiver
cheminZip = ThisWorkbook.Path & "\" & "Essaiallfich.zip" ' chemin de l'archive
archive = createArchiveZip(cheminZip, True)
F = Dir(Dossier & "\*.xls*")
DoEvents
Set oShell = CreateObject("Shell.Application")
Do While F <> ""
'On Error Resume Next
oShell.Namespace(archive).CopyHere (Dossier & "\" & F)
Application.Wait Now + 0.00001 'c'est ICI que ca se passe
F = Dir
'On Error GoTo 0
Loop
Set oShell = Nothing
End Sub
'**********************************************************************************************************************
Function createArchiveZip(cheminZip$, Optional DeleteZip As Boolean = False)
If DeleteZip Then If Dir(cheminZip) <> "" Then Kill cheminZip
Dim FSO As Object, sBin As String, arrayBin As Variant, i&
Set FSO = CreateObject("Scripting.FileSystemObject")
arrayBin = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
For i = 0 To UBound(arrayBin): sBin = sBin & Chr(arrayBin(i)): Next i
With FSO.CreateTextFile(cheminZip, True): .Write sBin: .Close
End With
Set FSO = Nothing
createArchiveZip = cheminZip
End Function