importer des données

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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😀' & Last)
Dep.Copy desti
Trois.Close
Next
End Sub
 
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

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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

D
  • Question Question
2
Réponses
28
Affichages
2 K
Deleted member 441486
D
Retour