Macro exc el pour convertir données d'un .txt

UsulArrakis Messages postés 7683 Statut Contributeur -  
UsulArrakis Messages postés 7683 Statut Contributeur -
Bonjour à tous

je dispose d'office 2007

un petit pb pour les macroteurs :

je récupère un fichier .txt qui est une suite de données séparées par des ;

ces données correspondent à une personne tout les 15 ;

mais il n'y a pas de retour à la ligne pour marquer le changement de personne

donc excel importe tout dans les les 20 premières lignes de la colonne A et ensuite pour convertir les données en indiquant le ; comme séparateur ça ne permet pas d'avoir une ligne par personne

si qq'un a une idée ça me dépannerait grandement

merci

--

(_Usul d'Arrakis
    Serial_Dreamer_)
Configuration: Win XP pro

4 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour UsulArrakis,

    Comme personne ne se bouscule pour te dépanner, une petite macro qui ouvre le fichier texte choisi et le ventile sur 15 colonnes à partir de la ligne 3 (à modifier) de la feuille active.

    Public Sub txt_15col()
    Dim lig As Long     ' ligne
    Dim col As Integer  ' colonne
    Dim art As String   ' article lu
    Dim cel As String   ' valeur cellule
    Dim fic As String   ' chemin fichier
    Dim idx As Integer  ' index caractère
    fic = Application.GetOpenFilename("Textes,*.txt")
    Open fic For Input As #1    ' ouvre fichier texte
    lig = 3                     ' ligne début
    Do
        Input #1, art           ' lecture
        idx = 0                 ' initiatisation index
        While idx < Len(art)    ' boucle mongueur article
            For col = 1 To 15   ' 15 colonnes
                cel = ""        ' initiatisation cellule
                Do
                    idx = idx + 1
                    If Mid(art, idx, 1) = ";" Then Exit Do
                    cel = cel & Mid(art, idx, 1)
                Loop While idx < Len(art)
                Cells(lig, col).Value = cel ' valorisation cellule
            Next col
            lig = lig + 1       ' changement de ligne
        Wend
    Loop While Not EOF(1)
    Close #1
    End Sub
    


    En espérant avoir compris le problème...
    0
  2. UsulArrakis Messages postés 7683 Statut Contributeur 3 196
     
    hello gb
    merci pour cette macro

    je viens de la tester. tu avais bien compris mon pb.

    mais car il y a un mais ;-) elle s'arrête à la 217ème ligne avec un message d'erreur : "dépassement de capacité" et en débogage la ligne idx = idx + 1 est en surbrillance
    est-ce qu'il n'y aurait pas une limite à #32 000 caractères ?

    pour être complet c'est 37 et non pas 15, mais là j'ai modifié la macro et c'est tout bon
    par contre je dois obtenir environ 4500 lignes à partir du txt soit # 700 000 caractères

    si tu as une idée

    encore merci
    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour tout le monde,

    met Dim idx As long au lieu de Dim idx As Integer
    0
  4. UsulArrakis Messages postés 7683 Statut Contributeur 3 196
     
    YESSSSSSSSSSSSSSSSS !

    nickel eriiic

    un grand merci à vous 2

    donc voici la macro qui fonctionne parfaitement dans mon cas :

    Public Sub txt_37col()
    Dim lig As Long     ' ligne
    Dim col As Integer  ' colonne
    Dim art As String   ' article lu
    Dim cel As String   ' valeur cellule
    Dim fic As String   ' chemin fichier
    Dim idx As Long     ' index caractère
    fic = Application.GetOpenFilename("Textes,*.txt")
    Open fic For Input As #1    ' ouvre fichier texte
    lig = 3                     ' ligne début
    Do
        Input #1, art           ' lecture
        idx = 0                 ' initiatisation index
        While idx < Len(art)    ' boucle mongueur article
            For col = 1 To 37   ' 37 colonnes
                cel = ""        ' initiatisation cellule
                Do
                    idx = idx + 1
                    If Mid(art, idx, 1) = ";" Then Exit Do
                    cel = cel & Mid(art, idx, 1)
                Loop While idx < Len(art)
                Cells(lig, col).Value = cel ' valorisation cellule
            Next col
            lig = lig + 1       ' changement de ligne
        Wend
    Loop While Not EOF(1)
    Close #1
    End Sub

    0