Problème de conversion de données en texte suite à exportation en chiffres

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
Anugraha
Jeune membre
Jeune membre
Messages : 14
Inscrit le : 22 mai 2018
Version d'Excel : 2010 FR

Message par Anugraha » 6 juin 2018, 10:21

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.
Test - POSITION.xls
(56 Kio) Téléchargé 4 fois
Test VL.xls
(23.5 Kio) Téléchargé 1 fois
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'379
Appréciations reçues : 670
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 6 juin 2018, 21:59

Bonjour,
Une proposition à étudier.
ALT F8, exécuter la procédure.
A te relire.
Cdlt.
Test - POSITION.xls
(112.5 Kio) Téléchargé 1 fois
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
1 membre du forum aime ce message.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
A
Anugraha
Jeune membre
Jeune membre
Messages : 14
Inscrit le : 22 mai 2018
Version d'Excel : 2010 FR

Message par Anugraha » 8 juin 2018, 14:25

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.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message