XL 2021 Liste des propriétés de fichiers.

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
Encore une fois je retourne vers la communauté car je suis sûr qu'une âme charitable pourra m'aider;
Voilà mon problème :
J'ai récupéré, grâce à un utilitaire, sous forme d'un fichier Excel tout le contenu d'un dossier contenant un paquet de sous-dossier et de fichiers.
Le but est de pouvoir à terme faire le ménage et de classer tout ce bazar d'une manière facilement compréhensible.
Cette partie là se fera manuellement pour l'instant.
Je récupère des informations du genre le nom, le chemin, la taille, ... de chaque fichier.
Ce qui représente les colonnes suivantes :
  1. Nom du fichier
  2. Extension du fichier
  3. Date de création
  4. Taille du fichier
  5. Répertoire où se trouve le fichier
  6. Date de modification du fichier
  7. Heure de modification du fichier
  8. Chemin d'accès au fichier.
Comme tout cela vient d'un outil externe si je veux changer des infos cela sera fait lors de la création du fichier Excel par cet outil.
Par contre sur pas mal de fichier j'ai ajouté des commentaires. Et ce sont ces derniers que j'aimerais pouvoir lister.

Existe-t-il une liste permettant d'identifier toutes les données attachées au fichier, celles que l'on peut modifier via l'écran des propriétés du fichier.
Je parle de cet écran :

Exemple.jpg

D'avance je remercie celles et ceux qui prendront le temps de se pencher sur ma demande.
Bonne journée à toutes et tous.
 

patricktoulon

XLDnaute Barbatruc
re
ben en fait pour l'erreur ça dépend comment tu veux qu'il te liste les zip
en tant que fichier ou dossiers(compréssés )
si c'est en tant que dossier compréssé on met une simple gestion d'erreur
si c'est en fichier on ajoutera" une condition
et les zip seront listé en tant que fichier zip

version 4 les zip non décantés
VB:
'*****************************************************************************************************
'    ___     _     _______  __      _   ____  _   _  _______  ___     _   _   _    ___     _     _.
'   //  \\  /\\      //    // \\   //  //    //  //    //    //  \\  //  //  //   //  \\  //|   //
'  //___// //__\    //    //__//  //  //    //__//    //    //   // //  //  //   //   // // |  //
' //      //   \\  //    //  \\  //  //    //  \\    //    //   // //  //  //   //   // //  | //
'//      //    // //    //   // //  //___ //    \\  //     \\__// //__//  //___ \\__// //   |//
'****************************************************************************************************
'collection sub  et fonction avec récursivité
'liste recursive d'un dossier avec lecture des propriétés
'date 18/08/2024
'librairie utilise shell Automation( en late binding)
'auteur :patricktoulon
'version :4

Sub test_V4()
    Dim chemin, table(), cel As Range, rowCount As Long
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            chemin = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    ListeProprietesFichiers_getDetailsOf_V4 chemin, table

   Feuil2.Cells.Clear
   Feuil2.Activate
    Application.ScreenUpdating = False
    With Feuil2.[a1].Resize(UBound(table, 2), 11) ' Redimensionnement dynamique
        .Value = Application.Transpose(table)
        .VerticalAlignment = xlCenter
        For Each cel In .Columns(1).Cells
            If cel.Text Like "DOSSIER:*" Then
                cel.Font.Color = vbRed
                cel.Font.Bold = True
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(, 10), Address:=cel.Offset(, 10).Text, TextToDisplay:="DOSSIER : " & cel.Offset(, 10).Text
                With cel.Resize(, 11)
                    .Font.Bold = True
                    .Font.Size = 13
                End With
            Else
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(, 10), Address:=cel.Offset(, 10).Text, TextToDisplay:=cel.Offset(, 10).Text
            End If
        Next
        Columns.AutoFit
    End With
End Sub

Function ListeProprietesFichiers_getDetailsOf_V4(folder, ByRef table, Optional a As Long = 1)
    Dim strFileName As Object, objFolder As Object, i As Byte, e As Integer, ProP$
    Dim collect As New Collection
    Static objShell As Object: Static FsO As Object

    If a = 1 Then
        a = a + 1
        Set objShell = CreateObject("Shell.Application")
        Set FsO = CreateObject("Scripting.FileSystemObject")
        ReDim table(1 To 11, 1 To a) ' Table redimensionné
        table(1, a) = "DOSSIER: " & folder
        table(2, a) = FsO.getfolder(folder).Size / 1000 & " Ko"
        table(11, a) = folder
    End If
Debug.Print folder
Dim qr As Boolean

    Set objFolder = objShell.Namespace(folder)

    For Each strFileName In objFolder.Items
        qr = False
        If Not strFileName.IsFolder Then qr = True
        'If strFileName.Type = "Dossier compressé" Then qr = True
        If Right(strFileName, 4) = ".zip" Then qr = True
        If qr Then
            
            
            a = a + 1
            ReDim Preserve table(1 To 11, 1 To a) ' Ajustement dynamique du tableau
            For i = 0 To 250
                Select Case objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Nom": table(1, a) = ". " & objFolder.getDetailsOf(strFileName, i): table(1, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Taille": table(2, a) = objFolder.getDetailsOf(strFileName, i): table(2, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Extension du fichier": table(3, a) = objFolder.getDetailsOf(strFileName, i): table(3, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Commentaires": table(4, a) = objFolder.getDetailsOf(strFileName, i): table(4, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Modifié le": table(5, a) = objFolder.getDetailsOf(strFileName, i): table(5, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Date de création": table(6, a) = objFolder.getDetailsOf(strFileName, i): table(6, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Date d’accès": table(7, a) = objFolder.getDetailsOf(strFileName, i): table(7, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Sorte": table(8, a) = objFolder.getDetailsOf(strFileName, i): table(8, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Notation": table(9, a) = objFolder.getDetailsOf(strFileName, i): table(9, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Auteurs": table(10, a) = objFolder.getDetailsOf(strFileName, i): table(10, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                        'Case "Chemin du dossier": table(a, 11) = objFolder.getDetailsOf(strFileName, i): table(1, 10) = objFolder.getDetailsOf(objFolder.Items, i)
                End Select
            Next
            table(11, 1) = "path"


            ' Ajoute d'autres colonnes selon les besoins
            table(11, a) = strFileName.Path
        Else
            collect.Add strFileName.Path
        End If
    Next

    Dim subfolder
    For Each subfolder In collect
        a = a + 1
        ReDim Preserve table(1 To 11, 1 To a)
        table(1, a) = "DOSSIER: " & subfolder
        On Error Resume Next
        table(2, a) = FsO.getfolder(subfolder).Size / 1000 & " Ko"
        On Error GoTo 0
        table(11, a) = subfolder
        ListeProprietesFichiers_getDetailsOf_V4 subfolder, table, a
    Next

    ListeProprietesFichiers_getDetailsOf_V4 = table ' Retourne le nombre de lignes utilisées
End Function

ci joint un classeur avec le 3 et 4 pour que tu puisse voir la différence entre les deux
 

Pièces jointes

  • liste récursive dossiers sous dossiers et fichier et propriété shellautomation).xlsm
    33.4 KB · Affichages: 4

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
@patricktoulon , je te remercie de m’offrir le luxe de choisir une version.
Personnellement le préfère la version 3 qui pour moi reste plus lisible.

Je vais maintenant voir ce qu'il en est des "mots-clés".
En attendant je te remercie et te souhaite une bonne journée.
A+
 

jeff1494

XLDnaute Occasionnel
Bien alors je viens de regarder en détail, et je retrouve bien les "mots-clés" avec le code 18 et sous le libellé 'Tags". En fait je cherchais a identifier le libellé "Keywords", d’où mon erreur.

En pièce jointe un petit fichier qui reprend tous les codes des méta-données des fichiers office.
Donc je vais essayer d'ajouter une colonne et de mettre les tags en place.

Je vais aussi essayer de trouver les méta-données des autres type de fichiers.
A+
 

Pièces jointes

  • Codes métadata fichiers.xlsx
    16.7 KB · Affichages: 3

jeff1494

XLDnaute Occasionnel
Bonjour @patricktoulon ;
Cette liste je l'ai trouvé sur le Net. Il faudrait que je retrouve le lien du site.
Si je l'ai trouvé une fois je dois être capable de le retrouver.

J'ai bien vu que la V3 considérait les ZIP, comme un dossier compressé.
Ne pas avoir les commentaires n'est pas très grave, car en récupérant les commentaires des fichiers, cela me donnera une idée de ce à quoi le fichier compressé correspond. Et cela devrait être suffisant pour ce que je veux faire.

J'ai commencé à détailler ta version 3 pour ajouter une colonne juste après les commentaires pour y coller les mots-clés. Par défaut ils sont séparés par des ";", je ne sais pas encore comment je pourrais les exploiter par exemple pour une recherche par mot-clé. Je verrais bien plus tard.

Encore merci pour ton aide.
A+
 

jeff1494

XLDnaute Occasionnel
Bonjour @TooFatBoy ;

En fait ces commentaires viennent directement des propriétés des fichiers onglet "détails".
Et c'est moi qui les ajoute car cela me permet dans l'explorateur de fichier de Windows d'avoir une idée plus précise du pourquoi ce fichier plutôt que de se baser sur le nom du fichier.

La finalité de ce que je voudrais faire par rapport au fichier sujet de ce post est de pouvoir faire des recherches sur les commentaires que je créé, et étendre pourquoi pas cette fonction aux mots-clés.
J'en ai senti le besoin lorsque j'ai voulu commencer de faire du ménage dans un dossier fourre-tout contenant beaucoup de fichiers. Et seul le nom ne me permettait pas de faire un tri correct.
Voilà le pourquoi du comment.

Bonne soirée.
A+
 

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
@patricktoulon ;
J'ai ajouté une colonne avec les mots-clés, comme je le voulais.
Maintenant je voudrais passer à la recherche des fichiers ayant un mot clé saisi.
Je vais réfléchir à ce qui me paraitra comme la meilleure approche pour le faire.
Et si tu le veux bien je te soumettrais mes réflexions.
Dans tous les cas je te remercie pour ton aide précieuse. 🙇‍♂️🙇‍♂️ 👨‍🏫
Pour ce travail j'ai choisi de prendre ce que tu nommes la version 3.
En pièce jointe le fichier auquel je suis arrivé. reste encore un travail à faire pour supprimer tous les commentaires que j'ai ajouté dans le code.

Merci et bonne journée à toutes et tous.
 

Pièces jointes

  • Liste_répertoires_et_fichiers_avec_commentaires_et_mots-clés.xlsm
    36.6 KB · Affichages: 1

jeff1494

XLDnaute Occasionnel
Bonjour;
Maintenant que j'ai les commentaires ainsi que les mots-clés je voudrais être capable de faire des recherches sur ces mots-clés.

Voilà comment je vois les choses :
  1. Après avoir créé la liste des fichiers, j'exécuterais une procédure "XXX" qui lirait les cellules de la colonne contenant les mots-clés.
  2. Si la cellule n'est pas vide alors j'alimente dans une nouvelle feuille une colonne contenant les nouveaux mots-clés trouvés. Pour ce faire, j'ai vu la fonction "Split" qui conviendrait à merveille. "Split" alimente, d'après ce que j'ai compris un tableau dont chaque élément est un mot et le délimiteur a indiquer est un ";"(dans mon cas).
  3. Une fois atteint la fin de la colonne, en passant à la feuille nouvellement créée je supprime les doublons, et ainsi je créé ma base de mots-clés. A moins qu'il soit possible de supprimer les doublons lors de la création.
En fait j'aimerai que cette procédure "XXX" soit lancée directement après la création de la liste (automatiquement), de manière à garder une liste toujours actualisée des mots-clés.
Peut-être est -t-il possible de l'intégrer dans la routine existante ?

Ensuite je proposerais un moyen (Userform) de faire une sélection d'un ou plusieurs mots-clés dans une liste via une "listbox" à sélection multiple. Cette "listBox" serait remplie grâce à la liste des mots-clés générée par la procédure "XXX".

Le résultat de la recherche pourrait être créé dans une nouvelle feuille "Resultats", de manière à pouvoir l'imprimer, ou bien grâce à des liens Hyperliens sur le nom des fichiers correspondants aux critères de la recherche, pouvoir ouvrir directement le fichier sélectionné.

Si l'on relance plusieurs recherches la feuille "Résultats" (si elle existe) sera détruite avant de créer la nouvelle feuille "Résultats".

Voilà ce à quoi je pense, mais bien sûr j'ai à minima un problème.
Je n'ai jamais travaillé avec des tableaux (même si dans le fichier que Patricktoulon m'a offert il y en a), et j'avoue que je ne sais par quel bout prendre la chose.

Donc si des personnes pouvaient me dire d'abord :
  • Si ma réflexion est correcte, ou me propose une autre manière de faire
  • Et puis si ils peuvent m'aider à appréhender ces 'foutus' tableaux, je serais leur en serais reconnaissant.

Je remercie par avance celles et ceux qui voudront bien me répondre.

Je vous souhaite à toutes et tous une bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
bonsoir @jeff1494
a quoi servirait de lister un dossier complet pour chopper 2 ou 3 fichiers contenant ta recherche
autant excepter les fichiers non correspondants pendant la boucle recursive
Allez cado!!!!! version 5
un moteur de recherche sur les commentaire

click sur le bouton rouge pour choisir un dossier
tape tes expressions recherchées séparées par une virgule et lance la recherche
 

Pièces jointes

  • liste récursive dossiers sous dossiers et fichier et propriété shellautomation).xlsm
    44.7 KB · Affichages: 5

jeff1494

XLDnaute Occasionnel
Bonjour @patricktoulon :

Merci pour cette nouvelle version. Je vais encore une fois essayer de comprendre ton code, car j'ai parfois du mal à suivre.

Alors en fait je voulais une liste des fichiers dans les répertoires et sous-répertoires, pour essayer de mettre de l'ordre dans un dossier majeur.
Donc lister tout son contenu. La recherche permettrait de mettre en exergue les fichiers ayant des éléments en commun.
Puis de prendre une décision du genre de les regrouper ensemble dans un dossier spécial par exemple.
Donc cette liste serait le point de départ d'un ensemble d'actions futures sur certains éléments. Cela me permettrait aussi de garder une trace des changements et modifications.

En fait chaque fois ton code lève le voile sur une manière de penser et de coder qui m'aide à mieux appréhender les problèmes.

Dans tous les cas je vais regarder de près cette V5.
Encore merci pour ton aide.
Bonne journée à toi.
 

mromain

XLDnaute Barbatruc
Bonjour à tous,

J'arrive après la bataille sur ce fil juste pour montrer une manière de récupérer ces propriétés avec PowerQuery comme suggéré par @ralph45 (même si c'est inutile vu que les codes proposés par @patricktoulon répondent bien au besoin).

L'exemple montre comment récupérer les propriétés Mots-clés et Commentaires des fichiers au format Open XML (fichiers Word, Excel et PowerPoint).

Pour l'utiliser, il faut :
  1. Analyser les fichiers du dossier
    Dans la feuille Contenu Dossier :
    • mettre à jour n'emplacement du dossier analysé ;
    • actualiser le tableau.
    Ce tableau est basé sur la requête QRY_FolderFiles qui parcoure l'ensemble des fichiers du dossier (et des sous-dossier) et en extraire les propriétés.
    La mise à jour peut être longue selon le volume du dossier.
    C'est ce tableau qui servira de source de données pour la suite.
  2. Mettre à jour la liste des mots-clefs
    Dans la feuille Mots-Clefs, actualiser le tableau.
    Ce tableau est basé sur la requête QRY_KeyWords qui analyse les données du tableau précédemment chargé pour extraire la liste des mots-clefs de l'ensemble des fichiers.
  3. Enfin, utiliser la recherche
    Dans la feuille Recherche :
    • renseigner le(s) mot(s)-clef(s) cherché(s) ;
    • renseigner le(s) texte(s) cherché(s) dans les commentaires ;
    • actualiser le tableau de recherche.
    Ce tableau est basé sur la requête QRY_Search. Les deux premières colonnes (Folder Path et File Path) sont masquées et utilisées par les deux colonnes suivantes avec la fonction LIEN_HYPERTEXTE.

A+
 

Pièces jointes

  • PropriétésFichiers.xlsx
    35.4 KB · Affichages: 8

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
@mromain :
Merci pour ton intérêt à mon problème. Le fait que tu parles de PowerQuery est intéressant car je ne connais absolument pas cet outil, et ton exemple va me permettre d'approcher cela avec un exemple que je connais bien.
Cela devrait me faciliter la compréhension.

Merci à toi.
Bonne journée à tout le monde, et A+.
 

Discussions similaires

Réponses
5
Affichages
257
Réponses
7
Affichages
469

Statistiques des forums

Discussions
314 963
Messages
2 114 807
Membres
112 254
dernier inscrit
Cliqueurfou57