Csv en xlsx, problème décimale

Résolu
Quoi29 Messages postés 22 Statut Membre -  
Quoi29 Messages postés 22 Statut Membre -
Bonjour à vous les experts! ^^'

Me voici bien embéter dû à un problème de conversion csv en xlsx (coder en VBA) qui me converti mal mes nombres décimales. Auriez-vous une idée de l'origine de l'erreur? Je vous en serez très reconnaissant =) =)

Voici des infos ci-dessous pour mieux comprendre mon problème.
Merci beaucoup,
Cordialement

Mon code VBA:

Private Sub OK_Click()

Dim S As String 'Creation of the variable S to store text

Dim Homer As Object
Dim Folder As Object
Dim Import As Object

S = Uimp.Source.Value 'Store Source in S

Set Homer = CreateObject("Scripting.FileSystemObject")
Set csvFolder = Homer.GetFolder(S)

If Homer.FolderExists(S) = False Then
        Homer.createFolder (S)
End If

Set xlsFolder = Homer.GetFolder(S)

With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .UseSystemSeparators = True
End With

For Each Import In csvFolder.Files
        If LCase(Right(Import.Name, 3)) = "csv" Then
                Set activeImport = Workbooks.Open(Import)
                activeImport.SaveAs Filename:=S & "\" & Left(activeImport.Name, Len(activeImport.Name) - 3) & "xlsx", FileFormat:=xlOpenXMLWorkbook
                Uimp.DocName.Caption = Left(activeImport.Name, Len(activeImport.Name) - 5)
                activeImport.Close True
        End If
Next

With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
End With

Uimp.Com.Caption = "Conversion from csv to xlsx done. Following document created: "

Calc.Locked = False

End Sub


Voici quelques infos supplémentaires:

Excel Parameter

CSV File ouvert avec Editor:

CSV File ouvert avec Excel:

xlsx File ouvert avec Excel:


Lorsque j'utilise le tool d'importation d'Excel cela fonctionne mais je souhaiterais le faire en VBA (automatiser le processus).

En y regardant de plus prêt, on peut remarquer que des fois il ignore la virgule. Le nombre 10,32 devient 1 032.

4 réponses

  1. Quoi29 Messages postés 22 Statut Membre
     
    En essayant la solution proposée ici j'ai le même problème (non prise en compte de la virgule): https://www.developpez.net/forums/d554988/logiciels/microsoft-office/excel/macros-vba-excel/vba-conversion-xls-csv-point-virgule/


    For Each Import In csvFolder.Files
    If LCase(Right(Import.Name, 3)) = "csv" Then
    Set activeImport = Workbooks.Open(Import)
    activeImport.SaveAs Filename:=S & "\" & Left(activeImport.Name, Len(activeImport.Name) - 3) & "xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, Local:=True
    Uimp.DocName.Caption = Left(activeImport.Name, Len(activeImport.Name) - 5)
    activeImport.Close savechanges:=False
    End If
    Next



    En esseyant la solution proposé ici cela ne me solutionne pas mon problème non plus:
    https://www.herber.de/forum/archiv/948to952/950069_Punkt_statt_Komma.html

    Supprimer la ligne ci-dessous ne change rien au problème
    .UseSystemSeparators = True

    Ajouter la ligne ci-dessous ne change pas le problème non plus
    .DecimalSeparator=","
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Lorsque j'utilise le tool d'importation d'Excel cela fonctionne mais
    Y a qu'a utiliser l'enregistreur de macro!!!!
    0
    1. Quoi29 Messages postés 22 Statut Membre
       
      Bonjour f894009,

      Lorsque j'utilise le tool d'importation excel voici le code qu'il ressort:

      Workbooks.Add
      ActiveWorkbook.Queries.Add Name:=Import, Formula:= _
      "let" & Chr(13) & "" & Chr(10) & " Quelle = Csv.Document(File.Contents(""U:\Box Sync\Hybrid (internal)\01_Tools\05_Ecoflow\Work for Hybrid Report recuperation\VBA Import tool\Import test\V1.csv"""),[Delimiter="","", Columns=37, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"" = Table.TransformColumnTypes(Quelle,{{""Column1"", type text}, {""Column2"", type text}, {""Colum" & _
      "n3"", type text}, {""Column4"", type text}, {""Column5"", type text}, {""Column6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Column11"", type text}, {""Column12"", type text}, {""Column13"", type text}, {""Column14"", type text}, {""Column15"", type text}, {""Column16"", type text}, {""Co" & _
      "lumn17"", type text}, {""Column18"", type text}, {""Column19"", type text}, {""Column20"", type text}, {""Column21"", type text}, {""Column22"", type text}, {""Column23"", type text}, {""Column24"", type text}, {""Column25"", type text}, {""Column26"", type text}, {""Column27"", type text}, {""Column28"", type text}, {""Column29"", type text}, {""Column30"", type te" & _
      "xt}, {""Column31"", type text}, {""Column32"", type text}, {""Column33"", type text}, {""Column34"", type text}, {""Column35"", type text}, {""Column36"", type text}, {""Column37"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"""
      ActiveWorkbook.Worksheets.Add
      With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
      "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=V1;Extended Properties=""""" _
      , Destination:=Range("$A$1")).QueryTable
      .CommandType = xlCmdSql
      .CommandText = Array("SELECT * FROM [V1]")
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = True
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .PreserveColumnInfo = True
      .ListObject.DisplayName = "_V1"
      .Refresh BackgroundQuery:=False
      End With
      Windows("New Ecoflow (in design).xlsm").Activate


      Afin que le fichier soit sélectionner en fonction de ce que rentre l'utilisateur comme adresse, j'ai essayé de le modifier de la facon suivante mais cela ne fonctionne pas:


      If Version = 1 Then
      Imput = Uimp.V1.Value
      Else
      Imput = Uimp.V2.Value
      End If

      S = Uimp.Source.Value

      Workbooks.Add
      ActiveWorkbook.Queries.Add Name:=Imput, Formula:= _
      "let" & Chr(13) & "" & Chr(10) & " Quelle = Csv.Document(File.Contents(S & "\" & Imput & ".csv"),[Delimiter="","", Columns=37, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"" = Table.TransformColumnTypes(Quelle,{{""Column1"", type text}, {""Column2"", type text}, {""Colum" & _
      "n3"", type text}, {""Column4"", type text}, {""Column5"", type text}, {""Column6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Column11"", type text}, {""Column12"", type text}, {""Column13"", type text}, {""Column14"", type text}, {""Column15"", type text}, {""Column16"", type text}, {""Co" & _
      "lumn17"", type text}, {""Column18"", type text}, {""Column19"", type text}, {""Column20"", type text}, {""Column21"", type text}, {""Column22"", type text}, {""Column23"", type text}, {""Column24"", type text}, {""Column25"", type text}, {""Column26"", type text}, {""Column27"", type text}, {""Column28"", type text}, {""Column29"", type text}, {""Column30"", type te" & _
      "xt}, {""Column31"", type text}, {""Column32"", type text}, {""Column33"", type text}, {""Column34"", type text}, {""Column35"", type text}, {""Column36"", type text}, {""Column37"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"""
      ActiveWorkbook.Worksheets.Add
      With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
      "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=V1;Extended Properties=""""" _
      , Destination:=Range("$A$1")).QueryTable
      .CommandType = xlCmdSql
      .CommandText = Array("SELECT * FROM [V1]")
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = True
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .PreserveColumnInfo = True
      .ListObject.DisplayName = "_V1"
      .Refresh BackgroundQuery:=False
      End With
      Windows("New Ecoflow (in design).xlsm").Activate
      0
  3. Quoi29 Messages postés 22 Statut Membre
     
    Bonjour,
    Je suis toujours bloqué avec mon problème. Personne pour m'aider?
    0
  4. Quoi29 Messages postés 22 Statut Membre
     
    EUREKA!!

    Suite à différentes manipulations j'en ai conclu que l'erreur était étroitement lié à l'interprétation (langage) de VBA. En effet lorsque j'utilisais l'enregistreur de macro pour lui dire de copier coller les valeurs du fichier csv, manuellement cela fonctionnait mais pas lorsque je faisais tourner la macro enregistré lors de cette même manipulation. De plus, la seule chose qui marchait c'est lorsque j'utilisais le tool excel par la macro (ce qui est donc fait par excel et non VBA qui se charge juste de lancer le tool excel).
    Suite à de nombreux sites et forums lus j'ai trouvé le lien suivant qui m'a sauvé (hallelujah): https://docs.microsoft.com/en-us/office/vba/api/Excel.Workbooks.Open
    grâce à l'information suivante

    J'ai changé la ligne:
    Set activeImport = Workbooks.Open(Import)

    par:
    Set activeImport = Workbooks.Open(Import, , , , , , , , , , , , , True)
    0