Problème format nombre et enregistrement csv
Bonjour,
J'ai encore un souci...
J'ai une macro qui filtre une plage de données. Cette plage contient des nombres longs (17 caractères ou plus). J'exporte cette plage dans une nouvelle feuille. Je crée un nouveau classeur avec cette feuille. J'enregistre en csv séparateur point virgule. Quand j'ouvre mon fichier ( auquel je change l'extension en txt), mes nombres sont à exponsant... Type 3,453E+11....
Comment avoir le texte exact d'une cellule apres enregistrement en csv ??
Merci de vos réponses et éclaircissements !
Cordialement,
Innuendo67
Pourrais-tu joindre ton fichier ?
Bonsoir.
Je joindrais le code demain. Je précise que lorsque je fais les opérations manuellement, tout fonctionne. Les nombres sont sans exposants... Je ne comprends pas.
Merci.
Bonjour,
comme promis voici les codes:
le premier ouvre à l'ouverture du classeur un .txt séparateur point virgule de plusieurs centaines de milliers de lignes:
Private Sub Workbook_Open()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim CLR As Workbook
Dim ONR As Worksheet
Dim CH As String
Dim F As String
Dim CLD As Workbook
Dim OND As Worksheet
Dim wb As Workbook, ok As Boolean
Set CLR = ThisWorkbook
CH = CLR.Path & "\TEST A TRAITER\"
F = Dir(CH & "test*.txt")
While F <> ""
Workbooks.OpenText Filename:=CH & F, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 2), Array(15 _
, 1), Array(16, 2), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 2), Array(21, 2), _
Array(22, 1), Array(23, 1)), TrailingMinusNumbers:=True
Columns("N:N").Select
Selection.NumberFormat = "00000"
Columns("T:T").Select
Selection.NumberFormat = "00000"
Columns("V:V").Select
Selection.NumberFormat = "00000"
Columns("U:U").Select
Selection.NumberFormat = "00000"
Columns("P:P").Select
Selection.NumberFormat = "00000"
Range("B4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "mm/dd/yyyy hh:mm:ss"
F = Dir()
Wend
For Each wb In Workbooks
If wb.Name Like "mise en forme test.xlsm" Then
wb.Activate
End If
Next wb
End Sub
Le second fait toute la partie séparation de ces centaines de milliers de lignes en plusieurs fichiers plus petits. Certaines cellules contiennent des nombres très longs et donc à la fin de la procédure d'enregistrement, ces nombres contiennent des exposants...
Sub separation()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim nomfichier As String
Dim j As Variant
Dim i As Integer
Dim wb As Workbook, ok As Boolean
For Each wb In Workbooks
If wb.Name Like "test.*.txt" Then
wb.Activate
End If
Next wb
Range("B4").Select
i = Range("B4", Selection.End(xlDown)).Cells.Count / 50000
Dim nbonglets As Integer
'nbonglets = i / 1000
nbonglets = i
For j = 1 To nbonglets
Rows("1:3").Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Rows("1:1").Select
ActiveSheet.Paste
Sheets(Sheets.Count - j).Select
ActiveSheet.Range("$B$1:$B$500000").AutoFilter Field:=1, Criteria1:= _
"<" & Range("B" & j * 50000).Text, Operator:=xlAnd
ActiveSheet.AutoFilter.ApplyFilter
''''''''''''''''''
If Range("B" & j * 50000).Text = "" Then
Columns("B:B").Select
Selection.AutoFilter
End If
Columns("N:P").Select
Selection.NumberFormat = "0"
Columns("O:O").Select
Selection.NumberFormat = "0"
Columns("T:U").Select
Selection.NumberFormat = "0"
Columns("V:V").Select
Selection.NumberFormat = "0"
Rows("4:4").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets(Sheets.Count).Select
Rows("4:4").Select
ActiveSheet.Paste
Range("B4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
Next j
For Each wb In Workbooks
If wb.Name Like "test.*.txt" Then
wb.Activate
End If
Next wb
For Each wb In Workbooks
If wb.Name Like "test.*.txt" Then
wb.Activate
End If
Next wb
If Sheets.Count > 1 Then
Dim n As Variant
For n = 1 To Sheets.Count - 1
Sheets("Feuil" & n).Select
If Range("B4").Value = "" Then
ActiveWindow.SelectedSheets.Delete
End If
Dim dossierprincipal$
dossierprincipal = "C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\MONI\"
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss"))
If Dir("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss"), vbDirectory) <> "" Then
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\DONNEES")
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\GUY")
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\MONI")
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\AUTRES")
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\SIERRA")
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\ENREGISTREMENTS")
MkDir ("C:\Users\test\test\test" & Format(Now, " yyyy-mm-dd.hhmmss") & "\VICTOR")
End If
nomfichier = "test." & Format(Now, "yyyy-mm-dd.hhmm" & n & n) & ".txt"
Sheets("Feuil" & n).Select
Sheets("Feuil" & n).Move
ActiveWorkbook.SaveAs Filename:=dossierprincipal & nomfichier, _
FileFormat:=xlCSV, Local:=True, CreateBackup:=False
Columns("N:N").Select
Selection.NumberFormat = "0000"
Columns("O:O").Select
Selection.NumberFormat = "0000"
Columns("P:P").Select
Selection.NumberFormat = "0000"
Columns("T:T").Select
Selection.NumberFormat = "0000"
Columns("U:U").Select
Selection.NumberFormat = "0000"
Columns("V:V").Select
Selection.NumberFormat = "0000"
ActiveWorkbook.SaveAs , Local:=True
ActiveWindow.Close
Next n
Else
End If
For Each wb In Workbooks
If wb.Name Like "mise en forme test.xlsm" Then
wb.Activate
End If
Next wb
MsgBox "Traitement terminé."
End Sub
Vous reconnaitrez certains bouts de code qui appartiennent à des usagers de ce forum.
Mon code contient d'énormes lourdeurs (je ne suis pas un pro...) mais il s’exécute sans aucune erreur.
Merci de vos réponses car tout bloque à cause de ce petit détail...
Cordialement,
Innuendo67