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 :

Comment lister le contenu d'un répertoire puis enregistrer les noms des fichiers.pdf dans un fichier texte [XL-2016]


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Chercheur

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Comment lister le contenu d'un répertoire puis enregistrer les noms des fichiers.pdf dans un fichier texte
    Bonjour,
    Je suis un débutant dans la programmation de macro dans Excel et après avoir consulté de nombreux forum je ne parvient pas à résoudre mon problème:

    1) je souhaite extraire les noms des fichiers .pdf présentes dans un répertoire.
    2) Je voudrais que la macro crée un nouveau fichier texte et y range tous les noms des fichiers .pdf (un par un, ligne par ligne)
    3) Donc il n'y aurais pas besoin de passer par un tableau mais ce travail doit être fait par une macro Excel.

    Y-a-t-il une personne qui pourrais m'aider en me fournissant le code ?
    Je la remercie chaleureusement par avance !

    Loranger2013

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 430
    Points
    12 430
    Par défaut
    Bonjour
    Y-a-t-il une personne qui pourrais m'aider en me fournissant le code ?
    Ce n'est pas le "genre de la maison".
    Te guider pour que tu puisses t'y mettre, oui --->>
    réponse au 1) : utilisation de la fonction Dir de VBA
    réponse au 2) : utilisation des instructions Open et Print de VBA (rubriques Open, instruction et Print, instruction de l'aide VBA)
    Toutes ces rubriques sont accompagnées d'exemples clairs et simples.

  3. #3
    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
    1) je souhaite extraire les noms des fichiers .pdf présentes dans un répertoire.
    Utilise la fonction Dir avec une boucle While.
    https://msdn.microsoft.com/fr-fr/lib.../gg278779.aspx
    https://msdn.microsoft.com/fr-fr/lib.../gg264682.aspx

    2) Je voudrais que la macro crée un nouveau fichier texte et y range tous les noms des fichiers .pdf (un par un, ligne par ligne)
    3) Donc il n'y aurais pas besoin de passer par un tableau mais ce travail doit être fait par une macro Excel.
    La solution la plus évidente serait d'ouvrir un fichier séquentiel et de le renseigner au fil de la boucle qui scrute les noms de fichiers.
    https://msdn.microsoft.com/fr-fr/lib.../gg264163.aspx
    https://msdn.microsoft.com/fr-fr/lib.../gg264278.aspx

    Mais pour un débutant, il me semble plus simple de mettre les noms dans des cellules d'une feuille Excel classique et de sauvegarder ensuite au format texte avec un SaveAs avec comme type de fichier xlTextWindows.
    https://msdn.microsoft.com/fr-fr/lib.../ff195820.aspx
    https://msdn.microsoft.com/fr-fr/lib.../ff198017.aspx

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Chercheur

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci Unparia pour tes conseils.

    Je vais tenter d'écrire le code avec les fonctions que tu m'a indiqués.

    A bientôt.

    Loranger2013

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Chercheur

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour unparia et menhir,

    dans le répertoire de test source il y-a, entre autres (c'est les fichiers.pdf qui nous intéresse):
    milieu_file1.pdf
    milieu_file2.pdf
    milieu_file3.pdf
    milieu_file4.pdf
    milieu_file5.pdf

    Et le code pour extraire les noms est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Import_source()
    Dim Fichier As String, Chemin As String, Fichier_final As string
    Chemin = "C:\Documents and Settings\dossier"
    Fichier = Dir(Chemin & "\*.pdf")
    open Fichier_final For output
    do
     
    "La je sèche pour le moment"
    Je n'arrive pas à articuler ce qui sort du répertoire source et ce qui entre dans le fichier final quelqu'un pourrait-il me donner un petit coup de pouce ?

  6. #6
    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 loranger2013 Voir le message
    Je n'arrive pas à articuler ce qui sort du répertoire source et ce qui entre dans le fichier final quelqu'un pourrait-il me donner un petit coup de pouce ?
    Peut-être pourrais-tu commencer par prendre en compte les "coups de pouce" qui t'ont déjà été donnés et lire les liens que je t'ai transmis.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Chercheur

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai lu les liens que tu m'a indiqués mais mes capacités de compréhension pour ce langage, nouveau pour moi, sont limitées.

    Ceci dit j'ai fini par écrire quelque chose mais cela ne marche pas (J'obtiens un message d'erreur d'exécution 76, chemin d'accès introuvable)
    au déboguage la ligne "Open Fichier_final For Output As #1" est surlignée en jaune.

    J'ai vérifié la hiérarchie des dossiers et fichiers et tout semble cohérent. Bref je suis perdu!


    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub liste_milieu()
    Dim Fichier As String, Chemin As String
    Fichier_final = "Z:\lgaillon\Programmation\Excel\tmp_fichiers\Fichier_final.txt"
     
    Chemin = "Z:\lgaillon\Programmation\Excel\tmp_fichiers\"
    Fichier = Dir(Chemin & "\*.pdf")
    'ouvrir le fichier final pour écriture
    Open Fichier_final For Output As #1
    Do
    Write #1, Fichier
    Loop
    Close #1
    End Sub
    Si quelqu'un à des conseils à me donner, je suis preneur

    Merci d'avance.

  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 loranger2013 Voir le message
    J'ai lu les liens que tu m'a indiqués
    Ce que je t'ai indiqué, c'est de mettre une fonction Dir dans une boucle While, de renseigner avec le résultat des cellules d'une feuille de calcul et de sauvegarder avec un SaveAs de type xlTextWindows.
    Je ne vois rien de tout ça (excepté la fonction Dir) dans ton code.

    Le Dir("chemin") ne renvoie qu'un seul nom de fichier (le premier de la liste).
    Pour obtenir les autres, il faut utiliser la fonction Dir() sans argument dans une boucle.
    C'est textuellement écrit dans l'un des liens que je t'ai donné.

    Autre chose que tu devrais lire : http://club.developpez.com/regles/#LIV-N

    mes capacités de compréhension pour ce langage, nouveau pour moi, sont limitées.
    Alors prends le temps d'améliorer tes capacités.
    http://bidou.developpez.com/article/VBA/

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Chercheur

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour menhir,

    Après avoir lu les liens que tu m'a indiqués, et aussi mes livres, j'ai fini par écrire un code qui marche. Certes il pourrais sans doute être mieux écrit mais je suis un débutant.

    voici le code:
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    Sub Extraire_noms_fichiers_milieux_pdf()
     
        Dim Chemin As String, Fichier As Variant
        Dim Ligne As Long, filename1 As String, filename2 As String, filename3 As String, html_milieu As String
        Dim filename5 As String, filename6 As String, filename7 As String, html_solution As String
        Dim fin_liste_milieux As Long, debut_liste_solutions, fin_liste_solutions As Long
        Dim i As Long, derlig As Long, tabl
     
        Ligne = 1
        Chemin = "Z:\Programmation\Excel\tmp_fichiers\"
        If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
     
        'Extraire nom de fichiers Milieux
        Fichier = Dir(Chemin & "milieu*.pdf", vbArchive)
        'Ecriture "en-tete" du fichier html dans tableau
        Sheets("Milieux_Solutions_html").Activate
        ActiveSheet.Range("A" & Ligne) = "<html><head><title>Milieux</title><body>"
        Ligne = Ligne + 1
        'Ecriture "en-tete" suite de la partie "Milieux" dans tableau
        ActiveSheet.Range("A" & Ligne) = "<p><center><b>Milieux</b></center><br/><br/>"
        Do While Fichier <> ""
            Ligne = Ligne + 1
            filename1 = Fichier
        filename2 = Replace(filename1, "milieu_", "")
        filename3 = Replace(filename2, ".pdf", "")
        html_milieu = "<center><a href=" + Chr(34) + filename1 + Chr(34) + ">" + filename3 + "</a></center>"
            'Ecriture html dans tableau
            ActiveSheet.Range("A" & Ligne) = html_milieu
     
            Fichier = Dir
        Loop
        fin_liste_milieux = Ligne
        'Ecriture "fin" de la partie milieu dans tableau
        Ligne = Ligne + 1
        ActiveSheet.Range("A" & Ligne) = "</p>"
     
    'End Sub
    'extraire_noms_fichiers_solutions()
        Ligne = Ligne + 1
     
        Chemin = "Z:\Programmation\Excel\tmp_fichiers\"
        If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
     
        Fichier = Dir(Chemin & "solution*.pdf", vbArchive)
        'Ecriture "en-tete" du fichier html dans tableau
        ActiveSheet.Range("A" & Ligne) = "<br/><p><center><b>Solutions</b></center><br/><br/>"
     
        Do While Fichier <> ""
            Ligne = Ligne + 1
            filename5 = Fichier
    filename6 = Replace(filename5, "solution_", "")
    filename7 = Replace(filename6, ".pdf", "")
    html_solution = "<center><a href=" + Chr(34) + filename5 + Chr(34) + ">" + filename7 + "</a></center>"
            'Ecrire html dans tableau
            ActiveSheet.Range("A" & Ligne) = html_solution
     
            Fichier = Dir
        Loop
        fin_liste_solutions = Ligne
        Ligne = Ligne + 1
        ActiveSheet.Range("A" & Ligne) = "</p>"
        Ligne = Ligne + 1
        ActiveSheet.Range("A" & Ligne) = "</body></html>"
        'MsgBox ("milieu" & fin_liste_milieux & "solutions" & fin_liste_solutions)
     
        'Trier les lignes milieu
        debut_liste_milieux = 3
     
        Range(Cells(3, 1), Cells(fin_liste_milieux, 1)).Select
        ActiveWorkbook.Worksheets("Milieux_Solutions_html").Sort.SortFields.Clear
        'Key:=Range("A" & JOURS.Cells(1) & ":A" & JOURS.Cells.Count)
        ActiveWorkbook.Worksheets("Milieux_Solutions_html").Sort.SortFields.Add Key:=Range("A" & debut_liste_milieux), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Milieux_Solutions_html").Sort
            .SetRange Range(Cells(3, 1), Cells(fin_liste_milieux, 1))
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
     
        'Trier les lignes solutions
        debut_liste_solutions = (fin_liste_milieux + 3)
     
        Range(Cells(debut_liste_solutions, 1), Cells(fin_liste_solutions, 1)).Select
        ActiveWorkbook.Worksheets("Milieux_Solutions_html").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Milieux_Solutions_html").Sort.SortFields.Add Key:=Range("A" & debut_liste_solutions), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Milieux_Solutions_html").Sort
            .SetRange Range(Cells(debut_liste_solutions, 1), Cells(fin_liste_solutions, 1))
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        ' Ecrire dans un fichier html
        derlig = Range("A" & Rows.Count).End(xlUp).Row
        tabl = Range("A1:A" & derlig)
        Open "Z:\Programmation\Excel\tmp_fichiers\milieux.html" For Output As #1
        For i = 1 To UBound(tabl, 1)
        If tabl(i, 1) <> "" Then
        Print #1, tabl(i, 1)
        End If
        Next
        Close #1
     
    End Sub
    Merci et à bientôt, peut être.

  10. #10
    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
    Je n'ai pas lu tout ton code mais la fin m'a interpelé.
    Comme je te l'ai dit à la fin de mon premier message, il y a beaucoup plus simple pour enregistrer en fichier texte.

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        ' Ecrire dans un fichier html
        derlig = Range("A" & Rows.Count).End(xlUp).Row
        tabl = Range("A1:A" & derlig)
        Open "Z:\Programmation\Excel\tmp_fichiers\milieux.html" For Output As #1
        For i = 1 To UBound(tabl, 1)
        If tabl(i, 1) <> "" Then
        Print #1, tabl(i, 1)
        End If
        Next
        Close #1
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ' Ecrire dans un fichier html
        ActiveSheet.SaveAs FileName:="Z:\Programmation\Excel\tmp_fichiers\milieux.html" , FileFormat:=xlTextWindows
    Plus simple, non ?

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Chercheur

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci Menhir.
    En effet c'est nettement plus simple!

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

Discussions similaires

  1. [FPDF] comment sauvegarder les champs d'un formulaire dans un fichier PDF
    Par yacineing dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/02/2012, 12h37
  2. Réponses: 3
    Dernier message: 19/01/2010, 09h53
  3. Réponses: 2
    Dernier message: 06/04/2007, 11h48
  4. Réponses: 5
    Dernier message: 30/08/2006, 18h23

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