importer des données

  • Initiateur de la discussion Jean-Yves
  • Date de début
J

Jean-Yves

Guest
Bonsoir,

Je désire créer une macro qui importe des données depuis des fichiers '.txt'.

Ces fichiers sont tous situés dans un même répertoire et je voudrais que ma macro importe automatiquement tous les fichiers du répertoire sur des feuilles vierges d'un même classeur.

Après l'exécution de ma macro, j'aurais donc autant de feuilles qu'il n'y a de fichiers '.txt' dans le répertoire.

jusqu'à présent je n'ai réussi qu'à importer un seul fichier à la fois en préçisant le nom de ce fichier. Malheureusement, j'ai environ 20 répertoires de 30 fichiers à importer :( ...

Si une bonne âme possède une solution à ce problème, je lui serai très reconnaissant de me la faire parvenir.


Merci beaucoup.
 

pat1545.

XLDnaute Accro
Salut,

tu peux t'inspirer de ceci peut etre mais l'inconvénient est qu'il faut (dans cette version) mettre en 'dur' les noms de fichier dans le code (ici CL1.XLS, CL2.XLS, etc)
Bye

Sub cop()
Dim Last As Integer, I As Integer
Dim desti As Range, Dep As Range
Dim Nomfich As String
Dim Lesfiles As Variant
Dim Depart As Workbook
Dim Trois
Lesfiles = Array('cl1.xls', 'cl2.xlS', 'cl3.xLS')
'Nomfich = Application.GetOpenFilename('documents excel(*.xls),*.xls', , , , False)
'Workbooks.Open Filename:=Nomfich
Set Depart = ActiveWorkbook
For I = 0 To UBound(Lesfiles)
Call OuvrirTout(Lesfiles(I))
Set Trois = ActiveWorkbook
Last = Sheets(1).Range('A65000').End(xlUp).Row
'Depart.Activate
Set desti = Depart.Sheets('Feuil4').Range('A65000').End(xlUp)(2)
Set Dep = Range('A2:D' & Last)
Dep.Copy desti
Trois.Close
Next
End Sub
 

Davidc57

XLDnaute Occasionnel
Bonjour Jean-Yves, bonjour Pat,

Je t'envoi une solution toute faite. Tu me diras ce que t'en penses.

Je dois préciser certains détails tout de même.

1- Le programme va scanner le répertoire de ton choix. Modifie la variable rep_txt dans le programme en mettant le chemin d'accès é tes .txt

2- Le programme va ouvrir un après l'autre chacun de .txt, et quand il aura terminé, il supprimera le fichier avant de passer au suivant. Donc ci nécessaire, sauvegarde tes .txt (au moins pour les tests)

3- L'instruction dans le programme qui permet l'ouverture des fichiers .txt a été généré automatiquement par l'enregistreur de macro d'excel. Je te conseil de faire de même et d'enregistrer une ouverture manuelle d'un fichier txt. Tu fixes ton délimiteur etc... et tu n'auras qu'à remplacer le code. Enfin, il faudra aussi remettre les variables pour désigner le fichier à ouvrir.

Voilà si tu as des questions, n'hésites pas.
A+
David [file name=fichiertxt_20060503021736.zip size=11759]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/fichiertxt_20060503021736.zip[/file]
 

Pièces jointes

  • fichiertxt_20060503021736.zip
    11.5 KB · Affichages: 20
J

Jean-Yves

Guest
Bonjour David,

j'ai essayé ta macro, c'est une merveille.

J'aimerais toutefois pouvoir mettre le classeur dans le dossier contenant les '.txt' et définir 'rep_txt' égal au répertoire 'courant'.

La macro serait ainsi 'portable' d'un dossier à l'autre sans devoir y toucher.

NB : j'ai une floppée de dossiers à traiter ce qui explique que j'essaie d'automatiser au max.

Merci pour tout.
 

Davidc57

XLDnaute Occasionnel
Bonsoir Jean-Yves, bonsoir tout le monde,

Merci pour le compliment. On peut en effet rendre le programme portable en faisant ce que tu demandes.

Voilà quelques indications, mais je te laisse adapter et revenir si besoin.

1. Calcul du répertoire courant, que j'appelle RepApp :

Code:
RepApp = Mid(ThisWorkbook.FullName, 1, InStr(1, ThisWorkbook.FullName, ThisWorkbook.Name, 1) - 1)

2. Pour ne considérer que les fichiers .txt (donc pas le programme excel)


Code:
sFile = Dir(rep_txt & '*.*')

sera remplacé par

Code:
sFile = Dir(rep_txt & '*.txt')


J'ai pas essayé mais ca doit fonctionner. Dans le cas contraire, on pourra toujours faire un test sur le nom du fichier.

Si SFile = ActiveworkBook.name alors ....


3. Efface la variable Rep_txt dans tout le code. Remplace là par la variable RepApp définie en 1.


Voilà, tu devrais t'en sortir. J'aurai mis moins de temps pour le faire que pour l'expliquer mais au moins tu apprends non ?

Si besoin, n'hésites pas !!

A+
David
 

Discussions similaires

Statistiques des forums

Discussions
312 896
Messages
2 093 388
Membres
105 716
dernier inscrit
jrmdprt