Option Explicit
Public Enum eReturnFormat
fmtDouble = 5
fmtCurrency = 6
fmtString = 8
fmtCurrencyString = 99
End Enum
'@Description "Adapte le séparateur pour une conversion en double"
Public Function AdaptSeparator(ByVal value As Variant, Optional ByVal ReturnType As eReturnFormat = fmtDouble) As Variant
' // Conversion de la valeur d'entrée en String et suppression des espaces
Dim sValue As String
sValue = Replace(CStr(value), " ", "")
' // Détermination du séparateur décimal du système
On Error Resume Next
Dim sDecimalSeparator As String
' // Valable que sous Excel...
sDecimalSeparator = Application.International(xlDecimalSeparator)
On Error GoTo 0
' // Normalisation du séparateur décimal et retrait des séparateurs de milliers
If sDecimalSeparator = "," Then
sValue = Replace(sValue, ".", "")
Else
sValue = Replace(sValue, ",", "")
If InStr(sValue, ".") = 0 And InStr(sValue, ",") > 0 Then
sValue = Replace(sValue, ",", ".")
End If
End If
' // Conversion et retour du résultat
Select Case ReturnType
Case vbString
Dim vResult As Variant
vResult = sValue
Case vbDouble
If IsNumeric(sValue) Then
vResult = CDbl(sValue)
Else
vResult = Empty
End If
Case vbCurrency
If IsNumeric(sValue) Then
vResult = CCur(sValue)
Else
vResult = Empty
End If
Case fmtCurrencyString
If IsNumeric(sValue) Then
vResult = Format(CCur(sValue), "Currency")
Else
vResult = Empty
End If
Case Else
vResult = sValue
End Select
AdaptSeparator = vResult
End Function