Fonction IsNumeric

Fermé
Waner14 Messages postés 1 Date d'inscription dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016 - 2 oct. 2016 à 19:25
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 - 3 oct. 2016 à 13:40
Bonjour,

Je suis en galère ...

Je cherche a vérifier les 3 derniers caractères de ma variable sont des chiffres..

RD = Right(NOM_VRF1, 3)

Si se sont des chiffres, les copier sinon vérifier que les 2 derniers sinon que le dernier.



RD = Right(NOM_VRF1, 3)
RDCheck = IsNumeric(RD1)



If RDCheck = True Then
RD = Right(NOM_VRF1, 3)
RD1 = Val(RD)
RDCheck = IsNumeric(RD1)
ElseIf RDCheck = True Then
RD = Right(NOM_VRF1, 2)
RD1 = Val(RD)
RDCheck = IsNumeric(RD1)
ElseIf RDCheck = True Then
RD = Right(NOM_VRF1, 1)
RD1 = Val(RD)
RDCheck = IsNumeric(RD1)
ElseIf RDCheck = True Then
RD = Right(NOM_VRF1, 1)
Else
RD = 3
End If

Sauf que si il y a une lettre dans la variable, IsNumeric renverra uniquement false.

Avez une solution svp.

Je vous remercie d'avance.

Cdlt,

4 réponses

Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 932
2 oct. 2016 à 20:32
Bonjour,
quel VB?
  • VBS
  • VBA
    • Word
    • Excel
    • Access
    • Powerpoint
    • Autre
  • VB6
  • VB.Net
    • Winform
    • WPF

0
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 932
2 oct. 2016 à 20:33
Aller, on peut gagner un peu de temps,
  • en VBA et VB6 regarde l'opérateur Like.
  • en VB.Net, voir les Regex
  • en VBS j'en sais rien, je n'en ai jamais fait.
0
jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665 > Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024
2 oct. 2016 à 20:54
Hello
Vba vb6 vbs vb.net.. on peut utiliser les regex dans tous ces langages. :-)
0
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 932
2 oct. 2016 à 20:56
Salut
Oui je sais, mais y'a des réfractaires qui disent que like est un peu plus simple....
0
jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665 > Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024
2 oct. 2016 à 21:12
Pffff c'est qu'ils ne comprennent pas la beauté du code :-)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
3 oct. 2016 à 11:47
Bonjour tout le monde
une regexp le lundi matin, dur,dur....
pour le fun (?)
Sub ccm()
Dim RD

RD = Right(Range("B2"), 3)
MsgBox extrait_chiffres(RD)
End Sub
'---------------------------------------------------------------------------
Function extrait_chiffres(ByRef texto) As Integer
Dim reg As Object
Dim extraction As Object
Dim digit

Set reg = CreateObject("vbscript.regexp")
reg.Global = True
reg.Pattern = "(\d?\d?\d)"
Set extraction = reg.Execute(texto)
For Each digit In extraction
extrait_chiffres = extrait_chiffres & (digit.Value)
If IsNumeric(extrait_chiffres) Then Nbre = Nbre + 1
Next digit
If Nbre = 0 Then
MsgBox "aucun chiffre dans les 3 derniers caractères"
End
End If
Set extraction = Nothing
Set reg = Nothing
End Function


mais on doit trouver sans utiliser regexp
0
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 932
3 oct. 2016 à 12:57
Salut,

Tu te compliques la vie.
La demande est de vérifier que les 3 derniers caractères sont des chiffres, donc pas besoin de repasser par un IsNumeric (qui n'existe pas en .net)

Le pattern est un truc comme ça (de tête pas vérifié) ".+\d{3}$" qui signifie n'importe quoi plein de fois, suivi de 3 chiffres et fin de texte.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 3/10/2016 à 12:57
Je m'disais aussi !
sans regexp et + compréhensible à mon avis

a adapter (msgbox pour la démo)
Option Explicit
'-------------------------------
Sub ccm()
Dim Fin, cptr As Byte, xxx, rep

Fin = StrReverse((Right(Range("B2"), 3)))
For cptr = 1 To 3
xxx = Mid(Fin, cptr, 1)
If IsNumeric(xxx) Then
rep = rep & xxx
Else
Exit For
End If
Next
If rep = "" Then
MsgBox "aucun nombre"
Else
MsgBox StrReverse(rep)
End If

End Sub


à transformer en nombre (rep*1)car "rep" est du texte

 Michel
0
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 932
Modifié par Whismeril le 3/10/2016 à 13:40
Je viens de tester le pattern, j'y ai ajouté un groupement (les parenthèses) pour extraire les chiffres bien que Warmer14 ne l'ai pas demandé.
Comme il n'a toujours pas dit quel VB il utilise, je ne propose pas d'implémentation (de toute façon je ne sais faire qu'en .Net;) )



On voit sur la capture d'un site de teste en ligne que la variable est validée (Matched String) et que les 3 chiffres sont extraits dans $1

PS si je mets datdatz1234 en entrée ça match aussi est 234 est extrait.

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0