Bonjour !
Je pensais être débarrassé des problèmes de format dans mes documents Excel ; tout semblait fonctionner dans mes tests, mais là je me retrouve à nouveau confronté à une erreur de format qui transforme une valeur extrêmement petite (0,000005261) en valeur extrêmement grande (526 134 127,21).
La conversion se fait via ce code, proposé par ric ; qui fait très bien l'affaire :
Set ws = Worksheets("CSV")
Set ws2 = Worksheets("VNEI (EI)")
With ws2
lrws2 = .Cells(Rows.Count, 2).End(xlUp).Row
Dim cL As Range
For Each cL In .Range(Cells(2, 4), Cells(lrws2, 4))
cL = Replace(cL, ".", ",") ' remplacer le . par la ,
cL = cL / 10 ' diviser la donnée par 10
cL.NumberFormat = "#,##0.00" ' mettre le format
cL = cL * 10 ' multiplier par 10 pour rétablir le data
Next cL
Le problème vient peut-être de l'import des données. Elles sont récupérées depuis une source de données CSV ; pour être utilisées dans mon document Excel. Si je procède à un simple "copier-coller" des données de la feuilles CSV vers mon document Excel, alors je n'ai pas ce problème ! Savez-vous où se créée cette erreur?
Le code, au cas où :
Private Sub cmdAlimLesCasesFeuille_Click()
Dim r As Long, c As Long, a As Long, b As Long, f As Long, lrws As Long
Dim ws As Worksheet
Set ws = Worksheets("CSV")
r = ws.Cells(Rows.Count, 34).End(xlUp).Row
c = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(r, c)).ClearContents
Dim mypath As String
Dim myfile As String
Application.FileDialog(msoFileDialogFilePicker).Show
myfile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & myfile, _
Destination:=Range("$A$1"))
.TextFileCommaDelimiter = True
.TextFilePlatform = 65001
.TextFileDecimalSeparator = ","
.Refresh
End With
UserForm2.Hide
Dim e As Range
For Each e In Range(Cells(2, 36), Cells(r, 36))
If e.HasFormula Then e.Value = Replace(e.Formula, "=", "'")
Next e
'lrws = ws.Cells(Rows.Count, 1).End(xlUp).Row
'ws.Range(Cells(2, 45), Cells(lrws, 45)).TextToColumns Destination:=ws.Range(Cells(2, 45), Cells(lrws, 45)), DataType:=xlDelimited
Unload UserForm2
End Sub
J'ai la solution, qui serait de supprimer les lignes où les valeurs extrêmement petites (car issues de traitements automatisés sur un logiciel de cartographie) ; mais j'aimerais bien savoir si vous sauriez d'où peut bien provenir ce problème (et éviter qu'il réapparaisse sous d'autres formes) !
Je joins un petit fichier Excel qui illustre bien se qui se passe.
Merci de votre attention
Bon après midi !