Fonction IsNumeric

Waner14 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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

  1. Utilisateur anonyme
     
    Bonjour,
    quel VB?
    • VBS
    • VBA
      • Word
      • Excel
      • Access
      • Powerpoint
      • Autre
    • VB6
    • VB.Net
      • Winform
      • WPF

    0
    1. Utilisateur anonyme
       
      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
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > Utilisateur anonyme
         
        Hello
        Vba vb6 vbs vb.net.. on peut utiliser les regex dans tous ces langages. :-)
        0
    2. Utilisateur anonyme
       
      Salut
      Oui je sais, mais y'a des réfractaires qui disent que like est un peu plus simple....
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > Utilisateur anonyme
         
        Pffff c'est qu'ils ne comprennent pas la beauté du code :-)
        0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. Utilisateur anonyme
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. Utilisateur anonyme
     
    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