Problème de conversion de données en texte suite à exportation en chiffres
Bonjour,
J'ai un petit souci de conversion de données qui après exportation sont stockées en texte et il faut que je les retraite en nombre.
Mon gros souci vient de la présence de date dans le fichier d'export.
J'ai bien testé plusieurs méthodes de conversion :
Méthode 1.
Sur l'onglet POSITION.
Le collage se fait en colonne C
Sheets("POSITION").Activate
With ActiveSheet
For Each cell In .UsedRange
If IsNumeric(cell) Then
cell.Value2 = cell.Value2 * 1
cell.NumberFormat = "0.00"
End If
Next cell
End With
Cette méthode fonctionne bien sauf que dans l'onglet où je colle ces données il y a deux colonnes de retraitement en A et B ce qui fait que la macro ne s'arrête jamais... mais point positif elle ne modifie pas les dates.
Sur l'onglet VL.
Le collage se fait en colonne A.
Sheets("VL").Activate
With ActiveSheet
For Each cell In .UsedRange
If IsNumeric(cell) Then
cell.Value2 = cell.Value2 * 1
cell.NumberFormat = "0.00"
End If
Next cell
End With
Pas de souci de macro qui ne s'arrêté pas mais elle me rajoute des lignes parasites à zéro
Il faudrait que je puisse borner le retraitement et qu'il se termine à la dernière ligne remplie.
Méthode 2
Sur l'onglet POSITION.
Sheets("POSITION").Activate
Range("C1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.NumberFormat = "0.00"
Selection.Value = Selection.Value
Fonctionne aussi mais flingue toutes mes dates et les transforme en nombre le problème c'est que les dates sont retraité en date anglaise mais lue comme étant française ayant à la base 04/06/2018 cela devient le 06/04/2018 ça je suis OK mais en comparant deux dates elle devient en fait 6 avril et non 4 juin.
Etant donné que le fichier a beaucoup de colonnes et peut avoir énormément de lignes ça rame beaucoup.
Mes fichiers en exemple sont des extraits des fichiers originaux pour le nombre de lignes.
J'espère que cela a été clair. Je veux seulement que toutes les données étant numériques deviennent des nombre et non plus des textes afin que les calculs fonctionnent et que les dates restent inchangées.
Merci d'avance pour votre aide.
Cordialement,
Anugraha.
Bonjour,
Une proposition à étudier.
ALT F8, exécuter la procédure.
A te relire.
Cdlt.
Public Sub Consolidate_data()
Dim wb As Workbook
Dim ws As Worksheet, ws2 As Worksheet
Dim lCol As Long, lastCol As Long, lRow As Long
Dim rCell As Range
Application.ScreenUpdating = False
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
On Error Resume Next
wb.Worksheets("TEST").Delete
On Error GoTo 0
ws.Copy after:=Worksheets(1)
Set ws2 = ActiveSheet
ws2.Name = "TEST"
With ws2
lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
For lCol = lastCol To 1 Step -1
lRow = .Cells(.Rows.Count, lCol).End(xlUp).Row
If lRow = 1 Then .Columns(lCol).Delete
Next lCol
lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
For lCol = 1 To lastCol
Set rCell = .Cells(lCol).End(xlDown)
Select Case True
Case IsDate(rCell):
.Columns(lCol).TextToColumns _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
FieldInfo:=Array(1, 4)
Case IsNumeric(Val(rCell)):
.Columns(lCol).TextToColumns _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
FieldInfo:=Array(1, 1), _
DecimalSeparator:=".", _
TrailingMinusNumbers:=False
End Select
Next lCol
End With
End Sub
Bonjour Jean-Eric.
Merci pour ton aide précieuse. Cela marche parfaitement.
J'ai rajouté deux petites lignes aux codes afin de recopier les données converties sur l'onglet original et supprimer l'onglet servant à la conversion.
Worksheets("TEST").Cells.Copy Destination:=Worksheets("POSITION J").Range("A1")
Worksheets("TEST").Delete
J'aurais sans doute l'occasion de te solliciter de nouveau car je m'intéresse de plus en plus au VBA.
Cordialement,
Anugraha.