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 :

Recherche dossier et sous dossier


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Recherche dossier et sous dossier
    Bonjour,

    Je recherche un code VBA ou l'on peut rechercher un fichier selon une partie de son nom, dans un répertoire avec beaucoup de sous répertoires puis l'ouvrir.
    Après de multiple recherche, je ne trouves aucun code qui fonctionne.

    Merci par avance à tout ceux qui pourront m'éclairer.

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 181
    Points : 5 512
    Points
    5 512
    Par défaut
    Bonjour,

    Il est possible d'adapter le code donné dans cette discussion:
    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
    Option Explicit
    Option Compare Text '==> majuscules = minuscules, mais lettres accentuées <> lettres non accentuées
     
    '--- https://www.developpez.net/forums/d964521/logiciels/microsoft-office/excel/macros-vba-excel/recherche-fichier-dossier-sous-dossier/#post6534830
     
    Private Sub Chercher(sDossier As String, sFichier As String)
        Dim Fso As Object
        Dim Dos As Object
        Dim SousDos As Object
        Dim D As Object
        Dim Fichier As Object
        Set Fso = CreateObject("Scripting.FileSystemObject")
        '--- si le dossier n'existe pas, fin
        If Fso.FolderExists(sDossier) = False Then
            MsgBox "Le sDossier " & sDossier & " n'existe pas !", , "Recherche annulée"
            Exit Sub
        End If
        Set Dos = Fso.GetFolder(sDossier)
        '--- recherche le fichier dans le dossier
        For Each Fichier In Dos.Files
                '--- si trouvé nom ressemblant
            If Fichier.Name Like sFichier Then
                If MsgBox("Ouvrir ce fichier ?  " & Fichier, vbYesNo + vbDefaultButton2, "Oui-Non?") = vbYes Then
                    ThisWorkbook.FollowHyperlink Fichier
                End If
            End If
        Next Fichier
        Set SousDos = Dos.SubFolders
        '--- recherche dans les sous dossiers
        For Each D In SousDos
            For Each Fichier In D.Files
                '--- évite l'erreur des dossiers interdits
                On Error Resume Next
                '--- si trouvé nom ressemblant
                If Fichier.Name Like sFichier Then
                    If MsgBox("Ouvrir ce fichier ?  " & Fichier, vbYesNo, "Oui-Non?") = vbYes Then
                        ThisWorkbook.FollowHyperlink Fichier.FullName
                    End If
                End If
            Next Fichier
            '--- rappel de la proc pour chercher les dossiers enfants
            Chercher D.Path, sFichier
        Next D
    End Sub
     
    Sub test()
        Chercher ThisWorkbook.Path, "*a*a*.x*"
        MsgBox "Recherche terminée!"
    End Sub
    A adapter.
    Bonne continuation.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci pour votre réponse!

    Cela fonctionne mais malheureusement c'est horriblement trop long...

    Est ce qu'il y aurait une solution pour effectuer cette recherche dans les même temps que cela prend via une recherche en tapant dans la recherche de l'explorateur Windows ( 2s)
    L'idée aujourd'hui est de supprimer le fait de : selon une référence d'instrument / aller dans le bon dossier / rechercher un document dans le dossier qui comporte ÉNORMÉMENT de sous dossier / ouvrir le document / ouvrir le bon onglet à la bonne case.
    Le fait de rechercher le document avec l'explorateur windows prend 10s.
    Avec ce code en boucle cela prend 5Min ( ce projet d'amélioration devient donc inutile pour moi...)

    Peut être faut il passer par un autre langage de programmation afin d'exploiter la vitesse de l'explorateur windows? Toujours en démarrant d'une macro Excel évidement...

    Si vous avez d'autre idée je suis preneur

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 054
    Points : 2 517
    Points
    2 517
    Par défaut
    Bonjour

    pourquoi voulez vous accéder au fichier ?

    si c'est simplement pour récupérer de l'info vous pouvez utiliser Power Query (natif dans les versions récentes d'Excel, en add-in si vous êtes en 2013).

    si par contre vous voulez l'ouvrir pour le modifier, il faudra du VBA.
    Par contre Power Query peut être très utile pour identifier rapidement le sous-dossier concerné


    Stéphane

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai besoin d'aller chercher le document pour le modifier manuellement.

    Je ne connait pas les fonctionnalités de Querry? est il possible de demander à Querry d'aller m'ouvrir un fichier selon certains caractère de son nom? via une macro VBA ?
    Désolé je m'explique peut être mal...

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 054
    Points : 2 517
    Points
    2 517
    Par défaut
    Bonjour

    Power Query ne permettra pas d'ouvrir le fichier, il peut permettre d'identifier très rapidement le dossier et le nom complet du fichier (vu que c'est ça qui semble être problématique avec VBA)

    2 étapes :
    1 - récupérer les éléments d'un dossier (ici C:/Temp)
    2 - filtrer suivant les noms qui contiennent la chaîne de caractères recherchée (ici le mot "test")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let
        Source = Folder.Files("C:/Temp"),
        #"Lignes filtrées" = Table.SelectRows(Source, each Text.Contains([Name], "test"))
    in
        #"Lignes filtrées"
    Chez moi il y a 4 fichiers

    Nom : 2021_05_26 Chemin fichier.JPG
Affichages : 157
Taille : 88,3 Ko

    en chargeant cette requête dans une table, on récupère ainsi le nom du fichier complet, son extension, son chemin.
    il suffit ensuite de passer ces infos dans une macro pour ouvrir le document
    quitte à boucler sur toutes les lignes afin d'ouvrir tous les fichiers qui correspondent.

    il est possible de passer des paramètres à la requête Power Query
    A partir d'un tableau structuré nommé "Tableau1" qui a une colonne "Chemin" et une colonne "Nom"
    La requête suivante permet de lister tous les fichiers du dossier et sous-dossiers qui contiennent le "Nom" (mais attention, Power Query est sensible à la casse donc "Test" est différent de "test")


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let
        Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
        #"Personnalisée ajoutée" = Table.AddColumn(Source, "FolderFiles", each Folder.Files([Chemin])),
        #"FolderFiles développé" = Table.ExpandTableColumn(#"Personnalisée ajoutée", "FolderFiles", {"Name", "Extension", "Folder Path"}, {"Name", "Extension", "Folder Path"}),
        #"Lignes filtrées" = Table.SelectRows(#"FolderFile développé", each Text.Contains([Name], [Nom]))
    in
        #"Lignes filtrées"

    Stéphane

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 108
    Points : 171
    Points
    171
    Par défaut
    Bonjour Stephane (Raccourcix),

    J'ai eu Trois formations ce mois de mai, sur les outils Microsoft, PowerPower BI (dont Query), Power Apps, et enfin Power Automate.
    Je ne suis convaincu par aucun de ces trois (ou 4) outils.

    Je préfère de loin faire une recherche de fichier ou dossier avec Microsoft powerShell bien plus efficace, performant, ...
    J'ai écrit l'équivalent de Windows Explorer en quelques lignes de Powershell avec une interface GUI.

    Vais -je investir dans la galaxie Power, oui si l'entreprise me donne quelque chose en échange

    Sinon, je préfère faire une commande "Dir /S" sur l'invite de commande qui scrute même sur une station connectée des disques de serveurs, et épurer les données pour les exploiter ensuite dans Excel et pourquoi pas dans Power Query : je reste ouvert.

    Pour filtrer des fichiers de sortie au format texte je préfère VBScript à VBA

    Et je peux fournir des solutions en particulier en VBScript

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Re bonjour,

    Je ne parvient pas à créer ma base de donnée afin d'extraire mes dossier et sous dossier .
    Je voudrait bien extraire via Query tout mon répertoire ainsi que ces sous-dossiers concernés par cette recherche mais je ne sais pas créer cette base de donné (SQL?)

    Il s'agit d'un répertoire sur le serveur (peut être protéger?)

    Pourrait t'on m’éclairer sur la procédure de création de cette base de donné à créer?

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 181
    Points : 5 512
    Points
    5 512
    Par défaut
    Un point de départ sur Youtube: Liste des attributs de fichiers d'un dossier sans VBA Excel
    Cordialement.

  10. #10
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 568
    Points : 1 004
    Points
    1 004
    Par défaut
    Un truc comme ça ?

    Complète le répertoire principal en B1 et la partie du nom de fichier en B2 puis clique sur le bouton.
    A compléter pour gérer les erreurs mais tu as déjà la base d'une manière de faire.
    Fichiers attachés Fichiers attachés
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  11. #11
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par Pippin86 Voir le message
    Cela fonctionne mais malheureusement c'est horriblement trop long...
    Si vous avez d'autre idée je suis preneur
    Bonjour.
    J'ai une autre idée : utiliser l'API SearchTreeForFile (Excel version 32 bits), via la fonction "RechercheFichierAPI" pour en simplifier l'usage.

    Passez en argument :
    - le répertoire principal (la recherche se fera dans ce répertoire et ses sous-répertoires) ;
    - le nom du fichier (où les joker * et ? sont admis comme pour un Dir classique).
    Cela retourne l'adresse du fichier si trouvé, vide si pas trouvé.

    Exemple d'utilisation :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox RechercheFichierAPI("C:\Formation_EXCEL\", "*Facture*")

    La fonction :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Declare Function SearchTreeForFile Lib "imagehlp" (ByVal RootPath As String, ByVal InputPathName As String, ByVal OutputPathBuffer As String) As Long
     
    '----------------------------------------------------------------------------------------
    Public Function RechercheFichierAPI(ByVal StrRepertoire As String, ByVal StrFichier As String) As String
    '----------------------------------------------------------------------------------------
    ' Recherche un fichier dans le répertoire indiqué et ses sous-répertoires.
    ' Idem Dir() où : ? pour remplacer un caractère et * pour une suite de caractères.
    ' Retourne : l'adresse du fichier si trouvé, vide si pas trouvé.
    '----------------------------------------------------------------------------------------
    Dim TempStr As String, Ret As Long
    TempStr = String(260, 0)
    Ret = SearchTreeForFile(StrRepertoire, StrFichier, TempStr)
    If Ret <> 0 Then RechercheFichierAPI = Left$(TempStr, InStr(1, TempStr, Chr$(0)) - 1)
    End Function

    C'est pas nouveau, c'était déjà expliqué dans ma première documentation au chapitre XXII. Voir ma signature.
    Cordialement.

Discussions similaires

  1. recherche dossier et sous dossier
    Par soron59 dans le forum VBScript
    Réponses: 3
    Dernier message: 16/07/2012, 15h27
  2. Recherche dossier sous Windows
    Par biquet52 dans le forum Windows
    Réponses: 4
    Dernier message: 15/12/2011, 17h52
  3. [XL-2007] recherche fichiers dans sous-dossier
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/03/2010, 09h19
  4. recherche dans les sous dossiers
    Par y-master dans le forum VBA Outlook
    Réponses: 3
    Dernier message: 23/10/2008, 16h53
  5. recherche dossier dans repertoire + copie
    Par battit64 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/04/2008, 20h35

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