XL 2019 Décomposer des valeurs texte en numérique

Ron74

XLDnaute Nouveau
Bonjour à tous

Je reçois des données sous forme de texte et j'aimerais pouvoir les séparer en plusieurs colonnes
J'arrive à faire le premier cas mais je bute suer le 2 ème
En VBA serais super

Merci de votre aide

Bonne journée

A B C D
6 440,25 6 440,256 440,256 440,25
27 536,24 15,36 27 520,8827 536,2415,3627 750,88
 

Ron74

XLDnaute Nouveau
Bonjour

mes données sont comme dans la première colonne et j'aimerais avoir le résultat comme dans les colonnes 2-3-4

mon problème et que l'ai un espace pour la séparation des milliers et un espace pour la séparation des différents nombes
 

Lolote83

XLDnaute Barbatruc
Bonjour à tous,
Un peu tiré par les cheveux mais voici un petit code
Faire la sélection sur ta colonne des cellules à convertir puis lancer la macro suivante
VB:
Sub Convertir()
    For Each xCell In Selection
        xCellule = xCell
        xLig = xCell.Row
        xTourne = (Len(xCellule) - Len(Replace(xCellule, ",", ""))) / 1
        xPos = 1
        For F = 1 To xTourne
            xVirg = InStr(xPos, xCellule, ",")
            xEspa = xVirg + 3
            xTexte = Trim(Mid(xCellule, xPos, xEspa - xPos))
            xNombr = Val(Replace(xTexte, ",", "."))
            xPos = xEspa
            Cells(xLig, F + 2) = xNombr
        Next F
    Next xCell
End Sub
A adapter en fonction de tes données (Surtout la ligne Cells(xLig, F+2) = xNombr
@+ Lolote83
 
Dernière édition:

Lolote83

XLDnaute Barbatruc
Re bonjour,
En examinant le fichier, je pense que les colonnes B,C,D et E ne sont pas dans le fichier d'origine mais sont des données calculées par notre ami @Ron74 .
Dans l'onglet 2 du fichier joint, je suis donc parti du principe que ces données n'existaient pas et que seul la colonne A était les données d'origine.
Du coup, voici le nouveau fichier avec un onglet Feuil2 et la macro Convertir2
Une fois la feuille 2 affichée, lancer la macro Convertir2
@+ Lolote83
 

Pièces jointes

  • Copie de RON74 - Convertir - V2.xlsm
    27.7 KB · Affichages: 4

Ron74

XLDnaute Nouveau
Merci Lotote83 pour tes réponses

Une petite modification pour écrire les valeurs dans la bonne colonne mais c'est bien ce que je voulais

Sub Convertir()

For Each xCell In Selection
xCellule = xCell
xLig = xCell.Row
xtourne = (Len(xCellule) - Len(Replace(xCellule, ",", ""))) / 1
xPos = 1
For F = 1 To xtourne
xVirg = InStr(xPos, xCellule, ",")
xEspa = xVirg + 3
xTexte = Trim(Mid(xCellule, xPos, xEspa - xPos))
xNombr = Val(Replace(xTexte, ",", "."))
xPos = xEspa

If F = 1 And (xtourne = 2 Or xtourne = 3) Then
Cells(xLig, 6) = xNombr
ElseIf F = 2 And xtourne = 3 Then
Cells(xLig, 7) = xNombr
ElseIf F = 2 And xtourne = 2 Or F = 3 And xtourne = 3 Then
Cells(xLig, 8) = xNombr
End If


Next F
Next xCell
End Sub
 

vgendron

XLDnaute Barbatruc
Hello @Lolote83 : Vu ta solution, pas mal non plus.. meme plus simple que la mienne

par contre,@Ron74 , nos deux solutions ne fonctionnent QUE si les nombres sont au "format décimal" avec 2 chiffres après la virgule.. meme pour les nombres entiers
ex:
2 520 3520.50 ==> ne donnera pas le résultat attendu
alors que
2520.00 3520.50== >OK
 

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 107
dernier inscrit
cdel