Regrouper fichiers txt sur xls

Résolu
746emilie -  
746emilie Messages postés 40 Statut Membre -
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!

9 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. 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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. 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
    2. 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
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  4. 746emilie
     
    je ne sais pas faire marcher celle-là...
    "erreur de compilation:
    variable non définie"
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. 746emilie
       
      zut, j'ai cru que c'était bon MAIS il ne m'importe pas le nom de l'onglet :(
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Mais où est-il ce nom?
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Tu veux le mettre où?
      0
    4. 746emilie
       
      le nom, c'est le nom du fichier texte
      si on l'ouvre avec xls, il se met dans l'onglet
      0
    5. 746emilie Messages postés 40 Statut Membre
       
      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
  8. 746emilie
     
    PIVERT , ca marche!

    Je conseille le lien, super pratique

    Thanks
    0
  9. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
    2. 746emilie Messages postés 40 Statut Membre
       
      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
    3. 746emilie Messages postés 40 Statut Membre
       
      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
    4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Voilà:

    http://www.cjoint.com/c/FAvjNNWvQbQ
    0
    1. 746emilie Messages postés 40 Statut Membre
       
      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
    2. 746emilie Messages postés 40 Statut Membre
       
      http://www.cjoint.com/c/FAvktYgiWMP
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
    4. 746emilie Messages postés 40 Statut Membre
       
      elle devient extraordinaire cette macro
      0