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.

3test-vl.zip (4.32 Ko)
6test-position.zip (14.20 Ko)

Bonjour,

Une proposition à étudier.

ALT F8, exécuter la procédure.

A te relire.

Cdlt.

2test-position.zip (28.42 Ko)
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.

Rechercher des sujets similaires à "probleme conversion donnees texte suite exportation chiffres"