Fonction IsNumeric

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. 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
    1. Contributeur
      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
      1. Contributeur
        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
        1. 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.
      2. Bonjour,
        quel VB?
        • VBS
        • VBA
          • Word
          • Excel
          • Access
          • Powerpoint
          • Autre
        • VB6
        • VB.Net
          • Winform
          • WPF

        1. 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.
        2. Modérateur
          @Utilisateur anonymeHello
          Vba vb6 vbs vb.net.. on peut utiliser les regex dans tous ces langages. :-)
        3. Salut
          Oui je sais, mais y'a des réfractaires qui disent que like est un peu plus simple....