IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA Manipulation tableau a partir d'un fichier txt


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut VBA Manipulation tableau a partir d'un fichier txt
    Bonjour à tout le monde. Je suis nouveau dans ce forum et j'espère pouvoir trouver ici mes réponses pour mon petit problème.
    On me dira surement que ce sujet est déjà traité ailleurs, mais je ne trouve pas de discussion qui correspond à mon problème.

    Je souhaite lire un fichier .txt, puis ensuite distribuer différentes lignes dans des onglets individuels. Ci-joint mon fichier .txt que je veux importer. J’arrive à lire mon .txt avec ces commandes la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub get_file()
    Dim Ligne, Chemin$, nomFich As String
         Chemin = ThisWorkbook.Path
        nomFich = "\test.txt"
        Open Chemin & nomFich For Input As #1
        While Not EOF(1)
            Input #1, Ligne
        Wend
        Close #1
    End Sub
    Par contre je ne sais pas manipuler le tableau.
    Dans un premier temps je voudrai prendre toutes les lignes commençants par « CROD » et les mettre dans l’onglet « CROD », idem pour « GRID » et plusieurs mot clés s’il il le faut. La difficulté est d’imposer 8 caractères par colonnes. C’est le seul « séparateur » que j’ai. C’est ce paramètre que je ne trouve pas dans d’autres problèmes.

    Dans un second temps il peut arriver que je nécessite 2 voir X lignes qui vont ensemble (voir deuxième partie du .txt). Une idée pour boucler tout ca ?

    Le .txt est un exemple, le fichier de base est très lourd, c'est pour cela que je ne veut pas importer la totalité du fichier et faire le tri apres. Un tableau VBA me semble alors plus adapté.

    Merci d’avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Je commencerais par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub get_file()
    Dim Ligne, Chemin$, nomFich As String
         Chemin = "C:\Users\client\Downloads"
        nomFich = "\test.txt"
     Set wb = Workbooks.Open(Chemin & nomFich, True)
     
    End Sub
    Cordialement

    Docmarti.

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour,

    vu l'ahurissante conception du fichier texte source, évidemment s'il y a la possibilité d'en
    créer un « propre » avec un délimiteur et les informations regroupées en une seule ligne.

    Sinon, joindre un classeur xlsx (sans code) contenant des feuilles résultat correspondant
    exactement au résultat souhaité d'après le fichier texte source joint initialement …

    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Le fichier .txt est un fichier que me sort un logiciel. Il parait bordélique mais il suffit de créer une nouvelle colonne tout les 8 caractères. Il y'a quand même une logique dans ce fichier.
    Le faire manuellement est pas difficile, mais mon vrai fichier de source est trop énorme pour l'importer dans sa globalité. La macro permettra rapidement de prendre les infos souhaités et les trier en même temps.

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut





    Dans le menu Données, utiliser Importer à partir d'un fichier puis bien paramétrer son assistant,
    aucune difficulté pour séparer les colonnes tous les huit caractères …



    _____________________________________________________________________________________________________
    L'effort fait les forts …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    C'est exactement ce que je veux faire mais en macro avec tableau vba et non en manipulant les cellules. Mon fichier exemple est très simple, le vrai fichier est énorme.
    Ci joint le résultat que je voudrais obtenir.
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Dans le menu Données, utiliser Importer à partir d'un fichier puis bien paramétrer son assistant,
    aucune difficulté pour séparer les colonnes tous les huit caractères …
    En activant le Générateur de macro avant d'effectuer cette manipulation, le code est livré sur un plateau ‼
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Pour ce qui concerne la montée des données texte dans un tableau VBA.
    Voyez si cela convient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Dim T$()
     
    Sub get_file()
    Dim Ligne$
    Dim Chemin$
    Dim NomFich$
    Dim cpt&
    '---
    Chemin$ = ThisWorkbook.Path
    NomFich$ = "\test.txt"
    '---
    Open Chemin$ & NomFich$ For Input As #1
      While Not EOF(1)
        Line Input #1, Ligne$
          If Len(Trim(Ligne$)) > 0 Then
            If InStr(1, Ligne$, vbTab) = 0 Then
              cpt& = cpt& + 1
              ReDim Preserve T$(1 To cpt&)
              T$(cpt&) = Ligne$
            Else
              '/// Exception : cas des lignes à rabouter
              '/// (je n'ai pas trop compris)
              Ligne$ = Replace(Ligne$, vbTab, Space(1))
              T$(cpt&) = T$(cpt&) & Ligne$
              '///
            End If
          End If
        Wend
    Close #1
    End Sub
     
    Sub InscriptionTableau()
    Dim S As Worksheet
    Dim Tcount&
    Dim i&
    '--- Pour visualiser - si le tableau est vide, on sort ---
    On Error Resume Next
    Tcount& = UBound(T$)
    If Err <> 0 Then Exit Sub
    '--- Inscription dans une nouvelle feuille ---
    Set S = Sheets.Add
    For i& = 1 To Tcount&
      S.Range("A" & i& & "") = T$(i&)
    Next i&
    End Sub

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub test()
        Dim fso As Object,text As Object,contents, txt As String,Chemin  As String
        Chemin = ThisWorkbook.Path & "\test.txt"
        Set fso = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(Chemin) Then
            Set text = fso.OpenTextFile(Chemin, 1)
            contents = text.ReadAll
            text.Close
            contents = Replace(contents, Chr(13), "")
            contents = Split(contents & Chr(10), Chr(10))
            txt = ""
            For i = 0 To UBound(contents)
                If Trim("" & contents(i)) <> "" Then
                    If txt = "" Then txt = contents(i) Else txt = txt & vbctrl & contents(i)
                End If
            Next
            Set NewFichier = fso.OpenTextFile(Chemin, 2, True)
            NewFichier.Write txt
            NewFichier.Close
            Set NewFichier = Nothing
        Else
            MsgBox "File does not exist"
        End If
        Set fso = Nothing
     
    End Sub

  10. #10
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par Freshanet Voir le message
    Le fichier .txt est un fichier que me sort un logiciel. Il parait bordélique mais il suffit de créer une nouvelle colonne tout les 8 caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub get_file()
    Dim Ligne, Chemin$, NomFich As String
         Chemin = "C:\Users\client\Downloads"
        NomFich = "\test.txt"
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Input #1, Ligne
            lig = lig + 1
            a = Ligne
            col = 0
            While a <> ""
             col = col + 1
             Cells(lig, col) = Mid(a, 1, 8)
             a = Mid(a, 9)
            Wend
     
        Wend
        Close #1
    End Sub
    Cordialement

    Docmarti.

  11. #11
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci tout le monde pour vos messages rapides. Je vais pouvoir m'en sortir avec ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/05/2010, 12h06
  2. Réponses: 5
    Dernier message: 24/02/2009, 09h05
  3. initialisation d'un tableau a partir d'un fichier texte
    Par infofree dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/04/2008, 21h17
  4. Réponses: 10
    Dernier message: 08/06/2006, 08h57
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo