EXCEL 2003 - Afficher les noms des fichiers

Résolu
kywix -  
 kywix -
Bonjour,

Depuis un moment, je recherche sur le net, une solution pour d'une part :

Afficher/extraire tous les noms complets de fichiers xls d'un dossier dans des cellules différentes.

ex : A1 1er nom de fichier, A2 2eme nom de fichier ...

d'autre part :

A partir des ces noms extraient, aller récupérer des informations dans les fichiers ainsi nomé.
genre : =monfichier.xls!feuille1!A1 (contenu de la cellule A1 de la feuille1 du fichier monfichier.xls.
(la commande est surement fausse mais c'est pour l'exemple)

jusqu'à présent, j'ai réussis à extraire les noms en passant par un .cmd qui les intègre dans un fichier xls que je décortique par la suite.
Une vraie usine à gaz :/

J'attends vos réponses avec impatience :)
(je vous mets pas non plus le couteau sous la gorge hein ^^ sachant que s'est peut etre pas très clair)

21 réponses

  • 1
  • 2
  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    tu peu déjà commencer en affichant les noms des fichiers avec...
    Sub Recupfile()
    Dim fs, F, f1, s, sf
    Dim Ext As String, Chemin As String
    Dim i As Integer
        Ext = "xls"
        Chemin = "C:\"
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set F = fs.GetFolder(Chemin)
        Set sf = F.Files
        For Each f1 In sf
            If Right(f1.Name, 3) = Ext Then
                'Adapté les adresses cellules.
                Cells(3, i) = f1.Name
            End If
            i = i + 1
        Next
    End Sub


    Pour aller chercher tes données faut d'abord ouvrie le classeur.
        WorkBooks(Cells(x,x).text).open
        sheets("NomFeuille").Cells(x,y).copy  WorkBooks("Destination").sheets("FeuilleDestination").cells(x1,y1)


    A+
    0
  2. kywix
     
    Merci beaucoup pour la réponce.
    Je vais essayer ça rapidement.

    (j'espères pouvoir intégré ce code... c'est pas gagné car je na sais pas trop où le metre, mais je vais trouver...)

    Je vous tiens au courant.
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Dans l'IDE (éditeur VBA) ajouter un module par ex: Module1
    >> Insertion>>Module
    et tu colle la macro dans la nouvelle fenêtre
    et l'exemple que je donne ensuite est pas juste...Remplacer
        WorkBooks(Cells(x,x).text).open
        sheets("NomFeuille").Cells(x,y).copy  WorkBooks("Destination").sheets("FeuilleDesti­nation").cells(x1,y1)
    

    Par..
        WorkBooks.open (Cells(x,x).text)
       sheets("NomFeuille").Cells(x,y).copy  WorkBooks("Destination").sheets("FeuilleDesti­nation").cells(x1,y1)
    

    La macro est censée mettre tout les noms de fichiers dans des cellules, faut ajuster les adresses des cellules pour que ca corresponde à ton classeur.
    Tu dit si besoin d'explications complémentaires.
    A+
    0
  4. kywix
     
    Rha lala, je me sens tout petit quand je vois tes explications.
    Et je me sens surtout très perdu.

    Les macros, je connais que depuis très peu.

    Pour mon classeur, il est tout neuf et donc, je teste ta manipulation avant de metre en forme le classeur.
    Donc, on peut choisir n'importe quelle cellule ou feuille pour faire le test.

    J'ai bien collé le code dans la fenêtre pour créer une nouvelle macro, mais il bloque sur :
    'Adapté les adresses cellules.
    Cells(3, i) = f1.Name

    Bon, j'ai bien vu le commentaire, et j'ai bien tenté de metre :
    'Adapté les adresses cellules.
    Cells(A3, i) = f1.Name
    ou :
    'Adapté les adresses cellules.
    Cells(3, Ai) = f1.Name

    Mais rien y fait.
    Je comprends à peu près le principe de cette macro, mais je n'ai jamai fais de programmation vba.

    Pour la suite, je colle également :
    WorkBooks.open (Cells(x,x).text)
    sheets("NomFeuille").Cells(x,y).copy WorkBooks("Destination").sheets("FeuilleDesti­­nation").cells(x1,y1)

    à la suite de la première macro ?

    Un grand merci déja pour toute l'aide que tu me donne.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Oui, oublié une petite chose..
    entre les lignes..
    Set F = fs.GetFolder(Chemin)
    Set sf = F.Files
    Tu ajoute..
    <code> Set F = fs.GetFolder(Chemin)
    i = 1 'cette ligne
    Set sf = F.Files<code/>
    Ne change rien dans la cellule que j'ai mis à adapter, les donnée seront copiées dans la colonne C
    Par après, tu pourra changer le 3 par le N° de la colonne A=1 B=2 C=3 D=4 etc.. que tu veux
    0
  7. kywix
     
    Ok, ca marche.
    Je peux enfin récupérer mes fichiers :)

    Donc, si j'ai bien compris, tu n'avais pas initialisé la valeur de la variable i.
    donc i = 1

    Parcontre 3 correspond à la ligne 3 pas à la colonne C (d'après le résultat que j'ai eu sous excel biensur)
    J'ai fais le test en changeant Cells(3, i) = f1.Name par Cells(i, 3) = f1.Name
    Et là, on a bien tous les résultats dans la colonne C.

    Donc, ca marche super bien, merci encore :)

    Après, car c'est pas fini, je place et j'utilise ton second code comment ?

    WorkBooks.open (Cells(x,x).text)
    sheets("NomFeuille").Cells(x,y).copy
    WorkBooks("Destination").sheets("FeuilleDesti­­nation").cells(x1,y1)

    Je dois remplacer tout ce qu'il y a entre guillemet ?
    les x et y doivent être aussi remplacés ?

    Autant quand je vois "sub" machin, je comprends qu'il faut créer une macro, mais là, je sais pas.
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    tu dit..
    J'ai fais le test en changeant Cells(3, i) = f1.Name par Cells(i, 3) = f1.Name
    Mais j'avais mis qu'il fallait adapter, ce que tu a fait si tu voulais les données en colonne.

    Pour le reste, c'est exact tu doit créer une autre macro pour ouvrir et coller les données voulue.
    Mais est-ce que c'est obligatoire d'avoir les noms des fichiers sur un classeur, sinon, tu peu tout faire d'un coup..
    Tu dit.
    0
  9. kywix
     
    J'ai pas eu le temps de tester, mais je fais ca demain matin pour la seconde macro.

    Et effectivement, tu m'as bien dis que je pouvais adapter en fonction du besoin pour la première macro.

    En attendant, je te remerci de faire suite à mes demandes, c'est vraiment très sympa de ta part.
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    tu ne répond pas à ma question
    Mais est-ce que c'est obligatoire d'avoir les noms des fichiers sur un classeur, sinon, tu peu tout faire d'un coup..


    A+
    0
  11. kywix
     
    Oui, c'est obligatoire.

    en gros, il existe un fichier qui cré des recettes cuisines avec les prix et composants sous forme de classeur xls.

    Le but de se que je demande, c'est de créer un classeur pour faire un menu avec toutes les recettes xls d'un dossier.
    Il me faut pour cela, pouvoir :
    récupérer les noms de ces recettes dans un nouveau classeur Excel (ca c'est fait et ca marche du tonnere, merci :) )
    récupérer les coûts de la recette (ca, c'est pas encore fonctionnel de mon coté)

    Je suis toujour devant la seconde macro à la retourner dans tous les sens sans savoir quoi en faire :/

    D'un fichier excel (menu.xls) il me faut récupérer des recettes excel (tarte aux abricots.xls, paella.xls ...) ok
    dans ce fichier menu.xls il me faut récupérer des informations dans des cellules des fichiers recettes. Toujours dans les même feuilles et cellules. (feuille3 cellule B18 et D18)

    Je suis surement pas très clair, dsl.

    Donc, un dernier gros coup de pouce pour récupérer les infos des cellules des recettes.

    Merci
    0
  12. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    pour continuer.. mais j'ai pas beaucoup de renseignements pour aller polus loin.
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        'Si tu a laisser les données dans la colonne C
        If Target.Column = 3 And Target.Text <> "" Then
            'vérifier que c'est bien un nom de fichier
            If LCase(Right(Target.Text, 3)) = "xls" Then
                Workbook.Open (Target.Text)
                Sheets("Feuil3").Select
                Range("B18:D18").Select
                'Mais ici je sais pas ce que tu veux en faire ???
            End If
        End If
    End Sub

    0
  13. kywix
     
    Oui, j'ai tout laissé dans la colonne C

    Range("B18:D18").Select
    'Mais ici je sais pas ce que tu veux en faire ???
    End If

    Ici, je voudrais coller les informations copier ("B18:D18") dans le fichier menu.xls dans les cellules Di et Ei ou i correspond à la ligne de la recette traitée.
    (tarte aux abricots en C6, Prix de de la portion de la tarte aux abricots en D6 et prix de la portion de la tarte aux abricots pour enfant en E6)

    C'est peut être un peu compliqué comme procédure.

    Merci
    0
  14. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    ajoute ces lignes..
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        'Si tu a laisser les données dans la colonne C
        If Target.Column = 3 And Target.Text <> "" Then
            'vérifier que c'est bien un nom de fichier
            If LCase(Right(Target.Text, 3)) = "xls" Then
                Workbook.Open (Target.Text)
                Sheets("Feuil3").Select
                Range("B18:D18").Copy
                Sheet("Menu").Select
                Cells(Target.Row, 4).Select
                ActiveSheet.Paste
            End If
        End If
    End Sub


    Mais je pense quand même que tout faire d'une fois serait mieux mais ca dépend si tu veux tout les menus affichés en même temps, si oui tu fais ca une fois et c'est tout
    Sub Recupfile()
    Dim fs, F, f1, s, sf
    Dim Ext As String, Chemin As String
    Dim i As Integer
        Ext = "xls"
        Chemin = "C:\"
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set F = fs.GetFolder(Chemin)
        Set sf = F.Files
        i = 1
        For Each f1 In sf
            If Right(f1.Name, 3) = Ext Then
                'Adapté les adresses cellules.
                Cells(3, i) = f1.Name
                Workbooks.Open (f1.Name)
                Worksheets("Feuil3").Select
                Range("B18:D18").Copy
                Sheet("Menu").Select
                Cells(i, 4).Select
                ActiveSheet.Paste
                Workbook(f1.Name).Close
            End If
            i = i + 1
        Next
    End Sub

    A+
    0
  15. kywix
     
    Merci pour tout lermite222.

    Tu m'as vraiment aider et plus que ca.

    Je teste le code dès demain matin.
    je me demande encore comment on peut aider une personne comme moi qui n'y connais pas grand chose dans le domaine.
    Moi, ca m'espente ^^

    Le language VBA me plait de plus en plus et grace à toi, j'ai pu comprendre le principe de base de cette programmation sans pour autant, pour l'instant, pouvoir développer directement.

    Je te remerci encore d'avoir partagé tes connaissances.

    A +
    0
  16. kywix
     
    Coucou encore moi et oui :/

    J'ai adapté la dernière macro en fonction des mes besoins.

    Sub Recupfile()
    Dim fs, F, f1, s, sf
    Dim Ext As String, Chemin As String
    Dim i As Integer
    Ext = "xls"
    Chemin = "E:\vierge"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set F = fs.GetFolder(Chemin)
    Set sf = F.Files
    i = 1
    For Each f1 In sf
    If Right(f1.Name, 3) = Ext Then
    'Adapté les adresses cellules.
    Cells(i, 3) = f1.Name
    Workbooks.Open (f1.Name)
    Worksheets("Feuil1").Select
    Range("E3:E6").Copy
    Sheet("menu").Select
    Cells(i, 4).Select
    ActiveSheet.Paste
    Workbook(f1.Name).Close
    End If
    i = i + 1
    Next
    End Sub

    Malgret tout, il boque quelque part dans le secteur suivant entre :

    Workbooks.Open (f1.Name)

    et

    Workbook(f1.Name).Close

    lorsque je lance la macro, il me renvoi sous VBA et surligne Sheet de la ligne Sheet("menu").Select
    Il me dit erreur de compilation : sub ou fonction non définie.

    le classeur menu à une feuille appelé menu aussi. il fait référence à d'autres classeurs cette fois ci adapté à la feuil1.
    0
  17. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    faut un S à Sheets
    Comme j'avais pas tes classeurs j'ai pas pu tester.
    0
  18. kywix
     
    Marche toujours pas :/

    J'ai mis les 3 fichiers sur un ftp perso.

    http://rageofmages2.free.fr/excel

    En espérant que tu pourra trouver le pb.

    Merci
    0
  19. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Pour automatiser comme tu veux il faut que tes données soient toujours sur la même ligne, or il y a des différences entre les feuilles..
    Tarte aux fruits >> Poid brut à la ligne 21
    Tarte abricot >> Poid brut à la ligne 18

    Je me demande bien dans quel recette il y aurra 800 matières différentes ?

    Beaucoups de données mise en doubles ! mais ca n'empêche pas de fonctionner.
    Tu n'a pas fait un plan de ton appli avant de commencé, ce qui t'aurais permis d'optimiser.

    J'ai rectifié certaine erreurs alors il serrait préférable que tu reprenne les 3 classeurs.
    https://www.cjoint.com/?hznjoenMgt
    Tu dit...
    0
  20. kywix
     
    Je viens de tester tes modifications et il me revoit une erreur d'exécution 1004 : tarte aux abricots.xls introuvable, vérifier.....

    lorsque je mets déboguage, il me revoit sous VBA et me surligne Workbooks.Open (f1.Name)

    Je commence à me demander si mon installation de excel 2003 n'est pas foireuse :/

    Effectivement, il n'y aurra pas 800 matières dans une recette. J'ai repris le travail d'une autre personne.
    Et oui, il faudra bien que je refasse le cahier des charges des recettes. Elles sont bien trop lourds à mon goût.
    Je suis tout à fait d'accord avec toi sur ces points.

    Merci encore.
    0
  21. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Ca n'a rien à voir avec excel, il faut adapter à tes répertoirs,
    Tes recettes sont bien dans le réperetoir "E:\recettes" ?
    Regarde bien toutes les lettres !.
    Si oui..
    Ajouter slach inverse à cette ligne...
       Chemin = "E:\recettes\"

    Changer la ligne qui Bugue par..
    Workbooks.Open (Chemin & f1.Name)

    J'avais tout tester dans le même répertoir..
    Tu dit
    A+
    0
  • 1
  • 2