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 :

Récupérer le nom et le chemin des fichiers d'un dossier


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut Récupérer le nom et le chemin des fichiers d'un dossier
    Bonjour,

    Je voudrai récupérer le nom et le chemin d'accès des fichiers d'un répertoire sous excel.

    J'ai trouvé dans la faq plusieurs doc mais ca ne marche pas.

    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
     
    Sub BoucleFichiers()
        Dim Chemin As String, Fichier As String
     
        'Définit le répertoire contenant les fichiers
        Chemin = "C:\dossier\"
     
        'Boucle sur tous les fichiers xls du répertoire.
        'Fichier = Dir(Chemin & "*.xls")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        Fichier = Dir(Chemin & "*.*")
     
        Do While Len(Fichier) > 0
            Msgbox(Chemin & Fichier)
            Fichier = Dir()
        Loop
    End Sub
    j'ai essayé mais ca ne marche pas.
    Je suis sous excel 2007.

    Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Ton code fonction très bien
    Tu es sur que le chemin existe ? si oui, t'as quoi comme message d'erreur ??

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    Dsl c'est moi qui suis trop con j'avais oublié "\" à la fin de mon chemin d'accès.
    je viens de le voir à l'instant.

    Mais une autre question d'ordre liéé aux droits.
    Puis-je exécuter le code pour les fichier du serveur de mon boulot (ou j'ai accès bien entendu) mais dont je ne sais quels droits j'ai?

    Par contre j'ai un message d'erreur lorsque j'ai un autre dossier dans le premier dossier de mon chemin d'accès.

    Comment puis-je faire pour que mon programme lorsqu'il rencontre un autre dossier vérifie tous les fichiers à l'intérieur de celui-ci? Et ainsi de suite.

    Merci

  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, pour une recherche récursive utiliser FSO.

    Soit qqch comme ceci :
    • copier le code ci-dessous dans un module standard
    • affecter un bouton à Tst

    ShFichiers est le CodeName attribué à la feuille recevant les données
    voir http://www.developpez.net/forums/d92...cel/vba-bases/

    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
    Option Explicit
     
    Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
    Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
     
    Dim NbFichiers As Long, NbDossiers As Long
    Dim Dep As Currency, Fin As Currency, Freq As Currency
     
    Private Sub Liste(ByVal sChemin As String, ByVal bSousDossier As Boolean)
    Dim FSO As Object, Dossier As Object, SousDossier As Object, Fichier As String
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set Dossier = FSO.GetFolder(sChemin)
     
        Fichier = Dir$(sChemin & "\*.*")
        Do While Len(Fichier) > 0
            NbFichiers = NbFichiers + 1
            With ShFichiers
                .Cells(NbFichiers, 1) = sChemin
                .Cells(NbFichiers, 2) = Fichier
            End With
            Fichier = Dir$()
            Application.StatusBar = "Dossiers : " & NbDossiers & "  Fichiers : " & NbFichiers
        Loop
     
        If bSousDossier Then
            For Each Dossier In Dossier.SubFolders
                NbDossiers = NbDossiers + 1
                Liste Dossier.Path, True
            Next Dossier
        End If
     
        Set Dossier = Nothing
        Set FSO = Nothing
    End Sub
     
    Sub Tst()
    Dim sChemin As String
        sChemin = ThisWorkbook.Path
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = sChemin & "\"
            .Title = "Sélectionner un Dossier"
            .AllowMultiSelect = False
            .InitialView = msoFileDialogViewDetails
            .ButtonName = "Sélection Dossier"
            .Show
            If .SelectedItems.Count > 0 Then
                ShFichiers.Cells.Clear
                Application.ScreenUpdating = False
                Application.StatusBar = ""
                DoEvents
                QueryPerformanceCounter Dep
                NbFichiers = 0: NbDossiers = 0
     
                Liste .SelectedItems(1), True
     
                Application.ScreenUpdating = True
                QueryPerformanceCounter Fin: QueryPerformanceFrequency Freq
                Application.StatusBar = "Dossiers : " & NbDossiers & "  Fichiers : " & NbFichiers & " / " & Format(((Fin - Dep) / Freq), "0.00 s")
            End If
        End With
    End Sub

  5. #5
    Candidat au Club
    Femme Profil pro
    utilisateur
    Inscrit en
    Août 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut demande d'aide : comment adapter la macro de rob1son76 à mon besoin ?
    Bonjour !
    Auteur-photographe je ne trouve pas de logiciels répondant à mon besoin de gestion de factures et de certificats d’authenticité avec les mentions réglementaires – image de la photo, nom de la photo (= nom du fichier), n° certificat, etc..
    J’essaie donc de créer un outil EXCEL pour lequel je ne maitrise pas le langage VBA.

    Je cherche donc sur les sites compétents des ressources qui répondent à mon besoin.

    J’ai besoin d’afficher dans la colonne « D » d’une feuille EXCEL « liste_fichier_photo » le chemin complet dynamique des fichiers « .jpg » contenu dans le dossier « gestion_vente_photo ». Le classeur EXCEL "gestion_facture_certificat.xlsm" est dans le répertoire GESTION_VENTE_PHOTO placé directement à la racine « Z » de la TeraStation, mais je souhaite , si c'est possible, pouvoir transporter ce dossier sur un PC portable par la suite qui aura la racine « C » ou sur un disque dur externe dont la racine sera autre : « G » par exemple.

    La macro mentionnée par rob1son76 semble en partie convenir pour générer le chemin Z:\GESTION_VENTE_PHOTO + le nom du fichier.jpg

    Je l’ai utilisée, mais je ne sais pas écrire le code complémentaire qui permettrait d’afficher dans les cellules de la colonne « D » de la feuille « liste_fichier_photo » du Classeur EXCEL "gestion_facture_certificat.xlsm" placé dans le dossier « gestion_vente_photo ».

    Que dois-je corriger et ajouter pour adapter la macro de rob1son76

    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
    Sub BoucleFichiers()
        Dim Chemin As String, Fichier As String
     
        'Définit le répertoire contenant les fichiers
        Chemin = "Z:\GESTION_VENTE_PHOTO\"
     
        'Boucle sur tous les fichiers xls du répertoire.
        'Fichier = Dir(Chemin & "*.*")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fi-chiers:
        Fichier = Dir(Chemin & "*.*")
     c = 4
        Do While Len(Fichier) > 0
            MsgBox (Chemin & Fichier)
            Fichier = Dir()
        Loop
    End Sub
    Pour que s’affiche « Z:\GESTION_VENTE_PHOTO\nom_fichier.jpg contenu dans le répertoire GESTION_VENTE_PHOTO ?
    Je vous remercie par avance, avec mon plus grand respect.

  6. #6
    Candidat au Club
    Femme Profil pro
    utilisateur
    Inscrit en
    Août 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    le 06/09/2020
    Désolé, je ne retrouve plus le message de la personne bien intentionnée qui souhaitait que je transmette mon fichier.
    je joins le fichier tout de même.
    Procédure : créer un dossier dans lequel copier le contenu du ZIP.
    idée : à partir de la feuille "liste_fichier_photo" je voudrais copier la liste des fichiers de la colonne (C) dans la colonne (A) de la feuille "liste_fichier_maxi" en conservant les lignes de la liste existante et la valeur de chaque cellule de la colonne (B) attribuée en face de chaque cellule de la colonne (A) appartenant à la même ligne.
    Si c'est trop compliqué à réaliser, je choisirai de faire la saisie manuelle du contenu de la feuille "liste_fichier_maxi" (cette méthode fonctionne pour l'instant)
    Grand Merci à vous.
    NB : Ne perdez pas de temps si cela vous semble trop complexe. J'aurai préféré réaliser cet outil avec OpenOffice Base, mais je n'ai pas les connaissances suffisantes pour le développer et le sécuriser.

  7. #7
    Candidat au Club
    Femme Profil pro
    utilisateur
    Inscrit en
    Août 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2020
    Messages : 3
    Points : 4
    Points
    4
    Par défaut suite message du 06/09/20
    Bonjour !
    Hier le fichier n'a pas été pris en compte.
    Je le renvoie.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Récupérer le chemin des fichier d'un fileset
    Par pathfinder06 dans le forum ANT
    Réponses: 0
    Dernier message: 01/12/2010, 16h57
  2. [VBA]Gestion des photos : modifier le chemin des fichiers
    Par alainGL dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/04/2007, 15h56
  3. Réponses: 2
    Dernier message: 27/10/2006, 16h11
  4. [VB]récupérer le nom du créateur d'un fichier Excel
    Par JulienCEA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/03/2006, 10h21
  5. Réponses: 6
    Dernier message: 08/03/2006, 14h58

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