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 :

Importation automatique txt en Excel [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Avril 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 57
    Par défaut Importation automatique txt en Excel
    Bonjour à tous,

    Comme je suis novice, j'aurais besoin d'un coup de main de votre part pour mon fichier.

    Voilà d'un fichier texte de pouvoir faire une moulinette automatique pour le convertir dans un nouveau tableau Excel.

    Je vous joins mon fichier source en Texte comme modèle suite a une capture en hyper-terminal.
    Ainsi qu'une capture ( Fichiers attachés) pour la finalisation de l'importation dans le nouveau tableau Excel.

    Merci par avance à ceux qui prendrons un peu de temps pour me venir en aide.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stef3700 Voir le message

    Bonjour,

    A tester :

    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
     
    Sub ImportFichierTexte()
     
    Dim Fichier As String
    Dim ShImport As Worksheet, ShMaj As Worksheet
    Dim I As Long, J As Long, DerniereLigne As Long
    Dim MonTableau As Variant
     
     
        'chemin à adapter
        Fichier = ActiveWorkbook.Path & "\Fichier source.txt"
        Set ShImport = Sheets("Feuil1")
        Set ShMaj = Sheets("Feuil2")
        With ShMaj
             .Cells.Clear
             .Range(.Cells(1, 1), .Cells(1, 4)) = Array("Date", "Heures", "Module", "Texte")
        End With
     
        With ShImport
             .UsedRange.Clear
             .QueryTables.Add("TEXT;" & Fichier, ShImport.[A1]).Refresh
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
        End With
     
        J = 3
        With ShImport
            For I = 1 To DerniereLigne Step 3
                MonTableau = Split(.Cells(I, 1).Value, Chr(32))
                Debug.Print .Cells(I, 1) & " : " & UBound(MonTableau)
                ShMaj.Cells(J, 1) = MonTableau(2)
                ShMaj.Cells(J, 2) = MonTableau(3)
                ShMaj.Cells(J, 3) = MonTableau(4)
                ShMaj.Cells(J, 4) = .Cells(I + 1, 1).Value
                J = J + 1
            Next
            .Cells.EntireColumn.AutoFit
        End With
     
        Set ShImport = Nothing
        Set ShMaj = Nothing
     
    End Sub

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    C'est clairement un boulot pour Power Query, genre trois clics de souris (onglet données...), surtout en XL365...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Solution PowerQuery

    Mettre à jour le chemin d'accès au fichier en respectant la casse puis Données, Actualiser Tout
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Merci Chris pour la mise en pratique
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Avril 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 57
    Par défaut
    Chris désolé je ne comprend pas ton explication.

    celas dit la macro de Eric fonctionne parfaitement pour moi.
    pas contre il me faudrait si possible pourvoir ajouter des colonnes depuis Modules
    M01.222.1D en 3 colonnes de type M01 avec 222 avec 1D Voir photos
    Images attachées Images attachées  

  7. #7
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    RE
    Citation Envoyé par stef3700 Voir le message
    Chris désolé je ne comprend pas ton explication.
    Tu ne comprends pas quoi dans
    "Mettre à jour le chemin d'accès au fichier en respectant la casse puis Données, Actualiser Tout" ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Avril 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 57
    Par défaut
    Bon voilà moi, j'ai un message qui me dit que ma version ne fonctionne pas avec celle du fichier de Chris. Mais qui fonctionne bien avec celle d'Eric.
    Pourtant, j'ai Excel 365 ProPlus ????
    Je perds la Tête..

  9. #9
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    RE

    Peux-tu joindre une copie d'écran du message ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stef3700 Voir le message
    Au cas où cette solution pourrait servir encore :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Sub ImportFichierTexte()
     
    Dim Fichier As String
    Dim ShImport As Worksheet, ShMaj As Worksheet
    Dim I As Long, J As Long, DerniereLigne As Long
    Dim MonTableau As Variant
     
     
        'chemin à adapter
        Fichier = ActiveWorkbook.Path & "\Fichier source.txt"
        Set ShImport = Sheets("Feuil1")
        Set ShMaj = Sheets("Feuil2")
        With ShMaj
             .Cells.Clear
             .Range(.Cells(1, 1), .Cells(1, 6)) = Array("Date", "Heures", "Module", "Adresse", "Direction", "Texte")
        End With
     
        With ShImport
             .UsedRange.Clear
             .QueryTables.Add("TEXT;" & Fichier, ShImport.[A1]).Refresh
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
        End With
     
        J = 3
        With ShImport
            For I = 1 To DerniereLigne Step 3
                MonTableau = Split(.Cells(I, 1).Value, Chr(32))
                Debug.Print .Cells(I, 1) & " : " & UBound(MonTableau)
                ShMaj.Cells(J, 1) = MonTableau(2)
                ShMaj.Cells(J, 2) = MonTableau(3)
                ShMaj.Cells(J, 3) = Split(MonTableau(4), ".")(0)
                ShMaj.Cells(J, 4) = Split(MonTableau(4), ".")(1)
                ShMaj.Cells(J, 5) = Split(MonTableau(4), ".")(2)
                ShMaj.Cells(J, 6) = .Cells(I + 1, 1).Value
                J = J + 1
            Next
        End With
     
        With ShMaj
             With .UsedRange
                  .EntireColumn.AutoFit
                  With .Borders
                       .LineStyle = xlContinuous
                       .Weight = xlThin
                  End With
                  With .Rows(2)
                       .Borders(xlEdgeRight).LineStyle = xlNone
                       .Borders(xlEdgeLeft).LineStyle = xlNone
                       .Borders(xlInsideVertical).LineStyle = xlNone
                  End With
             End With
             .Range(.Cells(1, 1), .Cells(1, 5)).EntireColumn.HorizontalAlignment = xlCenter
        End With
     
        Set ShImport = Nothing
        Set ShMaj = Nothing
     
    End Sub

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    On ne dit pas que la macro d'Eric ne fonctionne pas

    On propose une autre solution en XL365 qui passe par Power Query et qui ne requiert pas de VBA (le fichier peut rester en XLSX sauf bien sûr s'il contient d'autres macros). Evidemment, ça demande de prendre Power Query en mains, comme VBA demande d'être pris en mains...

    De plus, le code VBA proposé contient des valeurs en dur (hard coding) ce qui rend la macro peu portable. Il est primordial pour moi de déplacer les valeurs reprises en dur dans le code (le chemin, les noms de feuilles, etc...) dans un tableau structuré ou dans des plages nommées (comme dans la proposition de Chris). Ca devrait, de mon point de vue, être systématiquement proposé dans nos réponses pour qu'on arrête petit à petit de "faire du hard coding" à tout va.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre confirmé
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Avril 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 57
    Par défaut
    Pierre
    je n'ai jamais dit que la macro ne fonctionne pas

    Comme je suis novice je demande de l'aide a mon problème tout simplement

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Nous sommes bien d'accord
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si la solution d'Eric te convient et fonctionne, et que tu sais la faire évoluer selon tes besoins, c'est parfait. Utilise-là. C'est intéressant qu'il y ait plusieurs solutions possibles à un problème.

    Power Query a été créé pour éviter à des non-informaticiens de devoir mettre les mains dans le cambouis pour réaliser des opérations dont tout utilisateur a besoin, alors même qu'il n'est pas programmeur. Une toute grosse majorité des besoins en Power Query concerne l'acquisition "simple" de données externes, contenues par exemple dans des txt ou csv, requérant très peu de manipulations, même si Power Query propose bien plus que cela. Il est dommage de s'en passer et de réinventer du VBA à chaque besoin, mais si tu te sens plus à l'aise en VBA, pourquoi pas?

    Pour ma part, je regrette que Power Query ne soit pas mieux maîtrisé sur le forum et ne sois pas proposé chaque fois que c'est utile, car c'est en forgeant qu'on devient forgeron, et c'est en tapant sur un clou qu'il finit par entrer.Je regrette également que, même en VBA, la solution n'utilise pas les tableaux structurés.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour à tous

    J'ai modifié la requête :
    • un argument ayant été ajouté à l’indexation dans PowerQuery sur 365, j'ai enlevé cet argument afin que la requête soit compatible avec toutes les versions (testée sur 2010 et 365)
    • éclaté la colonne module en 3 colonnes
    Fichiers attachés Fichiers attachés

  16. #16
    Membre confirmé
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Avril 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 57
    Par défaut
    Merci, je pense approfondir le Power Query pour ma part, je ne connais pas.
    Encore merci

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

Discussions similaires

  1. alimenter une base de données en important automatiquement un fichier excel
    Par ApprentiDeveloppeur dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/04/2010, 07h58
  2. [e-2]vba import donnees txt vers excel et réseau local
    Par billx06 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2008, 19h46
  3. probleme importation fichier .txt sous Excel
    Par darkspoilt dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/11/2007, 18h15
  4. Importer texte .TXT dans EXCEL
    Par MAFFORUM dans le forum Excel
    Réponses: 4
    Dernier message: 11/06/2007, 12h48
  5. importer automatiquement un fichier excel
    Par polianita dans le forum Access
    Réponses: 2
    Dernier message: 11/07/2006, 17h20

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