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 :

Exporter les noms de fichiers sur Excel par macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut Exporter les noms de fichiers sur Excel par macro
    Bonjour à tous les lecteurs : Dans un dossier nommé par ex : X qui possède des sous dossiers Y , Z etc. et des fichiers nommés par ex de A à Z je voudrais lister l’ensemble du dossier X dans un feuille Excel.
    De plus il me faut lister non seulement les Noms mais également les entêtes de colonnes du type (Modifié le : Type : Taille du fichier : Mots clés : Catégorie : Titre : Commentaires) voir copie d’écran.
    J’ai bien trouvé une macro mais celle-ci ne liste pas la totalité de ce que je recherche car elle à besoin d’être complétée.
    Est-ce possible d’extraire les noms des entêtes ?
    Par avance merci pour votre aide.


    Code vb : 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
     
    Sub Recup()
     
    Dim Tbl() As String
    Dim I As Integer
    Dim Chemin As String
    Chemin = Dossier
    Tbl = EnumFichiers(Chemin)
    'en colonne "A" et "B" de la feuille active si pas vide
    If Not (Not Tbl) Then
    For I = 1 To UBound(Tbl)
    Cells(I, 1) = Left(Tbl(I), InStrRev(Tbl(I), ".") - 1)                   'colonne nom
    Cells(I, 2) = Right(Tbl(I), Len(Tbl(I)) - InStrRev(Tbl(I), "."))   'extension de fichier
    'Partie supposée à compléter pour les colonnes C D E F G H I  ' voir copie d'écran
    Next I
    End If
    End Sub
     
    Function EnumFichiers(Chemin As String) As String()
     
    Dim TableauFichiers() As String
    Dim Fichier As String
    Dim I As Integer
    'complète le chemin le cas échéant
    If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
    'récupère les fichiers
    Fichier = Dir(Chemin)
    'boucle sur les fichiers du dossier
    Do While (Len(Fichier) > 0)
    I = I + 1
    ReDim Preserve TableauFichiers(1 To I)
    TableauFichiers(I) = Fichier
    Fichier = Dir()
    Loop
    'retourne le tableau des noms de fichiers
    EnumFichiers = TableauFichiers()
     
    End Function
     
    Function Dossier() As Variant
    '1 ouvrir un fichier
    '2 enregistrement de fichier
    '3 sélection de fichier
    '4 sélection de dossier
    With Application.FileDialog(4)
    .Show
    On Error Resume Next 'si annuler
    Dossier = .SelectedItems(1)
    If Err.Number <> 0 Then Dossier = False
    End With
    End Function

    Pièce jointe 542774

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Ce tuto pourra certainement te permettre d'arriver à tes fins

    https://excel.developpez.com/sources...scenceDossiers

  3. #3
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut
    Bonjour mfoxy : Merci de pencher sur mon problème Ok pour le code mais celui ci ne me liste uniquement les sous dossiers contenus dans le dossier racine et pas les fichier contenus dans le dossier racine. de plus il me faut les information contenus dans les entêtes de colonnes.

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Re,

    Je ne pensais pas que tu avais besoin d'un clef sur porte

    Tu trouveras sur le net des sites qui te proposent une solution clé en mains...
    Bonne lecture

  5. #5
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut
    Merci pour ton implication : J'ai trouvé des infos en rapport avec ton dernier message.

    Tout fonctionne jusqu'à la ligne 6)

    Comment adapter les dernières ligne car l'anglais ce n'est pas mon point fort.
    Les mots pour
    Keyword Mots Clés en Français ne sont certainement pas conformes
    Category Catégorie
    Title Titre
    Comments Commentaires

    Code vb : 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
     
    Sub ListeFichiers()
      racine = "D:\Bonbache Excel Exercices\"
      Range("a2:F10000").ClearContents
      Set fs = CreateObject("Scripting.FileSystemObject")
      Set Dossier = fs.GetFolder(racine) 'DossierRacine
      ligne = 2
      For Each f In Dossier.Files
        Cells(ligne, 1) = f.Name                'Nom du fichier
        Cells(ligne, 2) = f.Size                'taille du fichier
        Cells(ligne, 3) = f.datecreated         'date de création du fichier
        Cells(ligne, 4) = f.DatelastModified    'date de modification du fichier
        Cells(ligne, 5) = f.Datelastaccessed    'date du dernier accés
        Cells(ligne, 6) = f.Type                'Type
        'Cells(ligne, 7) = f.Keyword             'Mots clés
        'Cells(ligne, 8) = f.Category            'Catégorie
        'Cells(ligne, 9) = f.Title               'Titre
        'Cells(ligne, 10) = f.Comments           'Commentaires
     
     
        If f.Attributes And vbHidden Then Cells(ligne, 6) = "Caché"
        ligne = ligne + 1
      Next
    End Sub

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    C'est le problème des solutions toutes faites (et non expliquées) que tu trouveras à foison sur le net... Tu devras les adapter à ton cas. Et comme elles sont rarement expliquées et encore plus rarement (voire jamais) bien pensées, rendues génériques, écrites selon les règles et les bonnes pratiques, tu peux t'apprêter à suer un peu) ==>> No Pain, no gain (comme on dit) . Tu peux essayer de rentrer en contact avec le gars qui a fait le site sur lequel tu as trouvé ta "solution"... Ici en tout cas, il n'a pas l'habitude de répondre, préférant souvent plaquer ses solutions obsolètes et mal fagotées ^^

    Le problème avec ces "solutions" pondues par des personnes infoutues de respecter les règles de la bonne programmation, c'est que tu dois les adapter. Or, comme elles sont mal écrites, non documentées et qu'elles ne respectent pas les règles, tu vas juste t'amuser à essayer de comprendre d'abord, d'adapter ensuite, un code merdique. C'est ton choix d'essayer d'aller chercher du tout cuit, mais il faudrait au moins que le tout cuit soit de qualité. C'est rarement le cas, hélas. Tu es allé chercher ta bouffe au McDo => mange la merde du macdo... Ou apprends à cuisiner (sur nos forums notamment) et tu vas te régaler

    Par exemple, dans la solution que tu as trouvée, on peut relever qu'il n'y a pas de déclaration de variables et que dès lors, forcément, elles ne sont pas typées. On relève également que tu travailles en "late binding" sur des objets (variables non typées obligent) et donc que tu n'as pas l'aide à la saisie du code, pas plus que l'exploration des objets avec F2. Tu ne travailles pas avec un tableau structuré (pourquoi A2:F10000, personne ne le sait, ça pourrait tout aussi bien être F500, F45854 ou F586521 et si ça tombe, tu pourrais te limiter à beaucoup moins de lignes, mais bon, le type qui a pondu cette merde sur son site n'est pas une approximation près...), ...


    Ici, tu aurais intérêt à déclarer et typer tes variables, et pour cela à référencer la bibliothèque Microsoft Scripting Runtime (Outils\Références). Tu auras alors à ta disposition l'autocomplétion qui te permettra de voir quelles sont les propriétés des variables que tu utilises. Et bien sûr, à travailler avec des tableaux structurés, que ce soit en Excel ou en VBA (on n'est plus au Moyen-Âge, quand même )...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
      Dim fs As Scripting.FileSystemObject
     
    End Sub
    Nom : 2020-03-05_133615.png
Affichages : 1759
Taille : 5,6 Ko


    Autre solution: tu mouilles ta chemise, tu testes et tu reviens ici pour des problèmes ponctuels que tu rencontres dans la mise en place de ta solution. Bon courage



    PS: A prendre au second degré et sans que tu sois, toi, visé par mes remarques
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut
    Bonjour : Mr Fauconnier: Merci de votre implication. N'étant absolument pas anglophone et n'ayant pas non les notions de programmeur comme vous, Oui vous avez raison je me suis tourné vers des solutions toutes faites. Je connais pourtant votre site et n'y avais pas pensé. mfoxy m'a aiguillé sur ce lien :

    https://excel.developpez.com/sources...scenceDossiers

    Lister les fichiers d'un répertoire par ordre décroissant de date de création .

    Ceci fonctionne car je n'avais pas activé la référence "Microsoft Scripting RunTime"

    Comment faire pour que le tableau commence à la 3 ème ligne ?

    Ce que je veux récupérer.

    Il s’agit du Nom : Modifié le : Type : Taille (facultatif) : Date de création : Date de modification : Date du dernier accès : Mots Clés : Catégorie : Titre : Commentaire.

    Autre demande : Comment faire pour avoir le choix du répertoire à extraire ?

    J'ai testé ceci sur votre site : mais le choix se fait sur la racine du dossier choisi.
    Choix d’un répertoire:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Dossier()
       With Application.FileDialog(msoFileDialogFolderPicker)
          .InitialFileName = ActiveWorkbook.Path & "\"
          .Show
          If .SelectedItems.Count > 0 Then
            choixDossier = .SelectedItems(1)
          Else
            choixDossier = ""
          End If
        End With
        MsgBox choixDossier
    End Sub

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu aurais intérêt à travailler avec des tableaux structurés. De ce fait, tu n'aurais pas à te préoccuper de l'emplacement du tableau (D'une façon générale, travaille avec des tableaux structurés dès que tu as des données à stocker et qu'elles peuvent se visualiser sous forme de fiches: 1 fiche = 1 ligne. Voir mon tuto à ce sujet).

    Tu auras besoin de référencer la bibliothèque Microsoft Scripting Runtime.

    Voici une procédure récursive (qui s'appelle elle-même) qui va scruter un dossier et tous ses sous-dossiers. Elle reçoit le chemin du sous-dossier et un objet de type FileSystemObject qui va être utilisé pour parcourir l'arborescence.

    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
    Sub getFiles(Root As String, fso As Scripting.FileSystemObject)
      Dim myFolder  As Folder
      Dim subFolder As Folder
      Dim myFile As File
      Dim Target As Range
     
      Set myFolder = fso.GetFolder(Root)
      For Each myFile In myFolder.Files
        Set Target = Range("Tableau1").ListObject.ListRows.Add().Range
        Target(1).Value = myFolder.Path
        With myFile
          Target(2).Value = .Name
          Target(3).Value = .Type
          Target(4).Value = .Size
          Target(5).Value = .DateCreated
          Target(6).Value = .DateLastModified
        End With
      Next
      For Each subFolder In myFolder.SubFolders
        getFiles subFolder.Path, fso
      Next
    End Sub
    Le premier bloc sert à définir les variables dont tu as besoin: une pour le dossier, une pour le sous-dossier, une pour le fichier qui est récupéré, et une pour la plage du tableau structuré dans laquelle tu vas stocker les infos.

    Set myFolder = fso.GetFolder(Root) récupère un objet Folder issu de la bibliothèque. Cet objet expose des propriétés et méthodes, et notamment deux collections qui nous intéressent, celle des sous-dossiers et celle des fichiers.

    For Each myFile In myFolder.Files initialise la boucle qui va parcourir les fichiers de la racine du dossier (le dossier lui-même, sans ses sous-dossiers)
    Pour chaque fichier trouvé, on va créer une nouvelle ligne dans le tableau structuré puis lui passer les propriétés du fichier que l'on veut récupérer.

    Après avoir parcouru les fichiers, on va parcourir les sous-dossiers, et pour chaque sous-dossier, la procédure va s'appeler elle-même avec la ligne getFiles subFolder.Path, fso en passant le nom du sous-dossier et l'objet FSO qui va permettre de les manipuler...

    Il faut une procédure d'amorçage qui va vider le tableau de résultat (If Not Range("tableau1").ListObject.DataBodyRange Is Nothing Then Range("tableau1").ListObject.DataBodyRange.Delete) puis appeler la procédure (getFiles Range("b1").Value, fso) avec le nom du dossier de tête de l'arborescence que tu veux parcourir. Pour te permettre de modifier ce dossier sans modifier ton code, j'ai mis le nom du dossier initial dans la cellule B1. Cette procédure t'est donnée ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test()
      Dim fso As New Scripting.FileSystemObject
     
      If Not Range("tableau1").ListObject.DataBodyRange Is Nothing Then Range("tableau1").ListObject.DataBodyRange.Delete
      getFiles Range("b1").Value, fso
    End Sub
    J'espère que ces explications et exemples te permettront d'avancer.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/01/2018, 13h07
  2. VBA et Organisation de nom de fichier sur Excel
    Par llorn dans le forum Général VBA
    Réponses: 0
    Dernier message: 14/04/2016, 18h13
  3. [Débutant] Ecrire des noms de fichiers sur Excel
    Par Tom dB dans le forum MATLAB
    Réponses: 22
    Dernier message: 28/05/2013, 17h22
  4. Les accents sur les noms des fichiers passent mal
    Par fab53 dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2008, 15h05
  5. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55

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