Un cdbl qui gere les options regional concerant le separateur decimal

Contenu du snippet

j'ai des machine paramétré avec le '.' en séparateur décimal, d'autre avec une ','.
J'ai aussi des données entré avec des '.' ou des ','.
j'ai donc crée un fonction de conversion en double qui s'affranchit de se séparateur.
attention cette fonction ne gère pas le séparateur des milliers.

Source / Exemple :


' Fonction de conversion en double personnalisé

Public Function MyCDbl(str As String) As Double
'on remplace le . ou la , par le separateur decimal en vigueur
    Dim strt As String
    Dim Sep As String
    Dim i As Integer

    If IsNumeric(str) Then
        'La machine sait déjà le convertir alors go !!
        MyCDbl = CDbl(str)
    Else
        'je trouve le séparateur de la machine
        Sep = Mid(Format(1 / 2, ""), 2, 1)
        'je recherche le séparateur dans la chaine
        Select Case Sep
        Case "."
            i = InStr(1, str, ",")
        Case ","
            i = InStr(1, str, ".")
        End Select

        If i = 0 Then     
            'il n y a pas de séparateur dans la chaine , ce n'est donc pas un nombre 
            MyCDbl = Empty
        Else
            strt = Mid(str, 1, i - 1) & Sep & Mid(str, i + 1)
            '  on a remplacer le séparateur décimal
            If IsNumeric(strt) Then
                'gagné , c'est un nombre !!!
                MyCDbl = CDbl(strt)
            Else
                'on revoit empty, je ne sais pas le convertir
                MyCDbl = Empty
            End If
        End If
    End If

End Function

Conclusion :


ce code me sert deja pas mal ...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.