Convertir des données 2 chiffres apres chaque virgule

  • Initiateur de la discussion Initiateur de la discussion ri2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R

ri2

Guest
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

Dernière modification par un modérateur:
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 ?
 
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é.
 
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

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+
 
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+
 
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+
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
233
Réponses
6
Affichages
330
Retour