Csv en xlsx, problème décimale
Résolu
Quoi29
Messages postés
22
Statut
Membre
-
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:
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.
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:
- Csv en xlsx, problème décimale
- Comment ouvrir un fichier xlsx ? - Guide
- Xlsx viewer - Télécharger - Tableur
- Convertir xls en xlsx - Télécharger - Suite bureautique
- Libreoffice xlsx - Guide
- Tabulation décimale word - Guide
4 réponses
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/
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
Ajouter la ligne ci-dessous ne change pas le problème non plus
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=","
Bonjour,
Lorsque j'utilise le tool d'importation d'Excel cela fonctionne mais
Y a qu'a utiliser l'enregistreur de macro!!!!
Lorsque j'utilise le tool d'importation d'Excel cela fonctionne mais
Y a qu'a utiliser l'enregistreur de macro!!!!
Bonjour f894009,
Lorsque j'utilise le tool d'importation excel voici le code qu'il ressort:
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:
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
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:
par:
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)