Créer une macro vba pour récupérer tous les fichiers d'un dossier sans connaitre

cs_chloe10 Messages postés 3 Date d'inscription jeudi 21 juin 2012 Statut Membre Dernière intervention 26 juin 2012 - 22 juin 2012 à 08:18
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 27 juin 2012 à 17:11
Bonjour à tous,

J'espère que vous allez bien.
J'utilise VBA pour la première fois et je n'arrive pas à trouver un code qui pourra m'aider sur internet.

Je souhaite faire une macro qui récupère les données de plusieurs fichiers excel contenus dans un même dossier pour les avoir tous sur un même fichier excel sans avoir à ouvrir les fichiers. Chaque fichier à importer est constitué de la même facon (2 feuilles)et c'est uniquement la 2ème feuille qui m'intéresse.

Est ce que c'est possible de le faire automatiquement lorsque j'ouvre le fichier sur lequel je veux importer mes données ?

Par contre le nombre de fichier augmente au fur et à mesure et je ne connais pas à l'avance les noms des fichiers excel.

En espérant que vous allez pouvoir m'aider,
Merci d'avance

Chloé

13 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
22 juin 2012 à 11:45
Salut,

un exemple qui montre comment récupérer les fichiers d'un répertoire.
Il te faudra comprendre ce code et l'adapter à ton besoin.

Sub demo()
    'creation de la liste des fichiers contenu dans le repertoire qui contient ce même fichier
    Dim MyWay As String, FichierXl As String, CompteurDeFichier As Integer
    Dim MessageFinDeTraitement As String, MaFeuille As Worksheet
    MyWay = ThisWorkbook.Path & "" 'chemin de ce fichier
    CompteurDeFichier = 0 'initialisation du compteur
    FichierXl = Dir(MyWay & "*.xls") 'on commence la récupération des fichiers .xls
    Do While Not FichierXl = "" 'on boucle tant que la variable FichierXl n'est pas vide
        CompteurDeFichier = CompteurDeFichier + 1 'incrémentation du compteur
        If CompteurDeFichier = 1 Then ' au premier fichier trouvé
            On Error Resume Next 'en cas d'erreur sur la prochaine ligne
            Set MaFeuille = ThisWorkbook.Worksheets("Liste de Fichier")
            If Not Err 0 Then ' si l'erreur n'est pas à 0 c'est que la feuille n'existe pas
                'on crée une nouvelle feuille
                Set MaFeuille = Worksheets.Add(after:=Worksheets(Worksheets.count))
                'on lui donne son nom
                MaFeuille.Name = "Liste de Fichier"
            Else
                'si la feuille existe on vide la liste
                MaFeuille.Columns(1).Cells.ClearContents
            End If
            On Error GoTo 0 'annule le precedent on error
            With MaFeuille.Range("A1")
                .Columns.ColumnWidth = 100 'valeur de largeur temporaire pour que "Autofit" s'applique correctement
                'on donne un titre à la liste
                .Value "Liste des fichiers du répertoire :" & Chr(10) & MyWay 'Chr(10) retour à la ligne
                Columns.AutoFit
            End With
        End If
        'on écrit dans la liste le nom du fichier trouvé
        MaFeuille.Range("A" & CompteurDeFichier + 1).Value = FichierXl
        FichierXl = Dir 'on passe au fichier suivant
        DoEvents 'en cas de problème on pourra toujours sortir de la boucle avec la touche [échap]
    Loop
    If CompteurDeFichier = 0 Then ' si pas de fichier
        MessageFinDeTraitement = "Aucun Fichier trouvé dans le répertoire spécifié ! "
    Else 'si un fichier ou plus a/on été trouvé(s)
        MessageFinDeTraitement = CompteurDeFichier & " fichier(s) trouvé(s) "
    End If
    ' on affiche un message en fin de traitement
    MsgBox MessageFinDeTraitement
End Sub


Une fois que tu auras compris et adapter ce code tu aurais fait le plus dure ! L'ouverture des fichiers et la copie des données ne seront plus qu'une formalité !

A+
2
Adelllo Messages postés 2 Date d'inscription vendredi 22 juin 2012 Statut Membre Dernière intervention 1 février 2013
22 juin 2012 à 10:07
Bonjour,
je te rejoins dans ta problématique !!!
Je suis exactement dans la même situation que toi.

Adelllo
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 juin 2012 à 10:09
Bonjour,
alors : mettez-vous-y donc à deux ... et utilisez le moteur de recherche de ce forum, car ce type de sujet a déjà fait l'objet de très nombreuses discussions sur ce forum.
Bon travail en équipe, donc.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 juin 2012 à 10:15
Mais si vous voulez travailler, plutôt que copier :
Existent :
- la fonction Dir (pour recenser en boucle)
- la méthode Workbooks.Open
- la méthode Copy

Et surtout : la méthode neurones (peu) et huile de coude (peu également).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

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

Posez votre question
cs_chloe10 Messages postés 3 Date d'inscription jeudi 21 juin 2012 Statut Membre Dernière intervention 26 juin 2012
22 juin 2012 à 10:31
Ca fait 2 jours que je recherche sur internet, je trouve des codes qui y ressemblent mais dès que j'essaie de les adapter y a des bugs et ça ne marche pas.


Chloé
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 juin 2012 à 10:42
Montre ce que tu as tenté (ton code), donc !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_BassbaZ Messages postés 5 Date d'inscription jeudi 21 juin 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 16:06
Bonjour, je suis débutant. Je recherche sensiblement la même chose que Adello et Chloé. Aprés l'ouverture d'un dossier contenant des fichiers excel, j'aimerai que l'utilisateur en selectionne un , et que le fichier excel ci se copie et se colle automatiquement dans une autre feuille.

J'ai essayer ce code suivant (Je n'ai jamais utilisé Workbooks.open auparavant).

Private Sub CommandButton4_Click()

Shell "explorer.exe C:\Users\Antoine\Desktop\TESTDEVIS"
Workbooks.Open (.xls)
Avtivewindow.Select
ActiveWindow.SmallScroll Down:=-105
Range("A1:E120").Select
Selection.Copy
Windows("LOGICIELDEVIS.xlsm").Activate
ActiveWindow.SmallScroll Down:=-48
Range("A1:E1").Select
ActiveSheet.Paste

End Sub

Bon, sa marche pas du tout, bug dés le début sur workbooks. Si des personnes ont des idées.
0
cs_BassbaZ Messages postés 5 Date d'inscription jeudi 21 juin 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 16:32
Je pense avoir compris quelque chose..effectivement ta macro Big fish est juste géniale, il faut juste arriver à inscrire "le nom du fichier" par rapport à la liste de fichier dans la macro Workbooks.Open("nom du fichier"). Je vais essayer avec une input box.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
22 juin 2012 à 16:55
re,

BassbaZ: non ce n'est pas le même besoin et ta question aurait méritée d'être posée dans un poste spécifique !

Mais je vais te répondre quand même,

Sub DemoSelectionFichier()
Dim LeFichier As String, wb As Workbook
    With Application.FileDialog(msoFileDialogOpen)
            .AllowMultiSelect = False
            .Filters.Add "Fichier Excel", "*.xl*; *.xls; *.xlt; *.xla", 1
            If .Show = -1 Then
                LeFichier = .SelectedItems(1)
            End If
    End With
    If Not LeFichier = "" Then
        Set wb = Workbooks.Open(LeFichier)
    Else
        MsgBox "Operation annulée par l'utilisateur ! ", vbExclamation
        Exit Sub
    End If
End Sub


donc si tu as d'autre question même pour ce que je viens de te donner merci d'ouvrir un autre poste.

A+
0
cs_chloe10 Messages postés 3 Date d'inscription jeudi 21 juin 2012 Statut Membre Dernière intervention 26 juin 2012
26 juin 2012 à 18:37
Merci pour ta réponse bigfish, mais dans ton code, tu indique le nom du fichier et moi je ne sais pas à l'avance les noms qu'auront les fichiers (il s'agit d'un export d'une appli dans excel qui donne automatiquement un nom de fichier).

Et je n'arrive pas à faire un code qui permet de selectionner automatiquement tous les fichiers d'un dossier sans avoir à rentrer les noms des fichiers dans le code.

Pourrais-tu m'aider ?

Merci

Chloé
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 juin 2012 à 11:45
Salut,

Merci pour ta réponse bigfish, mais dans ton code, tu indique le nom du fichier et moi je ne sais pas à l'avance les noms qu'auront les fichiers (il s'agit d'un export d'une appli dans excel qui donne automatiquement un nom de fichier).


ou je donne un nom au fichier dans la macro

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 juin 2012 à 16:25
Salut,

on est sur un forum dont l'objectif est le partage donc je ne répond pas aux questions via les messages perso !

Ton code est bien mais tu dois indiquer le nom des fichiers, alors que dans mon cas, ils se génèrent avec un nom aléatoire.

Cependant, pour bien comprendre le cheminement j'ai adapté ton code afin de voir si j'arrive bien à récupérer les fichiers en indiquant le nom.
Mais il me met l'erreur "nom ou numéro de fichier incorrect" sur cette ligne là :
FichierXl = Dir(MyWay & "a.xls")
Alors que le nom du fichier est bien "a" et j'ai été sur "propriété" du fichier pour récupérer le chemin :
MyWay = ThisWorkbook.Path & "C:\Users\C16672\Desktop\Planif" 'chemin de ce fichier

Tu penses que c'est du à quoi ?

Dans ton code tu as créé une seule variable FichierX1, mais si je dois rentrer plusieurs noms de fichiers, il faut que je cré plusieurs variables ? Dans ce cas là pourquoi tu as fait une boucle sur cette variable ?

Je sais que je te pose beaucoup de questions mais je me rends compte à quel point VBA peut aider et j'essaie de comprendre au fur et à mesure comment ça marche...

Merci d'avance de m'accorder de ton temps,

Chloé


je n'indique nullement le nom du fichier

Dans la ligne :

FichierXl = Dir(MyWay & "*.xls") 


"*.xls" spécifie le type de fichier à rechercher dans le répertoire spécifie. Répertoire qui dans l'exemple est le répertoire de Thisworkbook.

Autrement dit Il n'y pas à à donner un nom de fichier puisque "*.xls" représente touts les fichiers xls du répertoire.

Pour comprendre ce code essai le dans un nouveau fichier en le copiant et le collant tel quel !
puis enregistre ce nouveau fichier dans le répertoire qui contient tes fichiers.
Enfin lance la macro et vois ce qui ce passe.

Franchement je suis un peu en colère car j'ai pris la peine d’écrire des commentaires dans le code qui explique pas à pas la macro et tu n'as apparemment pas essayée de les comprendre. Honnêtement, si tu ne revient pas en me disant ce que la macro que je t'ai donnée te renvoie je ne crois pas que je puisse faire plus pour toi

A+
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2012 à 17:11
Salut, bigfish_le vrai,
Tu découvres peu à peu ce qui finit par mettre hors de soi.
Bienvenue au club


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous