XL 2016 VBA: Zipper en fonction des noms de fichiers (ISO) et mettre à jour

joliemaman007

XLDnaute Nouveau
Bonjour à tous, oh gens de mon forum préféré.

J’ai une jolie petite colle pour vous (et une humble demande); je vous explique :

J’ai un répertoire que l’on va appeler pour la forme HeBeYenA, qui contient, pour le moment, environ 5000 fichiers (et ça grimpe) relatifs à des pays. Ils sont tous sauvegardés sous le même format :

  • aa-aze-abc-089-07dec2020.xls
  • aa-ben-abc-027-jun-2003.xls
  • aa-bgd-abc-013-dec-1999.xls
  • aa-bgd-abc-022-12apr2002.xls
  • aa-blr-abc-040-01aug06.xls
  • etc.
Bref, ils commencent tous par aa- suivis pas les 3 lettres ISO du pays (les fins changent un peu, et peuvent être XLS ou XLXS…).

(1) Je voudrais avoir une routine qui prend tous les fichiers qui se trouvent dans HeBeYenA et les zippe par pays (en se servant du code iso puisqu’il est disponible) avec comme nom d’archive juste les 7 premiers caractères (donc, par exemple pour BGD, prendre tous les fichiers qui commencent par aa-bgd- et les zipper dans un fichier aa-bgd.zip), et probablement dans un autre repertoire que j'appelerai MesZips. à noter, j'utilise 7-Zip.

(2) Une fois que tous les Zips sont fait, je voudrais pouvoir mettre à jour ces zips avec les informations/documents que je rajoute dans le répertoire HeBeYenA (donc relancer la macro en rajoutant les nouveaux fichiers sur le même zip qui lui se trouve maintenant dans MesZips,

(3) et cerise sur le gâteau, si jamais un fichier plus récent a remplacé un ancien (donc avec le même nom, mais pas la même date), que ce fichier « révisé » vienne écraser celui dans le zip.

Si l’un ou l’une d’entre vous peut m’aider, je lui en serai à jamais reconnaissante. Quel cadeau de fin d’année ce serait.

Mes capacités VBA sont très faibles, et j’avoue que le faire un par un, ça me décourage. Alors à vous les expert(e)s et maîtres(ses) du VBA, je me fie. ;). Et les commentaires d'explications sont les bienvenus car en même temps je souhaite comprendre et apprendre (il n'y a pas d'âge pour apprendre).

Milles mercis anticipés et merci de m'avoir lu jusqu'au bout, même si vous ne pouvez pas m'aider. Et je vous souhaite de bonnes fêtes à toutes et à tous; pas trop d'abus, mais profitez en tout de même, en petit groupe, en prenant soin de vous et de votre entourage.

JolieMaman007 (ben oui, non seulement je suis une maman, mais j'ai le droit de .... 🍻 😋)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonsoir petite maman ;)
on peut tres bien se passer de winzip to du moins de l'application
on peut très bien créer une archive en vb(vba)
comme ceci
VB:
Sub createarchive()
    Dim archive, hexO, MyBinary, i, oShell, FziP, FSO
    archive = Environ("userprofile") & "\DeskTop\maSauvegarde.zip"
    hexO = 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(hexO): MyBinary = MyBinary & Chr(hexO(i)): Next
    Set FSO = CreateObject("Scripting.FileSystemObject")
    'Création du fichier zip.
    Set FziP = FSO.CreateTextFile(archive, True)
    FziP.Write MyBinary
    FziP.Close
    Set FziP = Nothing
End Sub

on peut très bien déplacer un fichier pour le mettre dans une archive
comme ceci
VB:
Sub DeplacerFichierDansArchiveExistant()
    On Error GoTo ErreurCompression
    Dim shellApp As Object, FichierAArchiver, archiveZip
    'le depart et l'arrivée
    FichierAArchiver = "C:\Users\polux\DeskTop\ttt.xml"
    archiveZip = Environ("userprofile") & "\DeskTop\maSauvegarde.zip"
    'copier le fichier à archiver dans l'archive
    Set shellApp = CreateObject("Shell.Application")
    shellApp.Namespace(archiveZip).MoveHere FichierAArchiver
    MsgBox "L'archivage a été lancé.."    'si ça marche
    Exit Sub
    'si  il y a eu un probleme
ErreurCompression:
    MsgBox "Une erreur s'est produite..."
End Sub

remplacer "MoveHere " par "Copyhere" si on veux juste mettre une copie dans l'archive et garder l'original
pour une serie de fichier une simple boucle dir sur les fichier a archiver
un test d’existence avec dir de l'archive et création si elle n'existe pas
et copier dans l'archive

comme je disais pas besoins de winzip ou 7-Zip.
;)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Comme je disais pas besoins de Winzip ou 7-Zip.
Et est-ce qu'on a besoin d'un tableur pour compresser des fichiers?
(Il est vrai que c'est la vocation première d'un tableur)
Il est tout à fait incongru d'utiliser les fonctionnalités de l'explorateur Windows pour ce faire.
Mais il est vrai aussi qu'il existe des phobiques du clic-droit.

PS: Personnellement, je préfère 7-Zip à Winzip.
(Mais cela n'apporte rien au moulin, je retourne donc confiné dans les confins de mon salon. ;))
 
Haut Bas