Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lister fichiers PDF avec date de création


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Lister fichiers PDF avec date de création
    Bonjour à tous,

    J'ai une macro qui me permets de lister dans Excel tous les fichiers d'un dossiers et ses sous-dossiers, avec en plus la date de création. Problème, pour les fichiers PDF, si je fais clic droit/"Propriétés", j'ai un onglet "PDF" dans lequel se trouve une autre date de création que celle précisée dans l'onglet "Général". Or, la macro récupère la date de l'onglet "Général", alors que j'ai besoin de la date de création précisée dans l'onglet "PDF".

    Comment puis-je faire pour récupérer la bonne date ? Merci d'avance pour votre aide

    Je mets le code, même si il marche très bien (je l'ai d'ailleurs probablement trouvé ici ) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Option Explicit
     
    Sub ListFilesInFolder(strFolderName As String, bIncludeSubfolders As Boolean)
      ' adapté de Ole P Erlandsen
      ' necessite d'activer la reference Microsoft Scripting RunTime
      Static FSO As FileSystemObject
      Dim oSourceFolder As Scripting.Folder
      Dim oSubFolder As Scripting.Folder
      Dim oFile As Scripting.File
      Static wksDest As Worksheet
      Static iRow As Long
      Static bNotFirstTime As Boolean
     
      If Not bNotFirstTime Then
        Set wksDest = ActiveSheet ' A adtapter
        Set FSO = CreateObject("Scripting.FileSystemObject")
        With wksDest
          .Cells(1, 1) = "Parent folder"
          .Cells(1, 2) = "Full path"
          .Cells(1, 3) = "File name"
          .Cells(1, 4) = "Size"
          .Cells(1, 5) = "Type"
          .Cells(1, 6) = "Date created"
          .Cells(1, 7) = "Date last modified"
          .Cells(1, 8) = "Date last accessed"
          .Cells(1, 9) = "Attributes"
          .Cells(1, 10) = "Short path"
          .Cells(1, 11) = "Short name"
        End With
        iRow = 2
        bNotFirstTime = True
      End If
      Set oSourceFolder = FSO.GetFolder(strFolderName)
      For Each oFile In oSourceFolder.Files
        With wksDest
          .Cells(iRow, 1) = oFile.ParentFolder.Path
          .Cells(iRow, 2) = oFile.Path
          .Cells(iRow, 3) = oFile.Name
          .Cells(iRow, 4) = oFile.Size
          .Cells(iRow, 5) = oFile.Type
          .Cells(iRow, 6) = oFile.DateCreated
          .Cells(iRow, 7) = oFile.DateLastModified
          .Cells(iRow, 8) = oFile.DateLastAccessed
          .Cells(iRow, 9) = oFile.Attributes
          .Cells(iRow, 10) = oFile.ShortPath
          .Cells(iRow, 11) = oFile.ShortName
        End With
        iRow = iRow + 1
      Next oFile
     
      For Each oSubFolder In oSourceFolder.SubFolders
        ' On peut mettre ici un traitement spécifique pour les dossiers
      Next oSubFolder
     
      If bIncludeSubfolders Then
        For Each oSubFolder In oSourceFolder.SubFolders
          ListFilesInFolder oSubFolder.Path, True
        Next oSubFolder
      End If
     
    End Sub
     
    Private Sub Lister_Fichiers_Sous_Dossiers()
      ListFilesInFolder "C:\Users\E5922\Desktop\PowerPoints", True
    End Sub

  2. #2
    Expert éminent sénior
    Salut, regarde Liste des propriétés de fichiers et adapte à ton contexte.
    A moins que tu ne parles de métadonnées et dans ce cas voir Lecture d'infos et métadonnées d'un fichier PDF. Il te faut Acrobat ( pas le Reader ).
    Une alternative ici via PDFCreator 1.7.3.

  3. #3
    Membre habitué
    Merci pour la réponse rapide ! Effectivement, je parle des métadonnées. Le code "Lecture d'infos et métadonnées d'un fichier PDF" fonctionne, mais c'est pas encore ça... J'aurais aimé que le traitement s'applique sur tous les fichiers PDF du dossier avec un résultat sous forme de liste sur Excel, et non pas avec une sélection d'un seul fichier avec affichage des infos dans une fenêtre où les dites infos ne sont pas copies/collables (en plus du format pas très lisible de la date).

    Ca a l'air au final bien plus compliqué que ce que je pensais

  4. #4
    Expert éminent sénior
    Salut, à toi de faire l'effort d'adaptation à ton contexte, tu as déjà une appli qui liste les pdf. Tu ne trouveras que rarement du tout cuit.

    Pas le temps en ce moment de le faire, peut-être plus tard.

  5. #5
    Membre habitué
    C'est bien le problème, je n'ai jamais appris à faire de code Je sais que ça existe, c'est pour ça que je viens là, et parfois j'ai de la chance de trouver ce dont j'ai besoin car des personnes ont eu le même problème/besoin que moi auparavant. Mais s'il s'agit d'adapter... Surtout dans ce cas là, ça a l'air assez complexe. Bref, ne t'embêtes pas pour moi, c'est déjà gentil de m'avoir donné des pistes Tant pis si je ne peux pas les exploiter, je me débrouillerai autrement !

  6. #6
    Expert éminent sénior
    Re, à toi d'élaguer

  7. #7
    Membre habitué
    Waouh, merci beaucoup !!! C'est super sympa d'avoir pris le temps de l'adapter, c'est tout à fait ce dont j'avais besoin, super !!!

    Un petit traitement sur les dates, mais pour ça j'ai des macros qui traînent Merci encore !

  8. #8
    Expert éminent sénior
    Re, en décomposant au maximum

    dans la procédure Infos(iRow As Long, sFichier As String)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    .....
    Dim sDate As String, sAn As String, sMois As String, sJour As String
    .....
                .Cells(iRow, 8) = PDDoc.GetInfo("CreationDate")
                sDate = Mid$(Trim$(.Cells(iRow, 8)), 3, 8)
                sAn = Left$(sDate, 4): sMois = Mid$(sDate, 5, 2): sJour = Mid$(sDate, 7, 2)
                .Cells(iRow, 8) = CDate(sAn & "/" & sMois & "/" & sJour)
                .Cells(iRow, 8).NumberFormat = "dd mmm yyyy"
     
               .Cells(iRow, 9) = PDDoc.GetInfo("ModDate")
                sDate = Mid$(Trim$(.Cells(iRow, 9)), 3, 8)
                sAn = Left$(sDate, 4): sMois = Mid$(sDate, 5, 2): sJour = Mid$(sDate, 7, 2)
                .Cells(iRow, 9) = CDate(sAn & "/" & sMois & "/" & sJour)
                .Cells(iRow, 9).NumberFormat = "dd mmm yyyy"
    .....


    Après restera à gérer les erreurs éventuelles mais c'est une autre histoire .....

  9. #9
    Expert éminent sénior
    Une version améliorée(?) est disponible ici

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .....
                If PDDoc.GetInfo("CreationDate") Like "D:########*" Then
                    .Cells(iRow, 8) = PDDoc.GetInfo("CreationDate")
                    sDate = Mid$(Trim$(.Cells(iRow, 8)), 3, 8)
                    sAn = Left$(sDate, 4): sMois = Mid$(sDate, 5, 2): sJour = Mid$(sDate, 7, 2)
                    .Cells(iRow, 8) = CDate(sAn & "/" & sMois & "/" & sJour)
                    .Cells(iRow, 8).NumberFormat = "dd mmm yyyy"
                End If
    .....

###raw>template_hook.ano_emploi###