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-E] modifier un fichier texte avant import


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut [VBA-E] modifier un fichier texte avant import
    Bonjour a tous

    J'aimerai savoir s'il est possible de parcourir un fichier csv à partir d'excel sans pour autant l'importer.

    Je m'explique, j'ai un fichier csv qui contient des retours chariot qui me cause des problèmes en import. Je souhaite donc les supprimer avant.

    Ex de ligne:

    Col1 Col2 ... Col6
    _BQ Dupont blablabla
    _FI Durand blablabla
    blabla
    _FZ Toto blablablabla


    J'ai bien essayé avec la méthode Open pour supprimer les chr(10) pour les lignes qui ne commence pas par "_" mais celle ci me vide le fichier ?

    En definitif je doit avoir un truc du genre

    Col1 Col2 ... Col6
    _BQ Dupont blablabla
    _FI Durand blablablablabla
    _FZ Toto blablablabla


    Si quelqu'un a une solution

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir Hka75,

    Je pense la méthode Open est la bonne.
    Mais à mon avis il faut ouvrir votre fichier en lecture et ouvir un fichier vide en écriture.

    Vous affectez les données valides à des variables puis les écrivez dans le nouveau fichier.

    Open "c:\xxxx\yyyy.csv" For Input As #1

    Open "c:\xxxx\zzzz.csv" For Output As #1

    Amicalement.

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Un vrai csv ne te poserait pas ce problème. Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub LectureDunFichierTexte()
        Open "d:\txt\fichier.csv" For Input As #1
        Do While Not EOF(1)
            Line Input #1, ligne
            MsgBox ligne
        Loop
        Close #1
    End Sub
    Si ta ligne est trop longue, et que le msgbox t'empêche de voir les coupures, colle-la dans une cellule.
    Après tu nous dis
    A+

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    J'ai tenter de supprimer se f... caractére mais rien à faire

    j'utilise le code suivant qui balaye la zone, mais ne supprime pas le retour à ligne.
    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
     
    Public Sub ImportTextFile(FName As String, Sep As String)
     
    Dim RowNdx As Long
    Dim ColNdx As Integer
    Dim TempVal As Variant
    Dim WholeLine As String
    Dim Pos As Integer
    Dim NextPos As Integer
    Dim SaveColNdx As Integer
     
    Application.ScreenUpdating = False
    'On Error GoTo EndMacro:
    Range("A1").Select
    SaveColNdx = ActiveCell.Column
    RowNdx = ActiveCell.Row
    Close
    Open FName For Input Access Read As #1
     
    While Not EOF(1)
        Line Input #1, WholeLine
        If Right(WholeLine, 1) <> Sep Then
            WholeLine = WholeLine & Sep
        End If
        ColNdx = SaveColNdx
        Pos = 1
        NextPos = InStr(Pos, WholeLine, Sep)
        While NextPos >= 1
            TempVal = Mid(WholeLine, Pos, NextPos - Pos)
            Cells(RowNdx, ColNdx).Value = TempVal
            Pos = NextPos + 1
            ColNdx = ColNdx + 1
            Z = Cells(RowNdx, 1).Value
            If Left(Z, 1) <> "_" Or Left(Z, 2) <> "AS" Then
            A = Replace(Z, chr(10), "|")
            End If
     
            NextPos = InStr(Pos, WholeLine, Sep)
     
        Wend
        RowNdx = RowNdx + 1
    Wend
     
    EndMacro:
    On Error GoTo 0
    Application.ScreenUpdating = True
    Close #1
     
    End Sub

    J'essai de remplacer le retour par un caractére bidon ( "|"), histoire de voir si ça fonctionne.


    Help

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as essayé ce que je t'ai dit ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Oui, j'ai fait le test, mais je ne vois pas où tu veut en venir.

    Ton code retourne l'intégralité de mon fichier csv, ligne par ligne.


    Je me suis peut etre mal exprimé mais ce que je souhaite faire , c'est le traiter avant import .

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Alors je me suis mal exprimé. Ce que j'aimerais savoir c'est si tu as, comme dans ton exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Col1		Col2		Col6
    _BQ		Dupont		blablabla
    _FI		Durand		blablabla
    blabla
    _FZ		Toto		blablablabla
    ou si tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Col1		Col2		Col6
    _BQ		Dupont		blablabla
    _FI		Durand		blablablablabla
    _FZ		Toto		blablablabla
    Et ça, pour le savoir, je te demandais d'insérer tes lignes dans une feuille de calculs Excel, juste pour voir. Si la totalité de ta ligne "Durant" se trouve dans la 1ère cellule de la feuille, alors ton problème est ailleurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub LectureDunFichierTexte()
    Dim i
        Open "d:\txt\fichier.csv" For Input As #1
        Do While Not EOF(1)
            Line Input #1, ligne
            i = i+1
            Cells(i,1).value = ligne
        Loop
        Close #1
    End Sub
    Pourquoi je te demande ça ? Parce que je n'ai jamais vu de csv faire ce que tu as observé.
    Un fois le test fait, j'ai une solution si tu as effectivement un caractère indésirable mais comme je ne la considère pas comme infaillible, je préfèrerais que le problème vienne "d'ailleurs"
    Elle consisterait, cette solution, à vérifier le nombre de mots dans une ligne et si ce nombre = 1, alors le mot va sur la ligne du dessus... Un bricollage !
    Retirer les sauts de ligne en est un autre car sans saut de ligne, tu as des lignes qui font tout le fichier
    A+

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    En fait, j'ai le problème suivant:

    Col1 Col2 Col6
    _BQ Dupont blablabla
    _FI Durand blablabla
    blabla
    _FZ

    Ce que je cherche à faire, c'est de remonter sur la ligne du dessus les commentaires qui ne commence pas par "_".

    L'idée consiste à traiter le fichier à l'aide d'excel, et de l'importer ensuite.

    merci beaucoup pour vos réponses.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Alors c'est simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub LectureDunFichierTexte()
    Dim i
        Open "d:\txt\fichier.csv" For Input As #1
        Do While Not EOF(1)
            Line Input #1, ligne
            if instr(ligne,"_") = 1 then
                i = i + 1
                Cells(i,1).value = ligne
             else
                Cells(i,1).value = Cells(i,1).value & ligne
            endif            
        Loop
        Close #1
    End Sub
    A+

    NB - Si tu veux créer un tableau intermédiaire, rien ne t'en empêche, le principe reste le même.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse,

    je vais faire les modifs pour récuperer l'ensemble des colonnes.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour ça le plus pratique est de passer par un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Tableau()
        Do While Not EOF(1)
            Line Input #1, ligne
            if instr(ligne,"_") = 1 then
                i = i + 1
                Redim Preserve Tableau(i)
                Tableau(i) = ligne
             else
                Tableau(i) = Tableau(i) & ligne
            endif            
        Loop

    Et pour placer les données dans les colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For NoLigne = 1 to Ubound(Tableau)
        LesColonnes = Split(Tableau(NoLigne)," ") 'séparateur Espace
        For NoCol = 0 tu Ubound(LesColonnes)
             Cells(NoLigne, NoCol+1).value = LesColonnes(NoCol)
        Next
    Next
    Mais tu as peut-être pensé à une autre méthode

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    je passe également par un tableau.

    Merci encore pour le coup de main et pour les précisions

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

Discussions similaires

  1. Comment en VBA modifier un fichier texte sans l'ouvrir dans Excel ?
    Par shadok6 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/10/2008, 13h54
  2. Comment analyser et modifier un fichier texte (Microsoft Query) via VBA
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 24/06/2008, 11h19
  3. [VBA-E] Lire un fichier texte
    Par Lnmex dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2006, 19h33
  4. comment utiliser Notepad pour modifier un fichier texte?
    Par moon13_698 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 06/05/2006, 15h41
  5. [VBA-E] Derniere ligne fichier texte
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 72
    Dernier message: 13/04/2006, 12h07

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