Code à insérer dans un module
Source / Exemple :
'La fonction Val arrête la lecture de la chaîne au premier caractère ne faisant apparemment
'pas partie d'un nombre. Les symboles et caractères fréquemment associés aux valeurs numériques,
'comme le signe $ et les virgules ne sont pas reconnus. En revanche, la fonction reconnaît les
'préfixes &O (pour octal) et &H (pour hexadécimal). Les espaces, les tabulations et les
'caractères de saut de ligne ne sont pas pris en compte dans l'argument.
'Dans l'exemple suivant, la fonction renvoie la valeur 161517 :
'Val(" 1615 17e siècle")
'La fonction Valeur ci dessous permet de convertir en nombre des chaines sous la forme
'Valeur(" - 1615.36 e +17 Siecle") = -1615,36E17
'Elle reconnait également le séparateur décimal défini dans le panneau de configuration
Public Function Valeur(ByVal Nombre As Variant) As Double
Dim NombreNegatif, NombreDefini As Boolean
Dim MantisseNegative, MantisseDefinie As Boolean
Dim Resultat As String
Dim Mantisse As String
Dim Chiffre As String
Dim Position As Integer
Dim SeparateurDecimal As String
Dim NombreDecimal As Single
If IsNumeric(Nombre) Then Valeur = Nombre: Exit Function
If Nombre = "" Then Valeur = 0: Exit Function
'Definition du séparateur décimal défini dans le panneau de configuration
NombreDecimal = Val("1.1")
SeparateurDecimal = Mid(NombreDecimal, 2, 1)
Resultat = ""
Mantisse = ""
NombreNegatif = False
Position = 1
Chiffre = Mid(Nombre, Position, 1)
Do While InChaine("0123456789.,-+E " & SeparateurDecimal, Chiffre)
Select Case Chiffre
Case "."
If InChaine(Resultat, SeparateurDecimal) Then
Exit Do
ElseIf InChaine(Resultat, "E") Then
Exit Do
Else
Resultat = Resultat & SeparateurDecimal
End If
Case ","
If InChaine(Resultat, SeparateurDecimal) Then
Exit Do
ElseIf InChaine(Resultat, "E") Then
Exit Do
Else
Resultat = Resultat & SeparateurDecimal
End If
Case "E", "e"
If InChaine(Resultat, "E") Then
Exit Do
Else
Resultat = Resultat & "E"
MantisseNegative = False
MantisseDefinie = False
End If
Case "+"
If InChaine(Resultat, "E") Then
If MantisseDefinie Then Exit Do
Else
If NombreDefini Then Exit Do
End If
Case "-"
If InChaine(Resultat, "E") Then
If MantisseDefinie Then
Exit Do
Else
MantisseNegative = Not MantisseNegative
End If
Else
If NombreDefini Then
Exit Do
Else
NombreNegatif = Not NombreNegatif
End If
End If
Case "0" To "9"
If InChaine(Resultat, "E") Then
MantisseDefinie = True
Mantisse = Mantisse & Chiffre
Else
NombreDefini = True
Resultat = Resultat & Chiffre
End If
End Select
If Position = Len(Nombre) Then
Exit Do
Else
Position = Position + 1
Chiffre = Mid(Nombre, Position, 1)
End If
Loop
If Resultat = "" Then Valeur = 0: Exit Function
If NombreDefini Then
If MantisseDefinie Then
If MantisseNegative Then Mantisse = "-" & Mantisse
Resultat = Resultat & Mantisse
ElseIf InChaine(Resultat, "E") Then
Resultat = Left(Resultat, Len(Resultat) - 1)
End If
If NombreNegatif Then Resultat = "-" & Resultat
Valeur = Resultat
Else
Valeur = 0
End If
End Function
Public Function InChaine(ByVal ChaineContenante As String, ByVal Chaine As String) _
As Boolean
If InStrC(ChaineContenante, Chaine) <> 0 Then
InChaine = True
Else
InChaine = False
End If
End Function
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.