Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Convertir des données 2 chiffres apres chaque virgule

ri2

XLDnaute Nouveau
Bonjour, le Forum,
Je cherche à convertir des données situées dans une même cellule en séparant chaque valeur 2 chiffres après chaque virgule (il s'agit de valeurs monétaires).

En vous remerciant par avance
 

Pièces jointes

  • ConversionDonnees.xls
    427 KB · Affichages: 89
Dernière édition:

Dugenou

XLDnaute Barbatruc
Re : Convertir des données 2 chiffres apres chaque virgule

Merci pour l'exemple: c'est quand même plus facile de te comprendre !
Y a t il un élément constant qui permette de trouver le début de la série de chiffres ?
99 dans ton exemple ou 2012 peut-être ?
 

Theze

XLDnaute Occasionnel
Re : Convertir des données 2 chiffres apres chaque virgule

Bonjour,

A la vue de ce que tu montre en ligne 2, je suppose que 2012 est l'année et le point de départ pour la récup. Les différentes valeurs inscrites en ligne 2 à partir de la colonne "C" (la colonne B étant l'année) :
Code:
Sub Repartir()

    Dim Cel As Range
    Dim Tbl() As Double
    Dim Texte As String
    Dim Annee As String
    Dim Pos As Integer
    Dim I As Integer
    Dim J As Integer
    
    'la cellule à répartir est A5
    Set Cel = Range("A5")
    
    'recherche l'année (enfin je suppose que c'est ce qu représente 2012 ?
    Pos = InStr(Cel, "2012")
    
    'stocke l'année
    Annee = Mid(Cel, Pos, 4)
    
    'récupère les valeurs à répartir sans l'année
    Texte = Right(Cel, Len(Cel) - Pos - 3)
    
    'point de départ
    Pos = 1
    
    'boucle sur le texte à la recherche des virgules
    'et stocke les valeurs dans un tableau
    For I = 1 To Len(Texte)
    
        If Mid(Texte, I, 1) = "," Then
            
            J = J + 1
            
            ReDim Preserve Tbl(1 To J)
            
            Tbl(J) = Mid(Texte, Pos, I - Pos + 3)
            
            Pos = I + 3
            
        End If
    
    Next I
    
    'l'année en ligne 2 et colonne 2 soit en "B2"
    Cells(2, 2) = Annee
    
    'inscrit les différentes valeurs dans les colonnes de la ligne 2
    For I = 1 To UBound(Tbl)
    
        Cells(2, I + 2) = Format(Tbl(I), "#.00")
        
    Next I

End Sub

Hervé.
 

Modeste geedee

XLDnaute Barbatruc
Re : Convertir des données 2 chiffres apres chaque virgule

Bonsour®

c'est fait sans macro

formule en colonne 1
=1*STXT($A$5;TROUVE(CAR(165);SUBSTITUE($A$5;",";CAR(165);COLONNE()))-5;8)

recopier la formule vers la droite autant que nécessaire ...
 

david84

XLDnaute Barbatruc
Re : Convertir des données 2 chiffres apres chaque virgule

Bonjour à tous,
d'après ce que j'en ai compris, ci-joint une fonction personnalisée basée sur des expressions rationnelles :
Code:
Function Extraire_num(chaine As String, Rang As Integer) As String
Dim oRegExp As Object, Matches As Object
Set oRegExp = CreateObject("vbscript.regexp")
If chaine = "" Then Exit Function
With oRegExp
    .Global = True
    .Pattern = "[^\d,]"
    If .test(chaine) = True Then chaine = Application.WorksheetFunction.Trim(.Replace(chaine, " "))
    .Pattern = "(.*" & Year(Date) & ")(.*)"
    If .test(chaine) = True Then chaine = .Replace(chaine, "$2")

    .Pattern = "(\d+,\d\d)"
    If .test(chaine) = True Then
        Set Matches = .Execute(chaine)
        If Rang - 1 < Matches.Count Then Extraire_num = Matches(Rang - 1)
    End If
Set oRegExp = Nothing
End With
End Function
A+
 

Pièces jointes

  • Extraction_num.xls
    38.5 KB · Affichages: 68

david84

XLDnaute Barbatruc
Re : Convertir des données 2 chiffres apres chaque virgule

Re
si l'on veut obtenir le même résultat par formule, cela pourrait donner cela (mais il y a surement plus simple) :
Code:
=SUBSTITUE(STXT("/"&SUBSTITUE(",  "&STXT(SUPPRESPACE($A5);CHERCHE(ANNEE(AUJOURDHUI());SUPPRESPACE($A5))+4;NBCAR(SUPPRESPACE($A5)))&",";",";"/")&"/";CHERCHE("/";SUBSTITUE(" "&",  "&STXT(SUPPRESPACE($A5);CHERCHE(ANNEE(AUJOURDHUI());SUPPRESPACE($A5))+4;NBCAR(SUPPRESPACE($A5)))&","&" ";",";"/";COLONNES($A:A)))+3;CHERCHE("/";SUBSTITUE(" "&",  "&STXT(SUPPRESPACE($A5);CHERCHE(ANNEE(AUJOURDHUI());SUPPRESPACE($A5))+4;NBCAR(SUPPRESPACE($A5)))&","&" ";",";"/";COLONNES($A:B)))-CHERCHE("/";SUBSTITUE(" "&",  "&STXT(SUPPRESPACE($A5);CHERCHE(ANNEE(AUJOURDHUI());SUPPRESPACE($A5))+4;NBCAR(SUPPRESPACE($A5)))&","&" ";",";"/";COLONNES($A:A))));"/";",")
A+
 

david84

XLDnaute Barbatruc
Re : Convertir des données 2 chiffres apres chaque virgule

Re

concernant la proposition basée sur les expressions rationnelles, le 1er motif n'est pas nécessaire.
La fonction devient donc :
Code:
Function Extraire_num(chaine As String, Rang As Integer) As String
Dim oRegExp As Object, Matches As Object
Set oRegExp = CreateObject("vbscript.regexp")
If chaine = "" Then Exit Function
With oRegExp
    .Global = True
    .Pattern = "(.*" & Year(Date) & ")(.*)"
    If .test(chaine) = True Then chaine = Application.WorksheetFunction.Trim(.Replace(chaine, "$2"))

    .Pattern = "(\d+,\d\d)"
    If .test(chaine) = True Then
        Set Matches = .Execute(chaine)
        If Rang - 1 < Matches.Count Then Extraire_num = Matches(Rang - 1)
    End If
Set oRegExp = Nothing
End With
End Function
A+
 

david84

XLDnaute Barbatruc
Re : Convertir des données 2 chiffres apres chaque virgule

Bonsoir,
concernant la proposition formule, on peut faire plus court :
Code:
=STXT(","&SUBSTITUE(STXT($A5;CHERCHE(ANNEE(AUJOURDHUI());$A5)+4;NBCAR($A5));",";",");CHERCHE("/";SUBSTITUE( ",  "&STXT($A5;CHERCHE(ANNEE(AUJOURDHUI());$A5)+4;NBCAR($A5));",";"/";COLONNES($A:A)))+1;CHERCHE("/";SUBSTITUE(","&STXT($A5;CHERCHE(ANNEE(AUJOURDHUI());$A5)+4;NBCAR($A5));",";"/";COLONNES($A:B)))-CHERCHE("/";SUBSTITUE( ",  "&STXT($A5;CHERCHE(ANNEE(AUJOURDHUI());$A5)+4;NBCAR($A5));",";"/";COLONNES($A:A)))+2)
A+
 

ri2

XLDnaute Nouveau
Re : Convertir des données 2 chiffres apres chaque virgule

Merci à tous, je vais conserver la macro de Theze qui marche nickel, mais je garde toutefois les autres solutions pour ma culture personnelle. Cordialement
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…