Csv en xlsx, problème décimale

Résolu/Fermé
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019 - Modifié le 30 avril 2018 à 15:36
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019 - 3 mai 2018 à 11:13
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.
A voir également:

4 réponses

Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
30 avril 2018 à 15:49
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
30 avril 2018 à 15:50
Bonjour,

Lorsque j'utilise le tool d'importation d'Excel cela fonctionne mais
Y a qu'a utiliser l'enregistreur de macro!!!!
0
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
Modifié le 30 avril 2018 à 17:04
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
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
2 mai 2018 à 16:08
Bonjour,
Je suis toujours bloqué avec mon problème. Personne pour m'aider?
0
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
3 mai 2018 à 11:13
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