Lister Fichiers Pdf d'un dossier et ses dossiers

Bonsoir

je voudrais lister des fichiers pdf qui se trouvent dans un dossier et ses sous-dossiers.

le dossier principal est celui où se trouvera le fichier ci-joint.

L'objectif est d'avoir dans une listbox tous les fichiers pdf pour ouvrir le fichier de mon choix.

je voudrais aussi pouvoir filtrer la listbox en utilisant une textbox.

Auriez-vous une solution à me proposer? J'espère avoir réussi à bien exposer mon problème.

Merci par avance. Bonne soirée.

nb: je n'ai mis aucun code, il a juste le formulaire.

15ouvrir-pdf.xlsm (16.96 Ko)

Bonjour CP4

Une proposition avec sélection du dossier sur la gauche et la saisie du filtre à droite

pour l'instant pas de parcours des sous-dossiers

21ouvrir-pdf.xlsm (25.07 Ko)

Bonsoir Scraper,

Je te remercie. je garde ton fichier, il pourrait me servir.

Cependant, ce n'est pas ce que je souhaite: Invite pour sélectionner mon dossier.

Je voudrais que la liste s'alimente à l'ouverture du formulaire.

J'avais trouvé quelque chose que je n'arrive plus à mettre la main dessus.

Les chemins et les fichiers étaient répertoriées sur une feuille excel.

Je n'ai pas su adapter le code pour alimenter la listbox au lieu de la feuille.

Si je le retrouve demain, j'éditerai le code (je me souviens juste que c'était un truc récursif).

Merci beaucoup. Bonne soirée.

Bonjour CP4, attention à la limite de 32767 éléments dans une listbox, si le motif n'est plus *.pdf mais *.*, ce sera un problème sans compter que le processus risque de prendre des dizaines de minutes (sans système d'interruption), voire plus.

Bonjour,

Pour info dans l'explorateur windows, si vous avez l'indexation des fichiers activée (par défaut oui), en allant dans votre dossier et entrez "type:pdf" dans la barre de recherche vous avez un résultat instantané ET à jour.

Et si vous voulez enregister la liste dans Excel : sélectionnez tous les résultats, MAJ+clic droit "Copier les chemins" > coller dans Excel.

Je ne vois pas trop pourquoi se casser la tete à reproduire cela dans Excel avec toutes les contraintes que cela implique.

Bonjour,

Je ne vois pas trop pourquoi se casser la tete à reproduire cela dans Excel avec toutes les contraintes que cela implique.

Tout à fait d'accord avec cela...

Néanmoins, si vous voulez pouvoir lancer la boite de dialogue depuis VBA une solution intermédiaire consiste à utiliser GetOpenFileName de l'objet Application.

    Dim FilePath As Variant
    FilePath = Application.GetOpenFilename("Fichiers Pdf (*.pdf), *.pdf")
    If FilePath <> False Then
        '...
        '...
    End If

Comme dans l'explorateur vous aurez accès au filtrage des fichiers en haut à droite.

Bonjour,

Merci pour vos retours.

@saboh12617: Il me semble que vous n'avez pas compris ma demande. je recherche une solution en vba. merci quand même de m'avoir répondu.

@Jean-Paul: Merci. Chacun à son opinion. ce n'est pas du tout ce que j'ai demandé. Vous répondez en fait à la proposition de @scraper.

Soit je me suis trompé de forum, soit on n'a rien compris à ma demande.

je fais partie des gens qui veulent se casser la tête pour aboutir à quelque chose qui me sera utile.

Encore merci. Bonne journée.

Re,

Bien sûr que l'on à bien compris. Les solutions les plus simples restes souvent les meilleures.

Maintenant si vous voulez absolument remplir une zone de liste avec les fichiers pdf d'un répertoire alors vous pouvez adapter cette solution :

Const MyPath As String = "P:\Documents Office approuvés\Pdf\"
        ComboBox1.List = Filter(Split(CreateObject("wscript.shell").exec("cmd /c Dir """ & MyPath & "*.pdf"" /b /a-d").stdout.readall, vbCrLf), ".")

Bonjour,

Vous me proposez une bribe de code...

Merci pour le rappel des meilleures solutions sont les plus simples.

Merci.

Bonne journée.

Pour ceux que ça intéresse un début.

la listbox est alimentée (fichiers pdf présents dans dossier et sous-dossiers).

Manque code filtre de la listbox via la textbox et code bouton ouvrir le pdf sélectionné dans la listbox.

19ouvrir-pdf-v1.xlsm (19.94 Ko)

Code pour le bouton lire pdf à ajouter

Private Sub BtOuvrir_Click()
   Dim LeFichier As String
   LeFichier = ListBox1.Column(1)
   CreateObject("WScript.Shell").Run CreateObject("Scripting.FileSystemObject").GetFile(LeFichier).ShortPath
   Unload Me
End Sub

Re,

Bé voilà, Monsieur je râle tout le temps.

Option Explicit

' // Constante à adapter !!!
Const Dossier As String = ""

Private Sub UserForm_Activate()
    If Dossier = vbNullString Then MsgBox "Vous devez définir la constante : Dossier": Unload Me
End Sub

Private Sub BtExit_Click()
    Unload Me
End Sub

Private Sub BtOuvrir_Click()
    Dim selectedFile As String

    If ListBox1.ListIndex <> -1 Then
        selectedFile = ListBox1.List(ListBox1.ListIndex, 1)

        Call Shell("explorer.exe """ & selectedFile & """", vbNormalFocus)
    Else
        MsgBox "Vous devez d'abord sélectionner un fichier dans la liste.", vbExclamation
    End If
End Sub

Private Sub FillListPdfFiles(Control As Object, Dossier As String)
    With Control
        .Clear
        .List = GetPdfFiles(Dossier, Me.TextBox1.Value)
    End With
End Sub

Sub GetFiles(folder As Object, PdfFiles As Collection, filter As String, fso As Object)
    Dim subFolder As Object
    Dim file As Object

    For Each file In folder.Files
        If LCase(fso.GetExtensionName(file.Name)) = "pdf" And InStr(1, file.Name, filter, vbTextCompare) > 0 Then
            PdfFiles.Add file
        End If
    Next file

    For Each subFolder In folder.SubFolders
        Call GetFiles(subFolder, PdfFiles, filter, fso)
    Next subFolder
End Sub

Function GetPdfFiles(directory As String, filter As String) As Variant
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim PdfFiles As Collection
    Set PdfFiles = New Collection

    Dim folder As Object
    Set folder = fso.GetFolder(directory)

    GetFiles folder, PdfFiles, filter, fso

    Dim Result() As Variant
    ReDim Result(1 To PdfFiles.Count, 1 To 2)

    Dim Counter As Long
    For Counter = 1 To PdfFiles.Count
        Result(Counter, 1) = PdfFiles(Counter).Name
        Result(Counter, 2) = PdfFiles(Counter).Path
    Next Counter

    GetPdfFiles = Result
End Function

Private Sub TextBox1_Change()
    FillListPdfFiles ListBox1, Dossier
End Sub

Bonsoir Monsieur qui râle tout temps. ta solution arrive trop tard.

Voici la v2, qui fait le boulot comme je l'espérais.

En espèrant qu'elle sera utile à d'autres.

Bonne soirée.

20ouvrir-pdf-v2.xlsm (25.37 Ko)
Rechercher des sujets similaires à "lister fichiers pdf dossier dossiers"