Cette petite fonction sans prétention permet de transformer une chaine de caractère en valeur numérique. « Quoi de nouveau ! » me direz-vous. A la différence des fonctions natives de types Val(), CDbl() et autre, cette fonction épure tous les caractères non numérique en tenant compte du signe et du séparateur décimal.
Function fSupprimerAlpha(mValeur As Variant) As Variant
'------------------------------------------------------
' Procedure : fSupprimerAlpha / Function
' Author : fabrice CONSTANS (MVP)
' Date : 03/06/2012
' Modified :
' Description : épure une chaine de caractère pour
retourner une valeur numérique
' tient compte du sép. décimal et des + et -
' Parameters : mValeur contient la valeur à transformer
' Return Value : retourne une valeur numérique valide
'------------------------------------------------------
Dim i As Integer
If IsNull(mValeur) Or Len(mValeur) = 0 Then
fSupprimerAlpha = Null
Exit Function
End If
' à inverser suivant le type de séparateur utilisé
mValeur = Replace(mValeur, ",", ".")
' supprime tous les caracteres alpha
For i = 1 To Len(mValeur)
' tout ce qui n'est pas numérique sauf +,- et sepérateur dec.
If Not IsNumeric(Mid(mValeur, i, 1)) And _
Not Mid(mValeur, i, 1) Like "*[,,.]*" And _
Not Mid(mValeur, i, 1) Like "*[+,-]*" Then
' remplace par un espace
mValeur = Replace(mValeur, Mid(mValeur, i, 1), " ")
End If
Next
' renvoi la nouvelle valeur sans les espaces
fSupprimerAlpha = Replace(mValeur, " ", "")
End Function
Vous pouvez facilement y faire appel depuis une requête par exemple.