Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'archives et d'arborescence...

16 réponses
Avatar
lululanantaise2
Bonjour =E0 toutes et =E0 tous,
j'ai une arborescence et dans chaque r=E9pertoire il existe une ou
plusieurs archives .zip, il y en a plusieurs milliers (un logiciel de
sauvegarde et une mauvaise option).
je cherche le moyen d'extraire chaque archive dans son r=E9pertoire et
de supprimer l'archive en 1 fois pour ces milliers de .zip
je pense donc =E0 une belle macro excel qui balaierait mon
arborescence...
Ca dit quelque chose =E0 quelqu'un ?
Merci,
Lulu

10 réponses

1 2
Avatar
DanielCo
Bonjour,
Lance la macro "ListeDossiers" après avooir changé le dossier principal
(dossier_racine). C'est peut-être chaud de deleter les fichiers zip (il
peut y avoir des doublons parmi les fichiers décompressés).

Sub ListeDossiers()
Set AppDZ = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder("d:donneesdanieltemp") 'à
modifier
Lit_dossier1 dossier_racine, AppDZ
End Sub
Sub Lit_dossier1(ByRef dossier, Appli)
For Each f In dossier.Files
If Right(f.Name, 4) = ".zip" Then
Unzip dossier.Path, f.Path, Appli
End If
Next f
For Each d In dossier.SubFolders
Lit_dossier1 d, Appli
Next
End Sub
Sub Unzip(Doss, Fich, Appli)
Appli.Namespace(Doss).CopyHere Appli.Namespace(Fich).items
Kill Fich
End Sub

Cordialement.
Daniel


Bonjour à toutes et à tous,
j'ai une arborescence et dans chaque répertoire il existe une ou
plusieurs archives .zip, il y en a plusieurs milliers (un logiciel de
sauvegarde et une mauvaise option).
je cherche le moyen d'extraire chaque archive dans son répertoire et
de supprimer l'archive en 1 fois pour ces milliers de .zip
je pense donc à une belle macro excel qui balaierait mon
arborescence...
Ca dit quelque chose à quelqu'un ?
Merci,
Lulu
Avatar
lululanantaise2
On 17 avr, 12:20, DanielCo wrote:
Bonjour,
Lance la macro "ListeDossiers" apr s avooir chang le dossier principal
(dossier_racine). C'est peut- tre chaud de deleter les fichiers zip (il
peut y avoir des doublons parmi les fichiers d compress s).

Sub ListeDossiers()
    Set AppDZ = CreateObject("Shell.Application")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set dossier_racine = fso.getfolder("d:donneesdanieltemp") '
modifier
    Lit_dossier1 dossier_racine, AppDZ
End Sub
Sub Lit_dossier1(ByRef dossier, Appli)
     For Each f In dossier.Files
        If Right(f.Name, 4) = ".zip" Then
            Unzip dossier.Path, f.Path, Appli
        End If
     Next f
   For Each d In dossier.SubFolders
     Lit_dossier1 d, Appli
   Next
End Sub
Sub Unzip(Doss, Fich, Appli)
    Appli.Namespace(Doss).CopyHere Appli.Namespace(Fich).items
    Kill Fich
End Sub

Cordialement.
Daniel







> Bonjour toutes et tous,
> j'ai une arborescence et dans chaque r pertoire il existe une ou
> plusieurs archives .zip, il y en a plusieurs milliers (un logiciel de
> sauvegarde et une mauvaise option).
> je cherche le moyen d'extraire chaque archive dans son r pertoire et
> de supprimer l'archive en 1 fois pour ces milliers de .zip
> je pense donc une belle macro excel qui balaierait mon
> arborescence...
> Ca dit quelque chose quelqu'un ?
> Merci,
> Lulu



Super, j'vais essayer sur un échantillon...
il est où le "Dezipage"?
Lulu
Avatar
DanielCo
Super, j'vais essayer sur un échantillon...
il est où le "Dezipage"?
Lulu



La macro ListeDossiers appelle la macro "Lit_dossier1" qui appelle la
macro Unzip. C'est cette dernière qui décompresse les fichiers zip et
les supprime.
Daniel
Avatar
lululanantaise2
On 17 avr, 13:16, DanielCo wrote:
> Super, j'vais essayer sur un échantillon...
> il est où le "Dezipage"?
> Lulu

La macro ListeDossiers appelle la macro "Lit_dossier1" qui appelle la
macro Unzip. C'est cette dernière qui décompresse les fichiers zip et
les supprime.
Daniel



Super ça marche du feu de Dieu !
mais la unzip ne fait appel à aucun module extérieur? Excel connait
donc la compréssion ?
Merci
LUlu
Avatar
DanielCo
Super ça marche du feu de Dieu !
mais la unzip ne fait appel à aucun module extérieur? Excel connait
donc la compréssion ?
Merci
LUlu



Non, c'est Shell qui s'en charge; l'archive est considérée comme un
dossier. Mais bon, j'en sais pas beaucoup plus.
Daniel
Avatar
lululanantaise2
On 17 avr, 15:24, DanielCo wrote:
> Super ça marche du feu de Dieu !
> mais la unzip ne fait appel à aucun module extérieur? Excel connait
> donc la compréssion ?
> Merci
> LUlu

Non, c'est Shell qui s'en charge; l'archive est considérée comme un
dossier. Mais bon, j'en sais pas beaucoup plus.
Daniel



Ca marche pour le .RAR ?
Merci encore et bon dimanche !
Avatar
DanielCo
On 17 avr, 15:24, DanielCo wrote:
Super ça marche du feu de Dieu !
mais la unzip ne fait appel à aucun module extérieur? Excel connait
donc la compréssion ?
Merci
LUlu



Non, c'est Shell qui s'en charge; l'archive est considérée comme un
dossier. Mais bon, j'en sais pas beaucoup plus.
Daniel



Ca marche pour le .RAR ?
Merci encore et bon dimanche !



Apparemment, non.
Daniel
Avatar
MichD
Bonjour,

Je recopie la même procédure, mais en définissant les variables, c'est plus parlant !
Si l'on prend le temps d'ajouter ces 2 références, on pourra observer dans
l'explorateur d'objets (raccourci clavier F2) dans la fenêtre de l'éditeur de code,
tous les objets, leurs propriétés et leurs méthodes. Pour ce faire, il s'agit
de choisir à tour de rôle dans la liste déroulante "Toutes les bibliothèques"
la bibliothèque "Scripting" et Shell32.

Dans la déclaration des variables dans" Sub ListeDossiers()", il faut faire attention
lorsque l'on attribue le type à la variable. Par exemple, les 2 bibliothèques ont
des objets "Folder". Dans ce cas, on doit mettre devant le nom de la bibliothèque
à laquelle l'objet défini appartient. Si on omet le nom de la bibliothèque, il lui
associera par défaut la bibliothèque déclarée en premier dans la fenêtre
Références du menu outils de la barre des menus. Il ne faut pas se surprendre
si la procédure ne fonctionne pas par la suite...

'--------------------------------------------
Sub ListeDossiers()
'En ajoutant les 2 bibliothèques suivantes :
'Microsoft scripting Runtime
'Microsoft Shell controls and automation

Dim AppDZ As Shell
Dim FSO As Scripting.FileSystemObject
Dim Dossier_Racine As Scripting.Folder

Set AppDZ = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossier_Racine = FSO.GetFolder("C:Denis") 'à modifier
Lit_dossier1 Dossier_Racine, AppDZ
'--------------------------------------------
End Sub
Sub Lit_dossier1(Dossier As Scripting.Folder, Appli As Shell)
Dim D As Folder, F As File

'Pour chaque fichier contenu dans le répertoire
For Each F In Dossier.Files
'si c'est un fichier zipper
'Ne fonctionne pas avec toutes les extensions de fichiers compressés
If Right(F.Name, 4) = ".zip" Then
'Dossier.Path : Chemin du répertoire
'F.Path : Chemin du fichier
'Appli : l'objet Shell
Unzip Dossier.Path, F.Path, Appli
End If
Next F
For Each D In Dossier.SubFolders
Lit_dossier1 D, Appli
Next
'--------------------------------------------
End Sub
Sub Unzip(Doss As String, Fich As String, Appli As Shell)
'Copie dans le répertoire Doss tous les items qu'il contient
Appli.Namespace(Doss).CopyHere Appli.Namespace(Fich).Items
'Supprime le fichier
Kill Fich
End Sub
'--------------------------------------------

Et pour ceux que la chose intéresse ( Je n'ai plus la source de ce qui suit... désolé)

'================================= Le Shell de Windows est l'ensemble des éléments visuels de l'interface de
Windows (à partir de la version Windows 95) que l'utilisateur voit comme
Intrinsèque au système. Il s'agit, entre autres, du Bureau, du Poste de Tra-
vail, de Windows Explorer, du panneau de configuration, etc. . . mais aussi des
menus déroulants qui apparaissent lorsqu'on clique avec le bouton droit de
la souris sur une icône, des mécanismes de Drag-n-Dropy, et d'autres encore.
Le Shell propose également une organisation virtuelle de ses divers objets
(le Shell contient beaucoup d'objets !). Cette organisation est l'arborescence
qu'on voit dans la partie gauche de l'Explorateur de fichiers : on l'appelle le
Namespace du Shell.

La racine du Namespace du Shell, ou Shell Namespace en anglais, est le
bureau. D'une manière générale, tous les noeuds de cette arborescence qui
contiennent d'autres noeuds sont appelés Folders. Les feuilles de l'arbores-
cence sont appelées Items. En particulier, dans le cadre du Shell Namespace,
les répertoires du systµeme de fichiers sont des Folders, et les fichiers sont des
Items. Mais ce n'est qu'un cas particulier : parmi les Folders du Shell, on
compte aussi le Poste de Travail, le Panneau de Configuration, le dossier
Imprimantes, le Planificateur de Tâches, etc. . .. Quelques exemples d'Items
sont les imprimantes, les applets du panneau de con¯guration ou encore
les tâches planifiées. Seuls les Folders apparaissent dans la partie gauche de
Windows Explorer.
L'utilisateur averti aura vite noté que cette organisation ne correspond
pas à l'organisation des fichiers du disque. En effet, sur le disque il n'y a pas
de répertoire contenant des imprimantes. Il n'y a pas non plus de répertoire
contenant des fichiers qui contiendraient les ordinateurs du réseau. Cette
arborescence est donc virtuelle. Il ne s'agit en réalité que d'une structure
mise en place par le Shell et qu'il est possible d'étendre avec ce qu'on appelle
les Namespace Extensions, qui rajoutent des Folders dans le Shell. Ainsi, par
exemple, le Poste de Travail n'est qu'un Namespace Extension qui insère
dans l'arborescence du Shell l'ensemble des fichiers et répertoires des disques
de l'ordinateur.
Les Namespace Extensions sont donc des sortes de plug-ins qu'Explorer
(explorer.exe est le nom du programme qui crée le Shell, et par extension, le
Shell s'appelle Explorer) charge lors de son démarrage, et à qui il demande
d'attacher le contenu des Namespace Extensions qu'ils proposent. Ces plug-
ins doivent être implémentés sous forme de composants COM.. .
'=================================

MichD
--------------------------------------------
Avatar
MichD
Un petit exemple simple :

La bibliothèque suivante doit être ajoutée au projetVBA
Fenêtre de l'éditeur de code / barres des menus / outils / références /

'Microsoft Shell controls and automation
'-----------------------------------------
Sub Exemple_CopyHere()
Dim ObjShell As Shell32.Shell
Dim ObjFolder As Shell32.Folder

Set ObjShell = New Shell
'OU la ligne suivante : fait le même job
'Set objShell = CreateObject("Shell.Application")

'Instancie l'objet ObjFolder
Set ObjFolder = ObjShell.Namespace("C:Denis")

'Si le répertoire C:Denis existe, copier le fichier
'"C:UsersDMDocumentsAlerte.xls" dans le répertoire Denis
If Not ObjFolder Is Nothing Then
ObjFolder.CopyHere "C:UsersDMDocumentsAlerte.xls"
End If
'Libère l'espace mémoire occupée par les 2 objets
Set ObjFolder = Nothing
Set ObjShell = Nothing

End Sub
'-----------------------------------------

MichD
--------------------------------------------
Avatar
DanielCo
Bonjour Denis,
De l'art d'embrouiller VBA avec la définition des variables ?
;-)))
Très intéressante, la partie de ton post sur le shell; tu devrais la
poster sur excelabo.
Cordialement.
Daniel
1 2