Regrouper fichiers txt sur xls

Résolu
746emilie -  
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aimerais regrouper différents fichiers txt dans un classeur xls.

Les fichiers txt se trouveront tous dans le même dossier.

Les fichiers txt ont toujours la même structure, même nombre de lignes et de colonnes. Ils n'ont qu'un onglet. Attention, le nom de l'onglet est à importer aussi.

Dans excel, je voudrais: 1 seul classeur, une feuille par fichier texte. Le nom de l'onglet doit se retrouver sur la feuille (il peut pex écraser le contenu en A1 sur chacun des onglets).

Et il faudrait fonctionner par batch, qu'une petite macro me calcule tout ça sur tous les fichiers txt du dossier, par exemple...

C'est possible?

Merciii!





A voir également:

9 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

Voir ceci pour importer des fichiers texte sur une feuille de calcul:

https://forums.commentcamarche.net/forum/affich-33039694-recuperation-donnees-avec-macro#p33039841

Par contre quand je lis ceci, j'ai un doute sur les fichiers texte (.txt)

Les fichiers txt ont toujours la même structure, même nombre de lignes et de colonnes. Ils n'ont qu'un onglet. Attention, le nom de l'onglet est à importer aussi.

Affaire a suivre!
0
746emilie
 
le nom de l'onglet, je dois l'indiquer manuellement lorsque j'exporte les fichiers txt
donc on ne le retrouve pas dans le fichier en lui même
j'ai trouvé cette formule , elle marche pour mettre le nom de l'onglet en A1, ce que je ferai dans le fichier final
=STXT(CELLULE("nomfichier");TROUVE("]";CELLULE("nomfichier"))+1;32)
Pour le reste, je nage :)
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Essaie ceci:

Sub Recup()
 Dim Fichier, feuille As String
 feuille = InputBox("Entrez le nom du nouvel onglet", "Onglet", "mafeuille")
    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If Fichier <> False Then
       Sheets.Add.Name = feuille
       Worksheets(feuille).QueryTables.Add("TEXT;" & Fichier, [B1]).Refresh 'à adapter
      Else
        MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte !"
    End If
End Sub

0
746emilie
 
Merci de m'aider le Pivert!
que dois-je mettre à la place de "à adapter" et "Pour importer des données dans Excel, vous devez choisir un fichier texte !"?
0
746emilie
 
INCROYABLE PIVERT!!!!
Ca marche !!!!
MERCI!
Y aurait-il moyen d'avoir un menu déroulant pour nommer la feuille quand il me le demande (entrer le nom du nouvel onglet--> menu déroulant ou bien il m'enverrait dans le dossier pour que je puisse choisir moi-même le nom du fichier txt en cliquant dessus)?

pour limiter le risque d'erreur à la retranscription
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Ajouter une ComboBox dans l'UserForm avec ce code:

Option Explicit
Private Sub CommandButton1_Click()
Recup
End Sub
Sub Recup()
 Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If Fichier <> False Then
  Sheets.Add.Name = ComboBox1.Text
       Worksheets(ComboBox1.Text).QueryTables.Add("TEXT;" & Fichier, [B1]).Refresh 'à adapter le cellule de reception
       Else
        MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte!", vbExclamation, "Importer fichier texte"
    End If
End Sub
Private Sub UserForm_Initialize()
'adapter le nom des onglets
ComboBox1.AddItem ("mafeuille_1")
ComboBox1.AddItem ("mafeuille_2")
ComboBox1.AddItem ("mafeuille_3")
ComboBox1.AddItem ("mafeuille_4")
ComboBox1.ListIndex = 0
End Sub

0
746emilie
 
je ne sais pas faire marcher celle-là...
"erreur de compilation:
variable non définie"
0

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

Posez votre question
746emilie
 
Une autre chose me tracasse

je dois reprendre sur chaque onglet créé avec ta formule les data de F19 en F51: données de ce genre 4529/4557

puis, les convertir en 2 colonnes

ensuite, les additionner (en gardant les données séparées pour chaque onglet)

j'ai créé une feuille en dernier avec une macro MAIS je ne sais pas comment désigner des onglets qui VONT être créés mais ne sont pas encore existants !
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
On va procéder par ordre. Voici un fichier pour importer des fichiers textes dans un classeur.

http://www.cjoint.com/c/FAtnXusWBtQ

Ensuite si cela est résolu, tu fais un nouveau post avec ta nouvelle demande.
0
746emilie
 
zut, j'ai cru que c'était bon MAIS il ne m'importe pas le nom de l'onglet :(
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Mais où est-il ce nom?
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Tu veux le mettre où?
0
746emilie
 
le nom, c'est le nom du fichier texte
si on l'ouvre avec xls, il se met dans l'onglet
0
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Pivert, je suis membre maintenant ! :)
il faudrait que le nom apparaisse dans ton sommaire à la place de feuille 1,2,3 et dans les onglets feuille 1,2,3
faisable tu crois?
0
746emilie
 
PIVERT , ca marche!

Je conseille le lien, super pratique

Thanks
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Je comprends mieux maintenant!

Voilà le nouveau code:

Option Explicit
 Dim onglet As Boolean
 Dim Fichier
 Dim Tableau() As String
 Dim pos As Integer
 Dim nomfichier As String
Sub Recup_import()
'on recherche le fichier texte
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    If Fichier <> False Then
    'on récupere le nom du fichier texte sans son extension
 nomfichier = Mid(Fichier, InStrRev(Fichier, "\") + 1)
pos = InStr(1, nomfichier, ".", 1)
       nomfichier = Left(nomfichier, pos - 1)
       'on vérifie si il n'y a pas d'onglet portant le même nom
       onglet = True
 Doublons
If onglet = False Then Exit Sub
'on ajoute un onglet
    Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = nomfichier
'on met le texte sur la feuille
       Worksheets(nomfichier).QueryTables.Add("TEXT;" & Fichier, [B1]).Refresh 'à adapter le cellule de reception
       Range("A1").Value = nomfichier
       Else
        MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte!", vbExclamation, "Importer fichier texte"
    End If
    Sheets("Sommaire").Select
   Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = nomfichier
    End Sub
Private Sub CommandButton2_Click()
Recup_import
End Sub
'http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-F
Private Sub UserForm_Initialize()
    Dim j As Integer
    'Récupère les données de la colonne A...
    For j = 1 To Range("A65536").End(xlUp).Row
        ComboBox1 = Range("A" & j)
        '...et filtre les doublons
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("A" & j)
    Next j
    ComboBox1.ListIndex = 0
End Sub
'empecher de renommer onglet du même nom
Private Sub Doublons()
Dim ctr
For ctr = 1 To Sheets.Count
  If Sheets(ctr).Name = nomfichier Then
MsgBox "Un onglet porte déjà ce nom!", vbExclamation, "Ajouter onglet"
  onglet = False
  End If
  Next
End Sub


Tu peux toujours garder la combobox pour naviguer dans tes onglets. si cela t’intéresse, je te donnerai le code
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Tiens voilà le code pour sélectionner un onglet:

Private Sub CommandButton1_Click()
Dim Index As Integer
Range("A1").Value = "Sommaire"
Index = ComboBox1.ListIndex
 Sheets(Index + 1).Select
End Sub


Voilà

@+ Le Pivert
0
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Salut Pivert

j'ai essayé ton code, il m'affiche 'erreur d'exécution 9: l'indice n'appartient pas à la sélection'
tu sais ce que ça veut dire?
Emi
0
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
ca devient fort fort bien!!!

sans abuser
est-ce que la macro pourrait m'importer d'un coup tous les fichiers txt d'un même dossier?
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Pour faire cela il faut que tous tes fichiers texte soient dans le même dossier. Faire un boucle sur les fichiers. il suffit ensuite d'adapter ta macro d'importation.

Voilà
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Voilà:


http://www.cjoint.com/c/FAvjNNWvQbQ
0
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
non, lui me permet d'aller direct à l'onglet que je viens de créer
moi ce que je voudrais, c'est pouvoir sélectionner tous les fichiers txt d'un coup pour tous les importer en même temps (= appliquer 1 fois le code plutôt que 10)
0
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
http://www.cjoint.com/c/FAvktYgiWMP
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Voilà un exemple avec les fichiers texte dans le même dossier que le classeur. Si le dossier des fichiers texte est indépendant du classeur, il faudra changer le chemin:

http://www.cjoint.com/c/FAvlwf26MCQ

Je ne peux pas travailler sur ton classeur car je ne suis pas dans ton environnement. C'est à toi d'adapter mon exemple à ton environnement, les chemins ne sont pas les mêmes.

@+ Le Pivert
0
746emilie Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
elle devient extraordinaire cette macro
0