Cop/col de plusieurs fichiers Excels vers un seul meme

Aumoine Messages postés 3 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 14 juillet 2015 - 14 juil. 2015 à 17:12
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 15 juil. 2015 à 11:56
Bonjour a tous,

Voici le detail de mon projet:
Je cherche a:
- ouvrir plusieurs fichiers .txt d'un meme dossier sous excel.
- copier les trois premieres cellules (A1, A2, A3) pour chacun des fichiers ainsi ouverts sous Excel.
- Coller ces infos sur un meme fichier excel celui ouvert avec le code en transposant les valeurs (A1,B1,C1) et en allant a la ligne pour chacun des fichiers.

A l'heure actuelle j'arrive a ouvrir tous les fichiers .txt avec le code ci-dessous:
Sub ouvrir_fichiers()
ChDir "C:\Users\Myname\Documents\1. Projects\wilko\Test"
monfichier = Dir("*.txt*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()
Wend
End Sub

Ensuite le code ci-dessous me permet de mener l'operation sur un fichier dont je specifie le nom. (A1TKKI34.txt etant le nom du fichier)
Sub Test()
Windows("A1TKKI34.txt").Activate
Range("A1:A3").Select
Selection.Copy
Windows("book1.xlsx").Activate
Range("A1:C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=True, Transpose:=True
End Sub

Et c'est la ou je suis bloque, je ne sais pas quel code utiliser pour le looper/boucler sur tous les fichiers et aller a la ligne.

Merci a tous

6 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 juil. 2015 à 18:15
Au lieu d'utiliser une ouverture par Excel, pourquoi ne pas utiliser les instructions Open, Close, Line Input #
Et les opérations de chaines pour séparer les données ?
0
Aumoine Messages postés 3 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 14 juillet 2015
14 juil. 2015 à 18:53
Desole,

mais je suis pas sur ce que tu entends par "une ouverture Excel" ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 14/07/2015 à 19:30
Bonjour,
1) NHenry te fait simplement observer qu'il est abusif (et en tout état de cause très lourd) d'ouvrir par Excel tes fichiers textes pour en lire le contenu.
Je le plussoie un million de fois.
La méthode qu'il t'indique est de très loin la plus agile.
2) la première ligne non encore remplie de la colonne A de la feuille titi d'un classeur toto a pour rang :
toto.worksheets("titi").range("A" & rows.count).end(xlup).row + 1

reviens si tu as des difficultés, en nous montrant le code écrit sur ces deux bases (ce que t'a dit NHenry et ce que je viens de te dire).
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Aumoine Messages postés 3 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 14 juillet 2015
Modifié par NHenry le 14/07/2015 à 21:46
Bonsoir,

Via des recherches, j'ai retravaille le code et ca marche correctement !!
J'ai rajoute une loop While/Wend et utilise la fonction DIR.
Qu'est ce que vous en pensez ? je les ouvres toujours via excel mais je referme ainsi le premier fichier wue je traite et pass au suivant. Bon j ai essaye sur 4 fichiers et j'en pres de 1000 a gerer donc cela prendra peut etre un peu de temps.

J'ai commence sur VBA il y a peu donc j'si surement du mal a apprecier vos commentaires. Merci encore pour votre soutien.

ChDir "C:\Users\myname\Documents\1. Projects\wilko\Map_Packages\Test"
Mappack = Dir("C:\Users\myname\Documents\1. Projects\wilko\Map_Packages\Test\*.txt")
While Len(Mappack) > 0
Workbooks.Open Mappack
AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count - 1
Range("A1:A3").Copy
Workbooks("Book2.xlsm").Activate
Range("A1:C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=True, Transpose:=True
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Workbooks(Mappack).Close
Mappack = Dir
Wend


EDIT: Ajout de la coloration syntaxique.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 14/07/2015 à 22:24
1) Quelle est l'utilité de chdir ? Il est totalement inutile.
2) Nous "en pensons" par ailleurs ce que nous t'en avons déjà dit assez clairement et dont tu ne tiens aucun compte.
Tu traites ainsi très lourdement ce qui pourrait et devrait être traité mille fois plus agilement.
Et tu transformes en plus ton projet en véritable "arbre de Noël" qui passe sans cesse d'un classeur à l'autre, avec tes Activate, Select, Selection, Copy, paste, etc ...
Et je ne vois toujours pas où et comment tu passes ainsi à la ligne suivante !
Voilà ! c'est dit.

PS : et je ne veux même pas commenter cette ligne de code :
AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count - 1

Pour plusieurs raisons, la plus évidente (mais pas la seule) étant que tu définis ainsi une variable que tu n'utilises pas !
Cela ressemble finalement fort à un codage à tâtons sans compréhension.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/07/2015 à 14:02
Alors ? Où en es-tu ? Silence radio ?
Regarde ce que fait ceci (où d:\titi est le répertoire où se trouvent tes .txt) :
chemin = "d:\titi\"
monfic = Dir(chemin & "\*.txt", vbDirectory Or vbReadOnly Or vbHidden Or vbSystem)
Do While monfic <> ""
If Range("A1").Value = "" Then
derlig = 1
Else
derlig = Range("A" & Rows.Count).End(xlUp).Row + 1
End If
Open chemin & monfic For Input As #1
For i = 0 To 2 ' ===>> on ne prend que trois lignes
If EOF(1) Then Exit For ' ==>> pour le cas où tu aurais moins de tes 3 lignes !
Line Input #1, toto
ActiveSheet.Range("A" & derlig).Offset(0, i).Value = toto
Next
Close #1
monfic = Dir
Loop

Rapide, non ?
C'est ce à quoi tu serais parvenu seul en appliquant ce que NHenry et moi-même t'avons dit plus fhaut ...
Essaye au moins, maintenant, d'analyser et de comprendre. Ne te contente pas de copier/coller.

EDIT :
et même ceci marcherait (également très rapide) ===>>
chemin = "d:\titi\"
monfic = Dir(chemin & "\*.txt", vbDirectory Or vbReadOnly Or vbHidden Or vbSystem)
Do While monfic <> ""
If Range("A1").Value = "" Then
derlig = 1
Else
derlig = Range("A" & Rows.Count).End(xlUp).Row + 1
End If
Open chemin & monfic For Input As #1
ActiveSheet.Range("A" & derlig & ":" & "C" & derlig) = Split(Input(LOF(1), #1), vbCrLf)
Close #1
monfic = Dir
Loop



________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous