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 :

Ouverture pdf / recherche sous dossier [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut Ouverture pdf / recherche sous dossier
    Bonjour,
    Je viens vous demander de l'aide car cela fait une semaine que je découvre le VBA et 5 jours ou je suis coincé.
    Je m'explique, j'ai réussi à faire un UserForm pour pouvoir rechercher des pdf qui se trouvent dans des dossier et sous dossier et ensuite ouvrir les différents fichiers que j'aurais sélectionné dans la ListBox..

    Alors pour l'instant tout marche (Quitter, Explorer, TextBox, ListBox, Label1) sauf :
    -le bouton "find" qui ne va pas dans les sous dossier
    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
     
    Private Sub Find_Click()
     Dim Result As Variant
        Dim NomFichier As String
        Dim Dossier As String
        Dim Nb As Long
     
        Dossier = TextBox1.Value
        Chemin = "C:\test\" & Dossier
     
        ListBox1.Clear
        Nb = 0
            NomFichier = Dir(Chemin & "*.*")
                While NomFichier <> ""
                ListBox1.AddItem NomFichier
                NomFichier = Dir
                Nb = Nb + 1
            Wend
        Label1.Caption = Nb & " fichiers"
            If Nb = 0 Then
            MsgBox "le fichier n'existe pas", vbInformation + vbOKOnly, "ERREUR"
            End If
    End Sub
    - le bouton ouvrir qui pour l'instant n'ouvre rien ! (le critère multi sélection de la ListBox est activé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Ouvrir_Click()
    Dim ws As Worksheet
    Dim Chemin As String
    Dim NomFichier As String
     
        Set ws = ActiveSheet
        Chemin = ThisWorkbook.Path & Application.PathSeparator
        NomFichier = ListBox1 & ".pdf"
     
        ThisWorkbook.FollowHyperlink ".pdf"
     
        Set ws = Nothing
     
    End Sub
    Si quelqu'un pourrait m'aider à corriger mes codes svp.
    Je cherche mais je n'arrive pas à trouver ou a adapter les codes à mes besoins.
    Par avance merci.

    Pour montrer à quoi ressemble mon projet :

    Le code complet :
    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
    Private Sub Explorer_Click()
    Dim MonDossier As String
    MonDossier = "C:\test\"
     
    Shell Environ("WINDIR") & "\explorer.exe " & MonDossier, vbNormalFocus
    End Sub
     
    Private Sub Find_Click()
     Dim Result As Variant
        Dim NomFichier As String
        Dim Dossier As String
        Dim Nb As Long
     
        Dossier = TextBox1.Value
        Chemin = "C:\test\" & Dossier
     
        ListBox1.Clear
        Nb = 0
            NomFichier = Dir(Chemin & "*.*")
                While NomFichier <> ""
                ListBox1.AddItem NomFichier
                NomFichier = Dir
                Nb = Nb + 1
            Wend
        Label1.Caption = Nb & " fichiers"
            If Nb = 0 Then
            MsgBox "le fichier n'existe pas", vbInformation + vbOKOnly, "ERREUR"
            End If
    End Sub
     
    Private Sub Ouvrir_Click()
    Dim ws As Worksheet
    Dim Chemin As String
    Dim NomFichier As String
     
        Set ws = ActiveSheet
        Chemin = ThisWorkbook.Path & Application.PathSeparator
        NomFichier = ListBox1 & ".pdf"
     
        ThisWorkbook.FollowHyperlink ".pdf"
     
        Set ws = Nothing
     
    End Sub
     
    Private Sub Quitter_Click()
     UserForm2.Hide
    End Sub
    et mon UserForm
    Images attachées Images attachées  

  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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Merci pourle coup de main,
    mais d'entrée j'ai des erreur avec le via Iexplorer.
    Du coup en cherchant a adapter les codes, ben , pas mieux.
    Désolé mais quand on est débutant on est chiant .

  4. #4
    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, désolé mais je dis et répète : je ne pratique pas l'extispicine et donc ce genre de message n'apporte rien, d'autant plus qu'ici tout fonctionne.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Ben si tu ne vois rien dans les viscères, essaye la boule de cristal !
    Sinon blague à part,
    d'entrée, étant en 64 bits il me dit que ce n'est pas compatible.
    je force et j'essaye d'utiliser le user form et là :
    bouton repertoire : erreur de compilation Sub ou function non défini.
    Quand je lis le code du bouton ouvrir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
    Dim sFichier As String, WsShell As Object
        sFichier = Me.TextBox1
        If Len(sFichier) = 0 Then Exit Sub
        Set WsShell = CreateObject("WScript.Shell")
        WsShell.Run "AcroRd32 " & sFichier
        Set WsShell = Nothing
    End Sub
    J'essaye de le mettre mais moi c'est ce qui est sélectionné dans la ListBox1 que je veut ouvrir et quand je remplace Me.TextBox1 par ListBox1 ça ne marche pas.
    Désolé d'avoir été trop direct et sans info.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir
    si je devine par raport au titre "ouverture pdf / recherche sous dossier"
    je suppose que tu a du mal avec les subdossiers
    il y a 2 méthodes que je connais la méthode avec dir en récursivité mais c'est assez capricieux "dir" n'étant pas récursif il faut tamponner chaque fin de dir
    ou la méthode avec la librairie Scripting qui elle est beaucoup moins contraignante vis a vis des tampons
    le principe étant de partir d'un dossier ,lister les sous dossier et a chaque étape lister avec "dir" les fichiers
    voici une petite fonction qui te liste tout tes pdf qui se trouve dans un dossier et ses sous dossiers dans la fenêtre d'exécution avec le chemin complet

    la fonction devient le tableau des fichiers avec le chemin complet bien sur
    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
     
    '=======================================================================================================
    '              OBJECT  : FONCTION DE RECHERCHE RECURSIVE AVEC L'OBJECT SCRIPTING.FILESYSTEMOBJECT      =
    '              createur  patricktoulon pour developpez.com                                             =
    '               date de création  27/06/2010                                                           =
    '=======================================================================================================
    Sub test()
        tabl = listdosssubdoss("C:\Users\polux\Desktop\testrecursiverecheche", "*.pdf") 'chemin entre guillemets a adapter
        'exemple d'utilisation on va transposer la liste sur le sheets
        Sheets(1).Cells(1, 1).Resize(UBound(tabl), 1) = Application.Transpose(tabl)
    End Sub
    Function listdosssubdoss(dparent, ext, Optional L As String) As Variant
        Dim FSO As Object, oFolder As Object, sous_dossier As Object, Ficher   'Scripting.Folder
        fichier = Dir(dparent & "\" & ext) ' a chaque passage on liste avec dire sur une extention en l'occurence ici "pdf"
        Do While fichier <> ""
            'Debug.Print dparent & "\" & fichier
            L = L & dparent & "\" & fichier & vbCrLf ' on alimente une liste dans une vriable de type texte
            fichier = Dir ' on redemande tant qu'il y a quelque chose
        Loop
        Set FSO = CreateObject("scripting.filesystemobject") ' on declare l'object
        Set oFolder = FSO.GetFolder(dparent) 'on attribue a l'object.getfolder le dossier demandé
        For Each sous_dossier In oFolder.SubFolders 'on boucle sur les dossiers qui sont dans ce dossiers
            'Debug.Print sous_dossier.Path
            listdosssubdoss sous_dossier.Path, ext, L ' on rappelle la fonction avec pour argument le chemin du sous dossier
        Next sous_dossier
        listdosssubdoss = Split(L, vbCrLf) 'on coupe la liste par les saut de lignes on a maintenant un array la fonction devient cet array
    End Function
    si ca peut servir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    merci pour ton aide,
    mais là tu es déja trop loin pour moi.
    mon problème avec les sous dossier c'est qu'avec mon code du bouton find,
    je ne recherche que dans c:\test\ mais si j'ai des fichiers qui sont dans c:\test\dossier\ par exemple, et bien ils ne sont pas vu.
    je recherche donc la modif a faire sur mon code afin de pouvoir explorer aussi les sous dossier.

    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
    Private Sub Find_Click()
     Dim Result As Variant
        Dim NomFichier As String
        Dim Dossier As String
        Dim Nb As Long
     
        Dossier = TextBox1.Value
        Chemin = "C:\test\" & Dossier
     
        ListBox1.Clear
        Nb = 0
            NomFichier = Dir(Chemin & "*.*")
                While NomFichier <> ""
                ListBox1.AddItem NomFichier
                NomFichier = Dir
                Nb = Nb + 1
            Wend
        Label1.Caption = Nb & " fichiers"
            If Nb = 0 Then
            MsgBox "le fichier n'existe pas", vbInformation + vbOKOnly, "ERREUR"
            End If
    End Sub
    merci.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    re
    j'ai très bien compris mais si tu n'est pas capable d'adapter celle que je viens de te donner tu risque pas de t'en sortir avec la version "dir" que tu utilise en unique

    peut être a tu eu des ambitions qui t ont dépassé
    il faudrait peut être encore une fois alors commencer par le début et avancer pas a pas

    re
    colle la fonction que je t'ai donné dans un module standard
    et change ton clik pour ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Find_Click()
        Dim Result As Variant, NomFichier As String, Dossier As String, Nb As Long,tabl
        Dossier = TextBox1.Value
        chemin = "C:\test\" & Dossier
        listbox1.Clear
        tabl = listdosssubdoss(chemin, "*.pdf")
        If UBound(tabl) = 0 Then
            MsgBox "il n'y a pas de PDF dans ce dossier et ses sous dossiers ", vbInformation + vbOKOnly, "ERREUR"
        Else
            listbox1.List = tabl
            Label1.Caption = UBound(tabl) & " fichiers"
        End If
    End Sub
    pas compliqué
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    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, toujours d'actualité : Développer avec Office 64 bits

    D'autant plus que même Microsoft déconseille l'installation d'une version 64 bits d'Office.

    Office 32 bits est recommandé pour la plupart des utilisateurs
    Nous recommandons la version 32 bits d’Office pour la plupart des utilisateurs, car elle offre une plus grande compatibilité avec la plupart des autres applications, en particulier les compléments tiers. C’est la raison pour laquelle la version 32 bits d’Office 2013 est installée par défaut, même sur les systèmes d’exploitation Windows 64 bits. Sur ces systèmes, le client Office 32 bits est pris en charge en tant qu’installation Windows-32-on-Windows-64 (WOW64). WOW64 est l’émulateur x86 qui permet l’exécution de façon transparente des applications Windows 32 bits sur les systèmes Windows 64 bits. Cela permet aux utilisateurs de continuer à utiliser les contrôles ActiveX et les compléments COM Microsoft avec la version 32 bits d’Office.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Alors j'ai collé la fonction dans un module,
    remplacer mon click.
    mais beaucoup d'erreur reviennent sur la fonction.

    Pas compliqué certe, mais là je deviens fou.

    EDIT : pour le 64, j'ai pas eu le choix.

    EDIT : en PJ mon fichier avant modif
    Fichiers attachés Fichiers attachés

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bon voila ton fichier
    apercu animé
    je l'ai pas arrangé je te laisse faire a ta guise pour n'afficher que les nom dans la liste et pas le chemin complet
    Nom : demo2.gif
Affichages : 1540
Taille : 827,4 Ko
    Fichiers attachés Fichiers attachés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup.
    Franchement la fonction je risquais pas de la trouver.
    Encore merci.
    Mais cela ma créer un problème, ma TextBox1 n'a plus d'influence, le principe de barre de recherche ne marche plus.
    Désormais que je tape "test" ou "truc", le résultat après l'appui sur la touche find est que dans ma ListBox apparaît tous les pdf du répertoire et sous répertoire et non pas uniquement le pdf contenant les termes que j'ai écrit dans ma TextBox.
    Une idée ?
    A part ça tout est ok.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Bonjour,
    Après une nouvelle journée de recherche, je n'ai toujours pas trouvé de solution.
    Si quelqu'un à la solution pour mon nouveau problème :

    - le bouton find ne fait plus qu'afficher dans la listbox la liste complète de mes pdf dans le répertoire et les sous répertoire mentionné alors que le but est qu'il m'affiche dans la listbox le pdf dont le nom (ou parti du nom) est écrit dans la textbox.
    En gros :
    textbox : zone ou je tape un nom de fichier
    bouton find : bouton rechercher
    listbox : résultat de la recherche
    Sachant que j'ai des pdf intitulé ex: 789-1254 et aussi 789-1254-1, 789-1254-2 il faudrait que les 3 résultats apparaissent dans la listbox.

    Par avance merci.
    PS: encore merci à patricktoulon pour sa patiente et son boulot pour un pur débutant. (mais qui cherche, qui cherche, qui cherche...)

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    la bonne blague
    si tu me dis que ca marchait avant tu es un sorcier plein de pouvoirs tu n'a donc besoins de personne pour résoudre ton soucis

    je n'ai rien changé a ce niveau
    en fait ton textbox est considéré comme la dernière partie du nom de dossier a examiner
    en aucun cas c'est la partie ou le nom d'un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Find_Click()
        Dim Result As Variant, NomFichier As String, Dossier As String, Nb As Long
        Dossier = TextBox1.Value
        chemin = "C:\test\" & Dossier dossier ' le nom du dossier a examiner pas la partie du nom de fichier a trouver
    il faut savoir ce que tu veux
    si dossier n'est pas une partie du nom de dossier le nom du dossier c'est quoi "C:\test\"?????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Désolé si je me suis mal exprimé.
    Si tu lance le userform2 de mon fichier, tu pourras voir que ça marchais.
    Pour essayer d'être plus compréhensible :
    avec le code d'origine (celui du bouton find dans le userform2), quand je tapais "truc" dans ma textbox, puis appuie sur "find", j'avais dans la listbox que les fichiers avec "truc".
    Si ensuite je tapais "chose" dans ma textbox, il n'y avait que les fichiers "chose" qui s'affichait dans ma lisboxt.
    Le problème que j'ai, c'est que cette recherche s'arrête au dossier c:\test\ et n'allait pas regarder dans par exemple c:\test\fromage\ ou dans c:\test\fromage\particule\ ou dans c:\test\pizza etc...
    Voila, en espérant avoir été clair ce coup-ci. Etant débutant j'ai certainement pas utilisé les bon termes ou dans le bon ordre et je m'en excuse .

  16. #16
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,
    quelqu'un pour aider un pauvre naufragé du code VB ?
    Je résume ce que je souhaite :

    1- Je tape un nom de fichier (ex : 658794) dans ma TextBox
    2- J'appui sur le bouton "Find"
    3- Les fichiers qui correspondent (658794, 658794 -1, 658794-2, 658794-3) qui sont dans différents répertoires et sous répertoires dont la racine commune est : c:\test\draw s'affiche dans la ListBox et non pas un listage de tous les fichiers qui sont dans c:\test\draw\... .
    4- Je sélectionne un des fichier dans la ListBox
    5- J'appui sur le bouton ouvrir et le fichier sélectionné s'ouvre.

    Pour l'instant grâce à Patricktoulon, la partie 5 fonctionne parfaitement.
    Après être parti dans tous les sens, je pense avoir un truc un peu près propre et enfin presque toucher au but.
    - premier problème, ma recherche de fichier par ex : 658794 ne me donne comme résultat dans la ListBox que :658794 mais pas ceux nommés 658794-2, 658794-3
    - second problème, ma recherche s’arrête au 1er niveau, dans : c:\test\draw mais ne va pas chercher plus loin alors qu'il y a encore d'autres sous répertoire (ex : c:\test\draw\65-45896\ ).

    En espérant ne pas être trop fatiguant, j'en appelle à toutes les bonnes âmes du VB pour m'aider.
    merci.

    PS: voila mon fichier et code pour vous donner une idée d'ou j'en suis.

    module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Dim fichier As String
    Dim fichier2 As String
    Dim Flder As Object
    Dim comp As String
    Const boite = vbOKOnly + vbInformation
    Userform1
    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
    Private Sub Explorer_Click()
    Dim MonDossier As String
    MonDossier = "C:\test"
     
    Shell Environ("WINDIR") & "\explorer.exe " & MonDossier, vbNormalFocus
    End Sub
     
    Private Sub Find_Click()
     Dim fso As Object
    Dim Dossier As Object
    Dim LeDossier As String
    Dim chemin As String
     
    comp = TextBox1.Value
    LeDossier = "C:\test"
     
    Set fso = CreateObject("scripting.FileSystemObject")
    Set Dossier = fso.getfolder(LeDossier)
     
    For Each Flder In Dossier.subfolders
        fichier = Dir(Flder.Path & Application.PathSeparator & comp & ".pdf")
        If fichier <> "" Then '
            chemin = Flder.Path & Application.PathSeparator
            Exit For
        End If
    Next Flder
     
    If fichier = "" Then
        MsgBox "le fichier n'existe pas", vbInformation + vbOKOnly, "ERREUR"
    Else
        fichier = chemin & comp & ".pdf"
        UserForm1.ListBox1.AddItem fichier
    End If
    End Sub
     
    Private Sub Ouvrir_Click()
    Dim sFichier As String, WsShell As Object
        sFichier = Me.ListBox1.List(ListBox1.ListIndex)
        If Len(sFichier) = 0 Then Exit Sub
        Set WsShell = CreateObject("WScript.Shell")
        WsShell.Run "AcroRd32 " & sFichier
        Set WsShell = Nothing
    End Sub
     
    Private Sub Quitter_Click()
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close
    End Sub
    V3.xlsm

  17. #17
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,
    juste regarder dans la , le sous-forum d'Excel Contribuez ou encore les tutoriels pour chercher dans des sous-dossiers …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  18. #18
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    J'essaye, j'en lis des FAQ, des tutos, des discussions mais pas moyen de réussir a adapter et vraiment comprendre les différents codes.
    Du coup, soit sa me met erreur sur erreur voir même certaines fonctions qui marchais ne marche plus.
    Je pense être sur un bout de code pas trop dégeulasse pour le moment mais juste besoin d'un autre coup de main pour finir mon projet.
    Merci.

  19. #19
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Parmi les nombreuses discussions traitant ce sujet commun en voici une

    La méthode la plus rapide étant quand même celle de kiki29 présentée dans le post #2.
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  20. #20
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Voila, j'ai enfin réussi à obtenir ce que je voulais exactement :
    chercher des PDF dans des répertoires et sous répertoire, avoir un aperçu une fois sélectionné dans la ListBox et pouvoir ouvrir le fichier en double-cliquant sur son nom.
    Cela parait surement très simple pour des habitués, mais pour moi cela à été 1 mois de recherches, de test, d'appel au secours ...
    Du coup je laisse mon fichier en pièce jointe, il pourra peut-être servir a des novices comme moi (une sorte de contribution).
    Sinon voici le code complet au cas ou des pro relèverais des erreurs voir même l'optimiser peut-être.

    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
    Option Explicit
    Dim fso As Object
    Dim fld As Object
     
    Private Function TrouveFichiers(ByVal sFol As String, sFile As String, _
                              NbRep As Long, NbFichiers As Long) As Currency
    Dim tFld, NomFichier As String
      Set fso = CreateObject("Scripting.FileSystemObject")
      On Error GoTo Catch
      Set fld = fso.GetFolder(sFol)
      NomFichier = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
                                                     vbHidden Or vbSystem Or vbReadOnly)
      While Len(NomFichier) <> 0
        TrouveFichiers = TrouveFichiers + FileLen(fso.BuildPath(fld.Path, _
                                                    NomFichier))
        NbFichiers = NbFichiers + 1
        ListBox1.AddItem fso.BuildPath(fld.ShortPath, NomFichier)
        'ou ListBox1.AddItem NomFichier 'uniquement le nom des fichiers
        NomFichier = Dir()
        DoEvents
      Wend
      Label1 = "Recherche " & vbCrLf & fld.Path & "..."
      NbRep = NbRep + 1
      If fld.SubFolders.Count > 0 Then
        For Each tFld In fld.SubFolders
          DoEvents
          TrouveFichiers = TrouveFichiers + TrouveFichiers(tFld.Path, sFile, NbRep, NbFichiers)
        Next
      End If
      Exit Function
    Catch:     NomFichier = ""
      Resume Next
    End Function
     
    Private Sub Find_Click()
      Dim NbRep As Long, NbFichiers As Long, NbBytes As Currency
      Dim Depart As String, Extension As String
      ListBox1.Clear
      Depart = "C:\test\"
      Extension = TextBox1.Value & "*.pdf"
      Label1.Caption = "Recherche " & vbCrLf & UCase(Depart) & "..."
      NbBytes = TrouveFichiers(Depart, Extension, NbRep, NbFichiers)
      MsgBox Str(NbFichiers) & " Fichiers trouvés ", vbInformation
      If NbBytes = "0" Then
      End If
    End Sub
     
    Private Sub Explorer_Click()
      Dim MonDossier As String
      MonDossier = "C:\test\"
      Shell Environ("WINDIR") & "\explorer.exe " & MonDossier, vbNormalFocus
    End Sub
     
    Private Sub ListBox1_Click()
      WebBrowser1.Navigate Me.ListBox1.List(ListBox1.ListIndex)
    End Sub
     
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        Dim sFichier As String, WsShell As Object
        Dim MSG As String
        If IsNull(ListBox1) Then
        MSG = MsgBox("Veuillez sélectionner un fichier")
        Else
        sFichier = Me.ListBox1.List(ListBox1.ListIndex)
        If Len(sFichier) = 0 Then Exit Sub
        Set WsShell = CreateObject("WScript.Shell")
        WsShell.Run "AcroRd32 " & sFichier
        Set WsShell = Nothing
        End If
    End Sub
     
    Private Sub Quitter_Click()
        ThisWorkbook.Saved = True
        ThisWorkbook.Close
    End Sub
    Merci à tous et bonne année.

    Recherche de PDF.xlsm

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

Discussions similaires

  1. [OL-2010] Rechercher sous-dossier avec inputbox + Créer sous-dossier en VBA
    Par lauraholt dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 12/12/2016, 17h27
  2. [Logiciel] Recherche editeur de PDF gratuit sous Windows
    Par nico-pyright(c) dans le forum Autres Logiciels
    Réponses: 16
    Dernier message: 15/07/2010, 14h46
  3. recherche dans les sous dossiers
    Par y-master dans le forum VBA Outlook
    Réponses: 3
    Dernier message: 23/10/2008, 16h53
  4. [BATCH] Recherche dans sous-dossiers
    Par tonf dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 13/08/2008, 15h17
  5. Réponses: 21
    Dernier message: 07/05/2006, 17h27

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