Problème de Suppression dans une chaîne de caractère longue

Bonjour a Tous

je travail sur un fichier en format CSV qui contient des coordonnées X et Y, dans ce fichier j'ai une colonne intitulé POLYGONE,

problématique : La colonne contiens une chaîne de plusieurs caractères voici un exemple:

Polygon,((-5.50674593076109886,5.85401714779436588 ) : (-5.50767925567924976,6.00642110221087933) : (-5.41351703926920891,6.00702200084924698): (-5.41348200291395187,5.9988880343735218) : (-5.38981905207037926,5.99892809987068176) : (-5.38661976344883442,5.99412409588694572)....

Mon objectif est de réduire le nombre des chiffres après le (POINT) a 5 chiffre pour toute la chaîne ,c'est a dire je veux que ça soit :

Polygon,((-5.50674,5.85401 ) : (-5.50767,6.006421) : (-5.41351,6.00702 ) : (-5.41348,5.99888 ) : (-5.38981,5.99892 ) : (-5.38661,5.99412)....

NB: certaine lignes peuvent Contenir jusqu’à 100 doublant (X,Y).

Merci d'avance

Bonjour,

à tester.

Les chaines doivent être en A, pour l'instant je met le résultat en B que tu puisses tester et comparer.

Si tu valides on pourra remplacer en A.

J'arrondi à 5 décimales plutôt que de tronquer, ça me parait plus logique.

Il faut savoir que l'arrondi de vba est l'arrondi des comptables (voir google pour plus d'explication).

Si c'est vraiment gênant pour toi on peut véritablement tronquer.

Sub arrondi()
    Dim datas, lig As Long, tmp1, tmp2, i As Long, j As Long
    datas = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
    For lig = 1 To UBound(datas)
        If LCase(Left(datas(lig, 1), 7)) = "polygon" Then
            tmp1 = Replace(Mid(datas(lig, 1), 11), " ", "")
            tmp1 = Split(Left(tmp1, Len(tmp1) - 2), "):(")
            For i = 0 To UBound(tmp1)
                tmp2 = Split(tmp1(i), ",")
                For j = 0 To UBound(tmp2)
                    tmp2(j) = Round(tmp2(j), 5)
                Next j
                tmp1(i) = Join(tmp2, ",")
            Next i
            datas(lig, 1) = "Polygon,((" & Join(tmp1, ") : (") & "))"
        End If
    Next lig
    [B2].Resize(UBound(datas)) = datas
End Sub

eric

15classeur5.xlsm (18.77 Ko)

Bonsoir eriiic et Merci pour ta réactivité,

j'arrive pas a compilé le macro ça me remets un message d'erreur (Incompatibilité de type) je sais pas ce que cela veux dire ?!

C'est sans doute que tu as des données différentes de ce qui était annoncé.

Dépose le fichier

j'ai fait le test sur ton classeur et ça a donné le message d’erreur j'ai même pas encore collé mes données.

en tout cas voila la colonne en question dans le fichier en PJ.

6intergration2.zip (75.78 Ko)

Si ça plante sur mon fichier c'est parce que ton séparateur décimal est la virgule.

Il faudrait le changer temporairement dans le panneau de config 'Région et langue / paramètres supplémentaires'

Le changer dans les options excel n'est pas suffisant.

Sinon je verrai demain.

eric

Bonjour fiorri, eric, la communauté,

voici un autre exemple

à tester, les données sont transférées sur l'onglet "Résultat"

Sub test()
Dim rw1 As Long, rw2 As Long, j As Long, i As Integer, k, t As String, t1
Application.ScreenUpdating = False
With Sheets("INTERGRATION2")
   rw1 = .Cells(Rows.Count, "A").End(xlUp).Row
   For j = 2 To rw1
        t = .Cells(j, "A")
        t = Application.Substitute(t, "(", "")
        t = Application.Substitute(t, ")", "")
        t = Application.Substitute(t, " ", "")
        t = Application.Substitute(t, ":", ",")

        t1 = Split(t, ",")

        For i = LBound(t1) + 1 To UBound(t1)
            k = Format(t1(i), "0.00000")
            Sheets("Résultat").Cells(j, i) = k
        Next i
    Next j
End With
Application.ScreenUpdating = True
End Sub

Tu as le droit de le signaler si tu as trouvé ton bonheur sur un autre forum et que ce n'est plus la peine de perdre du temps ici...

Rechercher des sujets similaires à "probleme suppression chaine caractere longue"