EXCEL 2003 - Afficher les noms des fichiers

Résolu/Fermé
kywix - 18 juil. 2008 à 16:51
 kywix - 30 juil. 2008 à 14:37
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

lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
19 juil. 2008 à 07:28
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
21 juil. 2008 à 10:38
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
21 juil. 2008 à 11:23
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
21 juil. 2008 à 13:58
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
22 juil. 2008 à 07:23
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
22 juil. 2008 à 12:15
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
22 juil. 2008 à 17:33
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
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
23 juil. 2008 à 10:44
faut un S à Sheets
Comme j'avais pas tes classeurs j'ai pas pu tester.
0
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
25 juil. 2008 à 13:13
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
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
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 194
26 juil. 2008 à 08:37
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