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é.
 

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+
 

Discussions similaires

Réponses
45
Affichages
1 K

Statistiques des forums

Discussions
312 526
Messages
2 089 345
Membres
104 130
dernier inscrit
badro26