VBA - Problème de format récurent

Bonjour,

J'ai toujours le même problème de format, je souhaite additionner des valeurs, je souhaite donc les convertir en nombre. J'ai essayé diverses solutions mais rien n'y fait...

J'ai été surpris de voir que lorsque je demande à Excel de convertir les "." en "," parfois il supprime les ".", ce qui donne des chiffres énormes et certains chiffres sont conservés en format texte...

J'ai mis mon document en pièce jointe, vous pourrez mieux voir ce qui se passe et les différentes solutions que j'ai testé.

Ça n'a pas l'air complexe à première vue, mais je ne vois pas quoi faire pour y remédier...

Merci de votre attention,

Bonne soirée !

A plus tard.

Bonjour

Essaie cette manip :

* Sélectionne les données de la colonne D

*Sélectionne "Données" puis "Convertir" et "Suivant" jusqu''à "Terminé"

Et tu devrais retrouver le bon format

Bye !

Bonjour à tous,

Dans ton fichier exemple, le souci provient de deux données qui sont plus grandes que 1.

Tout ce qui est plus petit que 1 fonctionne correctement.

Pour l'instant, je ne sais pas comment traiter cela.

Peut-être que gmb aura une piste à suivre.

ric

Bonjour à tous,

Un essai ...

Dès le remplacement du . par la , ... je fais diviser la donnée par 10.

Puis, une fois le format de cellule appliqué, il faut multiplier par 10 pour rétablir la valeur.

Ça semble fonctionner correctement.

Public Sub sumdel2()

    Set ws = Worksheets("CSV")
    Set ws2 = Worksheets("VNEI (EI)")

    'Classer les données (A-Z) dans la colonne B
    lrws2 = ws2.Cells(Rows.Count, 2).End(xlUp).Row
    With ws2
        Range(Cells(1, 1), Cells(lrws2, 10)).Sort _
                Key1:=Range("B1"), order1:=xlAscending, _
                Header:=xlYes, Orientation:=xlTopToBottom
    End With

    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
        Next cL

        .Range(Cells(2, 4), Cells(lrws2, 4)).NumberFormat = "#,##0.00"  ' appliquer le format

        For Each cL In .Range(Cells(2, 4), Cells(lrws2, 4))
            cL = cL * 10                    ' multiplier par 10 pour rétablir la donnée
        Next cL

        'Aditionner les surfaces par habitats
        For lRow = lrws2 To 2 Step -1
            If .Cells(lRow, 2) = .Cells(lRow - 1, 2) Then
                .Cells(lRow - 1, 4) = CDbl(.Cells(lRow, 4)) + CDbl(.Cells(lRow - 1, 4))
                .Rows(lRow).Delete shift:=xlUp
            End If
        Next
    End With
End Sub

ric

Bonsoir !

Merci beaucoup pour vos réponses !

Je recherchais une solution VBA car ce problème de format revient systématiquement lorsque j'importe mes données.

La proposition faite pas ric fonctionne. La méthode est étrange, je m'attendais à quelque chose de plus simple haha ; mais ça marche et ça ne prend pas plus de temps à s'exécuter visiblement.

Merci encore !

Je vais continuer mes tests dès que j'ai du temps, mais, a priori, ça ne devrait plus poser de soucis

Bonne soirée !

Bonne soirée.

Bonjour à tous,

Une légère simplification ... les deux boucles et le format en un seul bloc ...

Public Sub sumdel2()

    Set ws = Worksheets("CSV")
    Set ws2 = Worksheets("VNEI (EI)")

    'Classer les données (A-Z) dans la colonne B
    lrws2 = ws2.Cells(Rows.Count, 2).End(xlUp).Row
    With ws2
        Range(Cells(1, 1), Cells(lrws2, 10)).Sort _
                Key1:=Range("B1"), order1:=xlAscending, _
                Header:=xlYes, Orientation:=xlTopToBottom
    End With

    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                    ' déviser 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

        'Aditionner les surfaces par habitats
        For lRow = lrws2 To 2 Step -1
            If .Cells(lRow, 2) = .Cells(lRow - 1, 2) Then
                .Cells(lRow - 1, 4) = CDbl(.Cells(lRow, 4)) + CDbl(.Cells(lRow - 1, 4))
                .Rows(lRow).Delete shift:=xlUp
            End If
        Next
    End With
End Sub

ric

Bonjour,

Tout fonctionne toujours aussi bien

Merci !

bonjour

test sur onglet CSV a voir

Sub test()
    For L = 2 To 33
        Range("AT" & L).Value = Val(Range("AS" & L))
        Range("AT" & L).NumberFormat = "##0.0000"
    Next
End Sub

A+

Maurice

Bonjour,

J'avais testé une solution similaire qui ne donnait pas un résultat concluant. Ça semblait bon sur le moment, mais dès l'exécution du reste du code, j'avais à nouveau des problèmes.

Je vais quand même essayer pour voir !

Bonjour,

@archer : Je voudrais éviter d'écrire sur une autre colonne. Et la simple modification du format ne semble pas suffire.

Finalement le problème persiste.

La conversion fonctionne lorsque les données viennent d'être importées, si je décide de relancer la macro, là les valeurs sont transformées à nouveau. Je me retrouve avec des surfaces qui passent de 10,76 ha à 107 647,00 ha (10 qui vient se mettre devant visiblement).

Savez-vous ce qui pourrait être fait pour éviter cela ?

Edit : Le problème vient du fait que je fais la modification sur la première feuille, mais, comme vous le proposiez au départ, je vais utiliser le code sur la feuille où sont réalisés les calculs...

Il faut finalement que les données soient transformées depuis la feuille d'origine..

Bonne journée !

Rechercher des sujets similaires à "vba probleme format recurent"