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

Excel Discussion :

Rechercher un fichier dans des sous dossiers


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Rechercher un fichier dans des sous dossiers
    Bonjour à tous

    Je cherche a afficher dans une feuille Excel le chemin réseau d'un fichier.

    Si je traduit dans un tableau cela donne :

    COL A COL B
    Détail_88221.xlsx Chemin réseau du fichier
    Détail_88222.xlsx Chemin réseau du fichier

    Chaque fichier est unique
    le fichier est toujours un fichier xlsx

    Le chemin réseau est par exemple
    \\INDUSTRIALISATION\METHODES\PROJETS
    Il y a plein de sous dossiers

    J'ai déjà exploré dans le forum mais je suis tombé sur des vieux post avec du filesearch qui ne fonctionne plus avec Excel 2016

    Je vous remercie pour votre aide

    Grégory

  2. #2
    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 : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 865
    Points
    3 865
    Par défaut
    Bonjour,
    Je te propose cette lecture : https://excel.developpez.com/faq/?page=FichiersDir

  3. #3
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    J'ai déjà vu ce post mais il n'y a pas la possibilité de RECHERCHER un fichier

    Merci

    Grégory

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    A ma connaissance, il n'y a pas de méthode de recherche dans les objets liées au File System dans VBA.

    La meilleure méthode sera donc d'explorer l'arborescence des répertoires, comme le suggère QuestVba ().
    Pour éviter d'avoir à vérifier chaque fichier des dossier, tu peux utiliser la méthode FileExists.
    Lire ça : https://docs.microsoft.com/fr-fr/off...eexists-method

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 961
    Points : 28 972
    Points
    28 972
    Billets dans le blog
    53

  6. #6
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Bonjour.

    Je vous remercie pour votre réponse,

    Du coup je peux avoir ce raisonnement,
    1- afficher tout les fichiers xlsx des sous dossiers dans une nouvelle feuille avec le lien hypertexte
    2- faire une recherchev pour récupérer les données

    Grégory

  7. #7
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Du coup au niveau du code j'ai :

    MAIS, comment filtrer uniquement sur les fichiers .xlsx qui contiennent "Détail_"

    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
    Option Explicit
     
    Sub TestListeFichiers()
        Dim Dossier As String
     
           Dossier = "\\INDUSTRIALISATION\METHODES\PROJETS"
     
        'Appelle la procédure de recherche des fichiers
        ListeFichiers Dossier
     
    End Sub
     
    Sub ListeFichiers(Repertoire As String)
     
        Dim Fso As Scripting.FileSystemObject
        Dim SourceFolder As Scripting.Folder
        Dim SubFolder As Scripting.Folder
        Dim FileItem As Scripting.File
        Dim i As Long
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = Fso.GetFolder(Repertoire)
     
        'Récupère le numéro de la dernière ligne vide dans la colonne A.
        i = Range("A65536").End(xlUp).Row + 1
     
        'Boucle sur tous les fichiers du répertoire
        For Each FileItem In SourceFolder.Files
     
            'Ajoute un lien hypertexte vers le fichier
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _
                Address:=FileItem.ParentFolder & "\" & FileItem.Name
     
     
            i = i + 1
        Next FileItem
     
     
        '--- Appel récursif pour lister les fichier dans les sous-répertoires ---.
        For Each SubFolder In SourceFolder.SubFolders
            ListeFichiers SubFolder.Path
        Next SubFolder
     
    End Sub

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par gregory.d Voir le message
    Du coup je peux avoir ce raisonnement,
    1- afficher tout les fichiers xlsx des sous dossiers dans une nouvelle feuille avec le lien hypertexte
    2- faire une recherchev pour récupérer les données
    Il serait plus efficace (et beaucoup plus rapide à l'exécution), de scruter tous les répertoires et, pour chacun, utiliser un FileExists pour savoir si ton fichier s'y trouve.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci Menhir pour votre réponse.

    Je suis "limité" sur VBA peux-tu me donner un exemple avec le code que j'ai fourni plus haut ?

    Merci

    Grégory

  10. #10
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    MAIS, comment filtrer uniquement sur les fichiers .xlsx qui contiennent "Détail_"

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par gregory.d Voir le message
    MAIS, comment filtrer uniquement sur les fichiers .xlsx qui contiennent "Détail_"
    Pourquoi filtrer puisque c'est un nom de fichier précis que tu recherches ?
    Il suffit que tu mettre le nom de fichier recherché dans le FileExists pour savoir s'il est présent dans le répertoire scruté.

    As-tu lu le lien que j'ai donné concernant cette méthode ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Pourquoi filtrer puisque c'est un nom de fichier précis que tu recherches ?
    Il suffit que tu mettre le nom de fichier recherché dans le FileExists pour savoir s'il est présent dans le répertoire scruté.

    As-tu lu le lien que j'ai donné concernant cette méthode ?
    Je recherche des fichiers qui contiennent "Détails_" après j'ai une suite de chiffre.

    J'ai regarder le lien et surtout la section "Comment lister les fichiers contenus dans un répertoire ainsi que dans tous ses sous-répertoires ?"

    J'ai adapter le code fourni mais c'est super long et j'ai plein de fichiers inutile pour moi, peux-tu m'aider à filtrer les fichiers excel qui contienne "Détails_" ou alors mieux une boucle du nom des fichiers que j'ai en colonne A

    voila le code adapté :

    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
    Option Explicit
     
    Sub TestListeFichiers()
    Dim Dossier As String
     
    Dossier = "\\INDUSTRIALISATION\METHODES\PROJETS"
     
    'Appelle la procédure de recherche des fichiers
    ListeFichiers Dossier
     
    End Sub
     
    Sub ListeFichiers(Repertoire As String)
     
    Dim Fso As Scripting.FileSystemObject
    Dim SourceFolder As Scripting.Folder
    Dim SubFolder As Scripting.Folder
    Dim FileItem As Scripting.File
    Dim i As Long
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(Repertoire)
     
    'Récupère le numéro de la dernière ligne vide dans la colonne A.
    i = Range("A65536").End(xlUp).Row + 1
     
    'Boucle sur tous les fichiers du répertoire
    For Each FileItem In SourceFolder.Files
     
    'Ajoute un lien hypertexte vers le fichier
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _
    Address:=FileItem.ParentFolder & "\" & FileItem.Name
     
     
    i = i + 1
    Next FileItem
     
     
    '--- Appel récursif pour lister les fichier dans les sous-répertoires ---.
    For Each SubFolder In SourceFolder.SubFolders
    ListeFichiers SubFolder.Path
    Next SubFolder
     
    End Sub

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par gregory.d Voir le message
    peux-tu m'aider à filtrer les fichiers excel qui contienne "Détails_" ou alors mieux une boucle du nom des fichiers que j'ai en colonne A
    A priori, tu ne lis pas ce que j'écris. Il est donc inutile que je me répète.
    Bonne chance pour la suite.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Menhir Voir le message
    A priori, tu ne lis pas ce que j'écris. Il est donc inutile que je me répète.
    Bonne chance pour la suite.
    C'est parce que je ne comprends pas ce que tu me dis.

    je le mets où le fileexist ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
        MsgBox FichierExiste("C:\Documents and Settings\dossier\dataBase.mdb")
    End Sub
     
     
    Function FichierExiste(NomFichier As String) As Boolean
        FichierExiste = Dir(NomFichier) <> "" And NomFichier <> ""
    End Function

  15. #15
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour et merci pour ta réponse,

    j'ai tester mais le code ne fonctionne pas et je ne suis pas très doué pour déboguer sur VBA, par contre j'ai customisé cela, mais le code ne regarde pas les sous dossier, peux-tu m'aider ?

    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
    Sub test()
     
    Dim Fichier As String
     
    Fichier = Dir("\\Grégory\*xlsx")
     
    Dim Dossier As String, i As Integer
     
    Dossier = "\\Grégory\"
     
    i = 0
     
    Fichier = Dir(Dossier)
     
    Do While Fichier <> ""
     
      i = i + 1
     
      Sheets("Feuil1").Range("A" & i) = Fichier
     
      Fichier = Dir
     
    Loop
     
    End Sub

  16. #16
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Hello,

    Ton code ne montre pas les sous dossier car non récursif.

    Il ne s'appelle pas lui même a chaque fois qu'il rencontre un sous dossier.

    Le code fournis par Philippe fonctionne pour ma part.
    Sur quelle ligne bug t'il ? Message d'erreur.

    D'autre méthodes sont aussi exploitable via Excel, récupérer via powershell, et aussi Power query.

    Ouvrir le dossier dans Firefox et faire un copier coller de la liste,...

    Bat,
    MFoxy

  17. #17
    Membre à l'essai
    Homme Profil pro
    Acheteur Production
    Inscrit en
    Octobre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Acheteur Production
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Le code de Philippe bug a cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     on_lance dos, attributs, flt_fic, flt_dos
    Grégory

  18. #18
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 961
    Points : 28 972
    Points
    28 972
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le code de Philippe bug a cette ligne :
    Alors que les choses soient claires, ce n'est absolument pas "mon" code.
    Ma responsabilité s'arrête à la diffusion d'un lien qui traitait du même sujet que celui de cette discussion.
    L'auteur du code proposé est de Jacques (Unparia) dont la rigueur dans l'écriture des quelques codes qu'il a proposé ici et ailleurs ne sont plus a démontré et donc même si on n'est jamais à l'abri d'un bogue, j'ai tout de même des doutes sur ce sujet.
    Personnellement, je ne l'ai pas testé car dans aucune de mes applications actuelles, je n'ai été confronté à la recherche de dossiers et sous-dossiers. La seule fois où j'en ai eu besoin, il me semble avoir utilisé le fso (FileSystemObject) évoqué d'ailleurs dans la discussion du lien proposé

    Un tutoriel à lire à ce sujet Manipulation des fichiers en VBA

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/02/2015, 20h07
  2. lecture de fichiers dans des sous-dossiers
    Par africanwinners dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2013, 17h48
  3. [XL-2003] recherche un fichier dans des sous répertoire et recopier son contenu
    Par hallscar dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/12/2011, 20h30
  4. recherche de fichier dans des sous repertoires
    Par Abou Zar dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2010, 09h48
  5. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 16h41

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