IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 les fichier d'un répertoire qui n'ont pas encore été listés [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut Lister les fichier d'un répertoire qui n'ont pas encore été listés
    Bonjour, Forum,

    J'utilise ce code pour lister tous les fichiers PDF d'un répertoire. J'ai ajouté quelques éléments qui me sont nécessaires.

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    '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
      Dim iRow As Long
      Static bNotFirstTime As Boolean
     
     
        Set wksDest = ActiveSheet
        Set FSO = CreateObject("Scripting.FileSystemObject")
     
     
      Set oSourceFolder = FSO.GetFolder(strFolderName)
      For Each oFile In oSourceFolder.Files
     
        If Right(oFile.Name, 3) = "PDF" Then
        iRow = wksDest.Range("A65536").End(xlUp).Row + 1
        wksDest.Cells(iRow, 1) = oFile.ParentFolder.Path
        wksDest.Cells(iRow, 2) = oFile.Name
        'Ajout lien hypertexte
        With ActiveSheet
        .Hyperlinks.Add Anchor:=.Cells(iRow, 3), _
        Address:=oFile.ParentFolder.Path & "\" & oFile.Name, _
        TextToDisplay:=Mid(oFile.Name, 3, 7)
        'Date création
        'wksDest.Cells(iRow, 66) = oFile.DateCreated
        End With
        End If
     
      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
    Sub Test()
     
    'Quel jour sommes-nous?
    Dim Jour As String
    Dim c As String
     Jour = UCase(Left(Format(Now(), "dddd"), 1)) & Mid(LCase(Format(Now(), "dddd")), 2)
     c = Weekday(Now(), 2)
     Select Case c
            Case 1
                Jours = "Monday"
            Case 2
                Jours = "Tuesday"
            Case 3
                Jours = "Wednesday"
            Case 4
                Jours = "Thursday"
            Case 5
                Jours = "Friday"
        End Select
     
    'Nettoyage de la feuille
        Dim Endline
        Sheets("Check_" & Jours).Activate
        If Cells(2, 1).Value = "" Then Endline = 2 Else Endline = ActiveWorkbook.Sheets("Check_" & Jours).Range("A65536").End(xlUp).Row
        Range(Cells(2, 1), Cells(Endline, 6)).Select
        Selection.Delete Shift:=xlUp 'ToLeft
        Range("A1").Activate
        ListFilesInFolder "c:\Digitsol\" & Jours, True
     
    'Mettre validation de données
    For n = 2 To Range("A65536").End(xlUp).Row
     Range("A" & n).Activate
     'Insertion liste OK/NOK
     ActiveCell.Offset(0, 3).Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Check_Monday!$XFD$1:$XFD$2"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
        'Insertion liste Block/
         ActiveCell.Offset(0, 2).Select
            With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Check_Monday!$XFC$1:$XFC$2"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
            End With
     Next n
     
    'Mise en place des stat
     
        Range("j1").Formula = "=COUNTIF(D2:D" & Endline & ","""")/" & (Endline - 1)
        Range("j2").Formula = "=(" & Endline - 1 & "-COUNTBLANK(D2:D" & Endline & "))/" & (Endline - 1)
        Range("j3").Formula = "=COUNTIF(D2:D" & Endline & ",""OK"")/(" & (Endline - 1) & "-COUNTBLANK(D2:D" & Endline & "))"
        Range("j4").Formula = "=COUNTIF(D2:D" & Endline & ",""NOK"")/(" & (Endline - 1) & "-COUNTBLANK(D2:D" & Endline & "))"
        Range("j5").Formula = "=COUNTIF(F2:F" & Endline & ",""Block"")/(" & (Endline - 1) & "-COUNTBLANK(D2:D" & Endline & "))"
     
    Range("A2").Activate
     
    End Sub

    Afin de ne pas réinventer ce qui existe déjà, je fais appel à vous. Dans ce répertoire, il arrive que l'on ajoute des fichiers PDF depuis ma dernière liste. Avez-vous déjà vu un bout de code qui permettrait de simplement (évidemment ) prendre ceux qui n'ont pas déjà été listés précédemment.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, cela ne répondra pas directement à ta question, mais regarde ici

    Remarque subsidiaire : déjà tu mélanges Early Binding / Late Binding : voir ici

  3. #3
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Voici une fonction que j'ai récupérer quelque part sur Internet (je ne saurais dire), et qui vérifie la présence d'un fichier (nom + extension).
    Tu peux alors boucler sur les noms, et en vérifier l'existence, avant de les lister ?

    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
    Function ExistingFile(FileName As String)
     
    On Error GoTo err
    Dim oFSO As Scripting.FileSystemObject
    Dim Str_Path as string
     
    Str_Path = "Path/Path/Path"
    'A changer, bien évidemment !
     
    'Instanciation du FSO
    Set oFSO = New Scripting.FileSystemObject
    'Instanciation de l'objet File
    If oFSO.FileExists(Path & FileName) Then
        ExistingFile = True
    Else
        ExistingFile = False
    End If
     
    fin:
        Exit Function
     
    err:
            Select Case err.Number
                Case 53: MsgBox "Le fichier est introuvable"
                Case Else: MsgBox "Erreur inconnue"
            End Select
     
    Resume fin
     
    End Function
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les fichiers d'un répertoire dans une feuille Excel
    Par AlainTech dans le forum Contribuez
    Réponses: 3
    Dernier message: 10/03/2016, 14h14
  2. [C++/Unix] Lister les fichiers d'un répertoire
    Par bouazza92 dans le forum Linux
    Réponses: 5
    Dernier message: 10/12/2013, 22h07
  3. Lister les fichiers d'un répertoire (ordre alphabétique)
    Par Mysti¢ dans le forum Général Python
    Réponses: 2
    Dernier message: 15/01/2007, 17h10
  4. lister les fichiers d'un répertoire et les ouvrir
    Par thong36 dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2006, 10h43
  5. [CF][PPC/C#] Comment lister les fichiers d'un répertoire ?
    Par dady dans le forum Windows Mobile
    Réponses: 18
    Dernier message: 20/05/2005, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo