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.
 

scraper

XLDnaute Nouveau
Pour les documents office xls, Doc, ppt
Le Titre s'obtient avec BuiltinProperties("Title")
Les Commentaires avec BuiltinProperties("Comments")
Il existe les propriétés personnalisées qui s'obtiennent avec la méthode CustomPropertoes (pas demandé ici)
Faire une recherche sur internet
 

jeff1494

XLDnaute Occasionnel
@patricktoulon
Je viens tout juste d'exécuter ton code et c'est parfait pour moi.
Je vais essayer de modifier l'ordre des colonnes, ainsi que de supprimer certaines colonnes qui ne m'intéressent pas comme par exemple l'attribut, le propriétaire, le type identifié, ...
Remplacer le type d'élément par l'extension, passer la colonne "commentaires" juste après le type d'élément.
Bref ce qui pour l'instant me parait être du cosmétique. Mais je n'ai pas encore décortiqué ton code. Donc je risque fort de te solliciter encore.
 

patricktoulon

XLDnaute Barbatruc
Pour les documents office xls, Doc, ppt
Le Titre s'obtient avec BuiltinProperties("Title")
Les Commentaires avec BuiltinProperties("Comments")
Il existe les propriétés personnalisées qui s'obtiennent avec la méthode CustomPropertoes (pas demandé ici)
Faire une recherche sur internet
@scraper
me semble t il pour obtenir les buildinproperties voir même les customProperties ,il faut que le fichier soit ouvert non ?
tu te vois ouvrir chaque fichier pour en obtenir ses properties et en listage récursif en plus ?:rolleyes:
 

jeff1494

XLDnaute Occasionnel
@scraper
Merci pour tes infos, ce qui est intéressant c'est de savoir que je peux avoir des "CustomProperties".
Je vais, après avoir réussi à produire le résultat que je veux, voir si il y aurait des propriétés qui seraient manquantes et qui auraient un intérêt.
 

jeff1494

XLDnaute Occasionnel
Je voulais regarder cette histoire de BuiltinProperties, et je suis tombé sur ce lien qui est à mon humble avis en relation avec la question que @patricktoulon se posait.
Pas sûr que cela réponde à cette question, mais qui sait peut-être que lui comprendra ce qui reste encore du chinois pour moi.

En attendant je retourne de ce pas vers le code de @patricktoulon . Bonne soirée à vous deux.
 

patricktoulon

XLDnaute Barbatruc
re
@jeff1494
@patricktoulon
Je viens tout juste d'exécuter ton code et c'est parfait pour moi.
Je vais essayer de modifier l'ordre des colonnes, ainsi que de supprimer certaines colonnes qui ne m'intéressent pas comme par exemple l'attribut, le propriétaire, le type identifié, ...
Remplacer le type d'élément par l'extension, passer la colonne "commentaires" juste après le type d'élément.
Bref ce qui pour l'instant me parait être du cosmétique. Mais je n'ai pas encore décortiqué ton code. Donc je risque fort de te solliciter encore.
si tu veux mettre tes colonnes dans un ordre il va falloir faire légèrement différemment

on va faire un select case et dans les case selon la propriété on attribuera la colonne
comme ceci
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 :3
Option Explicit
Sub test()
    Dim chemin, table(1 To 100000, 1 To 150)
    chemin = "K:\vba excel\01 HTML XML CDO OUTLOOK requete html"
    ListeProprietesFichiers_getDetailsOf chemin, table
    Cells.Clear
    Application.ScreenUpdating = False
    With Feuil1.[a1].Resize(UBound(table), 50)
        .Value = table
        Columns.AutoFit
        .VerticalAlignment = xlCenter
    End With
End Sub

Sub ListeProprietesFichiers_getDetailsOf(folder, ByRef table, Optional a As Long = 1)

    Dim strFileName As Object, objFolder As Object, i As Byte, e, ProP$

    Static objShell As Object: If a = 1 Then Set objShell = CreateObject("Shell.Application")

    Set objFolder = objShell.Namespace(folder) 'Répertoire à traiter

    For Each strFileName In objFolder.Items 'boucle sur tous les elements du repertoire

        'Pour que les dosssiers ne soient pas pris en comptes
        If strFileName.IsFolder = False Then
            e = 0
            a = a + 1
            For i = 0 To 250
                ' objFolder.getDetailsOf(objFolder.Items, i)'on obtient le nom de la propriété
                'objFolder.getDetailsOf(strFileName, i)     'on obtient la valeur de la propriété
                'If a = 2 Then Debug.Print objFolder.getDetailsOf(objFolder.Items, i)

                ProP = " Nom Taille Type d’élément Modifié le Date de création Date d’accès Attributs Type identifié Propriétaire Sorte Notation Auteurs "


                Select Case objFolder.getDetailsOf(objFolder.Items, i)

                    Case "Nom": table(a, 1) = objFolder.getDetailsOf(strFileName, i): table(1, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Taille": table(a, 2) = objFolder.getDetailsOf(strFileName, i): table(1, 2) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Extension du fichier": table(a, 3) = objFolder.getDetailsOf(strFileName, i): table(1, 3) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Commentaires": table(a, 4) = objFolder.getDetailsOf(strFileName, i): table(1, 4) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Modifié le": table(a, 5) = objFolder.getDetailsOf(strFileName, i): table(1, 5) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Date de création": table(a, 6) = objFolder.getDetailsOf(strFileName, i): table(1, 6) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Date d’accès": table(a, 7) = objFolder.getDetailsOf(strFileName, i): table(1, 7) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Sorte": table(a, 8) = objFolder.getDetailsOf(strFileName, i): table(1, 8) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Notation": table(a, 9) = objFolder.getDetailsOf(strFileName, i): table(1, 9) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Auteurs": table(a, 10) = objFolder.getDetailsOf(strFileName, i): table(1, 10) = 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(1, 11) = "path": table(a, 11) = strFileName.Path
        Else
            'si c 'est un dossier on relance la fonction (appel récursifs)
            ListeProprietesFichiers_getDetailsOf (strFileName.Path), table, a

        End If
    Next
End Sub
là tu a vraiment le choix
tu choisi les colonnes que tu veux dans les ligne case pour chaque properties
 

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
@patricktoulon : J'ai commencé à éplucher ton code et à ajouter des modifs telle que je voudrais que cela fonctionne.
Par contre pourrais-tu me confirmer que ce que tu nommes "ProP" ne sert à rien du moins dans le code que tu m'as donné (Version 3). De même pour la variable "e".
Par contre une fois que j'aurai intégré mes modifs pourrais-tu revoir mon code et me dire ce que je pourrais améliorer en terme de code.
Bonne journée à toi.
 

patricktoulon

XLDnaute Barbatruc
Bonjour regarde avec ça
si ça va pas on verra une autre organisation avec une collection en recursif
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 :3
Option Explicit
Sub test()
    Dim chemin, table(1 To 100000, 1 To 150)
    chemin = "K:\vba excel\01 HTML XML CDO OUTLOOK requete html"
    ListeProprietesFichiers_getDetailsOf chemin, table
    Cells.Clear
    Application.ScreenUpdating = False
    With Feuil1.[a1].Resize(UBound(table), 50)
        .Value = table
        Columns.AutoFit
        .VerticalAlignment = xlCenter
    End With
End Sub

Sub ListeProprietesFichiers_getDetailsOf(folder, ByRef table, Optional a As Long = 1)

    Dim strFileName As Object, objFolder As Object, i As Byte, e, ProP$

    Static objShell As Object
    If a = 1 Then
    Set objShell = CreateObject("Shell.Application")
table(2, 1) = "DOSSIER: " & folder
a = a + 1

End If
    Set objFolder = objShell.Namespace(folder) 'Répertoire à traiter

    For Each strFileName In objFolder.Items 'boucle sur tous les elements du repertoire

        'Pour que les dosssiers ne soient pas pris en comptes
        If strFileName.IsFolder = False Then
            e = 0
            a = a + 1
            For i = 0 To 250
                ' objFolder.getDetailsOf(objFolder.Items, i)'on obtient le nom de la propriété
                'objFolder.getDetailsOf(strFileName, i)     'on obtient la valeur de la propriété
                'If a = 2 Then Debug.Print objFolder.getDetailsOf(objFolder.Items, i)

            

                Select Case objFolder.getDetailsOf(objFolder.Items, i)

                    Case "Nom": table(a, 1) = objFolder.getDetailsOf(strFileName, i): table(1, 1) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Taille": table(a, 2) = objFolder.getDetailsOf(strFileName, i): table(1, 2) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Extension du fichier": table(a, 3) = objFolder.getDetailsOf(strFileName, i): table(1, 3) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Commentaires": table(a, 4) = objFolder.getDetailsOf(strFileName, i): table(1, 4) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Modifié le": table(a, 5) = objFolder.getDetailsOf(strFileName, i): table(1, 5) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Date de création": table(a, 6) = objFolder.getDetailsOf(strFileName, i): table(1, 6) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Date d’accès": table(a, 7) = objFolder.getDetailsOf(strFileName, i): table(1, 7) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Sorte": table(a, 8) = objFolder.getDetailsOf(strFileName, i): table(1, 8) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Notation": table(a, 9) = objFolder.getDetailsOf(strFileName, i): table(1, 9) = objFolder.getDetailsOf(objFolder.Items, i)
                    Case "Auteurs": table(a, 10) = objFolder.getDetailsOf(strFileName, i): table(1, 10) = 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(1, 11) = "path": table(a, 11) = strFileName.Path
        Else
            'si c 'est un dossier on relance la fonction (appel récursifs)
          a = a + 1
          table(a, 1) = "DOSSIER: " & strFileName.Path
            ListeProprietesFichiers_getDetailsOf (strFileName.Path), table, a

        End If
    Next
End Sub
 

Discussions similaires

Réponses
5
Affichages
272
Réponses
7
Affichages
482

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri