Cop/col de plusieurs fichiers Excels vers un seul meme

Signaler
Messages postés
3
Date d'inscription
mardi 14 juillet 2015
Statut
Membre
Dernière intervention
14 juillet 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
14815
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 août 2021
156
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 ?
Messages postés
3
Date d'inscription
mardi 14 juillet 2015
Statut
Membre
Dernière intervention
14 juillet 2015

Desole,

mais je suis pas sur ce que tu entends par "une ouverture Excel" ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Messages postés
3
Date d'inscription
mardi 14 juillet 2015
Statut
Membre
Dernière intervention
14 juillet 2015

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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.