[VBA EXCEL] - Modifier document texte

Bonjour,

j'utilise vba sous office 2010 et je viens d'écrire une macro permettant de modifier un document texte et l'enregistrer par la suite (le doc est ouvert en excel)
le seul problème c'est qu'il y a des guillemets qui sont généré automatiquement sur chaque ligne du document final
j'ai essayé de parcourir le fichier et les supprimer mais bizarrement vba ne les détecte pas
si je fais left(ligne,1) ou right(ligne,1) je n'ai pas le caractère guillemet qui est renvoyé mais plutôt un caractère appartenant aux données que j'ai inséré dans le fichier

ci-dessous le code

merci
c'est cette partie qui pose problème

Cells(i, "J") = Cells(i, "A") & ";" & _
            Cells(i, "B") & ";" & _
            Format(Cells(i, "C"), "000000") & ";" & _
            Cells(i, "D") & ";" & _
            Cells(i, "E") & ";" & _
            Cells(i, "F") & ";" & _
            Cells(i, "H")
            

cette chaîne se met automatiquement entre " " et je n'arrive pas à le faire disparaitre

2 réponses

  1. Voici le fichier .txt d'entrée :

    CA;706101;070714;C;174,80;Produit;10;Ville1;HT
    CA;706101;150714;C;1093,80;Produit;10;Ville2;HT
    CA;706101;150714;C;1179,00;Produit;10;Ville1;HT
    CA;445715;070714;C;174,80;TVA Produit A 10%;10;Ville1;TVA
    CA;445715;150714;C;1093,80;TVA Produit A 10%;10;Ville2;TVA
    CA;445715;150714;C;1179,00;TVA Produit A 10%;10;Ville1;TVA

    voici ce que je reçois en sortie txt aussi :

    "CA;706101;070714;C;158,18;Produit;Ville1"
    "CA;706101;150714;C;993,64;Produit;Ville2"
    "CA;706101;150714;C;1071,82;Produit;Ville1"
    "CA;445715;070714;C;15,82;TVA Produit A 10%;Ville1"
    "CA;445715;150714;C;99,36;TVA Produit A 10%;Ville2"
    "CA;445715;150714;C;107,18;TVA Produit A 10%;Ville1"
    "CA;531000;070115;D;2446,00;Banque;SOCIETE1"

    Mon problème c'est les guillemets, le bizzare c'est que si je l'affiche en msgbox les guillemets n'apparaissent plus.

    On Error Resume Next
    Dim NomSociete As String
    Dim Somme As Double
    Dim Jour As String, Mois As String, Annee As String
    Somme = 0
    Jour = Format(Date, "dd")
    Mois = Format(Date, "mm")
    Annee = Format(Date, "yy")
    
        'adapté selon la nouvelle mise en page du fichier excel
        FolderSave = Cells(WorksheetFunction.Match("FolderSaveSociete1", Columns(2), 0), 3)
        
        'Ouvrir fichier à traiter
        If Not ThisWorkbook.Sheets(1).Range("C2").Value = "" Then
        ChDir (ThisWorkbook.Sheets(1).Range("C2").Value)
        End If
        chemin_bdxls = Application.GetOpenFilename("Fichier texte (*.txt), *.txt", , "Fichier d'export à traiter:")
        If chemin_bdxls = faux Then Exit Sub
        Workbooks.OpenText Filename:=chemin_bdxls, Origin:= _
            xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
            Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 4), _
            Array(2, 1), Array(3, 1))
                
        'Traiter les données
        NomSociete = Mid(chemin_bdxls, InStr(chemin_bdxls, "(") + 1, InStr(chemin_bdxls, ")") - InStr(chemin_bdxls, "(") - 1)
           'le nom de la societe est compris entre deux parenthèse
           'alors on dégage les caractères qui sont entre les parenthèses
           'du nom du fichier texte
        ThisWorkbook.Sheets(1).Range("A2").Value = NomSociete
        ThisWorkbook.Sheets(1).Range("C2").Value = ActiveWorkbook.Path & Application.PathSeparator
            lfin = WorksheetFunction.CountA(Columns(1))
        For i = 1 To lfin
            Cells(i, "E").Select
            If Cells(i, "I") = "TVA" Then
                'TVA
                HT = VBA.Val(Cells(i, "E")) / (1 + (VBA.Val(Cells(i, "G")) / 100))
                Cells(i, "E") = Format(CDec(VBA.Val(Cells(i, "E")) - HT), "0.00")
            Else
                'HT
                Cells(i, "E") = Format(CDec(VBA.Val(Cells(i, "E")) / (1 + (VBA.Val(Cells(i, "G")) / 100))), "0.00")
            End If
            Somme = Somme + (Cells(i, "E").Value) 'la somme à insérer à la fin du fichier
            Cells(i, "J") = Cells(i, "A") & ";" & _
                Cells(i, "B") & ";" & _
                Format(Cells(i, "C"), "000000") & ";" & _
                Cells(i, "D") & ";" & _
                Cells(i, "E") & ";" & _
                Cells(i, "F") & ";" & _
                Cells(i, "H")
        Next i
        'insertion de la dernière ligne
        Cells(i, "J") = "CA;531000;" & Jour & Mois & Annee & ";D;" & Format(Somme, "0.00") & ";Banque;" & NomSociete
        
        Columns("A:I").Delete
        
        'Enregistrer les modifs
        Dim ObjFso As Object
        Set ObjFso = CreateObject("Scripting.FileSystemObject")
        'objet permettant la manipulation des fichiers et repertoires
            If Not (Dir(chemin_bdxls & ".old") = "") Then
        ObjFso.copyfile chemin_bdxls, chemin_bdxls & ".old" & " " & Format(Date, "dd-mm-yyyy")
        Else
        ObjFso.copyfile chemin_bdxls, chemin_bdxls & ".old"
        End If
        'copie le fichier texte d'origine en le renommant .old
        'et s'il existe déjà, on rajoute la date à la fin
        'cette condition permet d'éviter d'écraser les anciens fichiers
        
        BDxls = ElementDeText(chemin_bdxls, "\", 1, "D")
        Workbooks(BDxls).Save 'As FolderSave & "\" & BDxls
        ActiveWorkbook.Close False
        
        If Err <> 0 Then
        MsgBox "une erreur s'est produite", vbExclamation + vbOKOnly, "Erreur"
            Else
        MsgBox "Traitement effectué avec succès", vbOKOnly, "Succès"
        End If
    1. Quelqu'un peut m'aider ?
    2. Modérateur
      @BigBagProofEn ajoutant une étape supplémentaire à la fin de ton script pour supprimer les doubles quotes peut être...

      On Error Resume Next
      Dim NomSociete As String
      Dim Somme As Double
      Dim Jour As String, Mois As String, Annee As String
      Somme = 0
      Jour = Format(Date, "dd")
      Mois = Format(Date, "mm")
      Annee = Format(Date, "yy")
      
          'adapté selon la nouvelle mise en page du fichier excel
          FolderSave = Cells(WorksheetFunction.Match("FolderSaveSociete1", Columns(2), 0), 3)
          
          'Ouvrir fichier à traiter
          If Not ThisWorkbook.Sheets(1).Range("C2").Value = "" Then
          ChDir (ThisWorkbook.Sheets(1).Range("C2").Value)
          End If
          chemin_bdxls = Application.GetOpenFilename("Fichier texte (*.txt), *.txt", , "Fichier d'export à traiter:")
          If chemin_bdxls = faux Then Exit Sub
          Workbooks.OpenText Filename:=chemin_bdxls, Origin:= _
              xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
              xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
              Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 4), _
              Array(2, 1), Array(3, 1))
                  
          'Traiter les données
          NomSociete = Mid(chemin_bdxls, InStr(chemin_bdxls, "(") + 1, InStr(chemin_bdxls, ")") - InStr(chemin_bdxls, "(") - 1)
             'le nom de la societe est compris entre deux parenthèse
             'alors on dégage les caractères qui sont entre les parenthèses
             'du nom du fichier texte
          ThisWorkbook.Sheets(1).Range("A2").Value = NomSociete
          ThisWorkbook.Sheets(1).Range("C2").Value = ActiveWorkbook.Path & Application.PathSeparator
              lfin = WorksheetFunction.CountA(Columns(1))
          For i = 1 To lfin
              Cells(i, "E").Select
              If Cells(i, "I") = "TVA" Then
                  'TVA
                  HT = VBA.Val(Cells(i, "E")) / (1 + (VBA.Val(Cells(i, "G")) / 100))
                  Cells(i, "E") = Format(CDec(VBA.Val(Cells(i, "E")) - HT), "0.00")
              Else
                  'HT
                  Cells(i, "E") = Format(CDec(VBA.Val(Cells(i, "E")) / (1 + (VBA.Val(Cells(i, "G")) / 100))), "0.00")
              End If
              Somme = Somme + (Cells(i, "E").Value) 'la somme à insérer à la fin du fichier
              Cells(i, "J") = Cells(i, "A") & ";" & _
                  Cells(i, "B") & ";" & _
                  Format(Cells(i, "C"), "000000") & ";" & _
                  Cells(i, "D") & ";" & _
                  Cells(i, "E") & ";" & _
                  Cells(i, "F") & ";" & _
                  Cells(i, "H")
          Next i
          'insertion de la dernière ligne
          Cells(i, "J") = "CA;531000;" & Jour & Mois & Annee & ";D;" & Format(Somme, "0.00") & ";Banque;" & NomSociete
          
          Columns("A:I").Delete
          
          'Enregistrer les modifs
          Dim ObjFso As Object
          Set ObjFso = CreateObject("Scripting.FileSystemObject")
          'objet permettant la manipulation des fichiers et repertoires
              If Not (Dir(chemin_bdxls & ".old") = "") Then
          ObjFso.copyfile chemin_bdxls, chemin_bdxls & ".old" & " " & Format(Date, "dd-mm-yyyy")
          Else
          ObjFso.copyfile chemin_bdxls, chemin_bdxls & ".old"
          End If
          'copie le fichier texte d'origine en le renommant .old
          'et s'il existe déjà, on rajoute la date à la fin
          'cette condition permet d'éviter d'écraser les anciens fichiers
          
          BDxls = ElementDeText(chemin_bdxls, "\", 1, "D")
          Workbooks(BDxls).Save 'As FolderSave & "\" & BDxls
          ActiveWorkbook.Close False
      
      ' ------------------- Suppr des doubles quotes --------------------------
          Filename = StrReverse(chemin_bdxls)
          '~~> Read the entire file in 1 Go!
          Open Filename For Binary As #1
          MyData = Space$(LOF(1))
          Get #1, , MyData
          Close #1
          strData = Split(MyData, vbCrLf)
      
          '~~> Get a free file handle
          filesize = FreeFile()
      
          '~~> Open your file
          Open Filename For Output As #filesize
      
          For i = LBound(strData) To UBound(strData)
              entireline = Replace(strData(i), """", "")
              '~~> Export Text
              Print #filesize, entireline
          Next i
      
          Close #filesize
      
        
          If Err <> 0 Then
          MsgBox "une erreur s'est produite", vbExclamation + vbOKOnly, "Erreur"
              Else
          MsgBox "Traitement effectué avec succès", vbOKOnly, "Succès"
          End If
      
    3. @BigBagProofBonjour,

      c'est le format de votre fichier txt qui ressemble a un fichier csv qui pose probleme

      une solution possible

      remplacez cette ligne
      Workbooks(BDxls).Save


      par celle-ci, mais l'extention sera .prn pas .txt
      Workbooks(BDxls).SaveAs FileFormat:=xlTextPrinter
  2. Modérateur
    Bonjour,

    cette chaîne se met automatiquement entre " "

    Où vois tu ces guillemets ? dans le document excel en cours ou une fois le document text généré ?

    une macro permettant de modifier un document texte

    De quel format est ton fichier text ? cela ressemble à du CSV.

    Es-tu sûr que le souci vient de ta ligne de code ?
    Décomposes là et ajoutes un petit debug pour savoir ce qu'elle te génère
    Dim newString as String
    newString = Cells(i, "A") & ";" & _
                Cells(i, "B") & ";" & _
                Format(Cells(i, "C"), "000000") & ";" & _
                Cells(i, "D") & ";" & _
                Cells(i, "E") & ";" & _
                Cells(i, "F") & ";" & _
                Cells(i, "H")
    debug.print ("Ligne :" & i & " => " & newString)
    Cells(i, "J") = newString
    
    


    A la limite.. postes nous un exemplaire de ton fichier excel (contenant ta macro) avec éventuellement quelques données tests pour que l'on puisse analyser ça.
    Tu peux le déposer sur le site : www.cijoint.com et nous coller le lien ici.