Extraire les caractères numériques en VB

Résolu
Vince -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

Je cherche à n'extraire que les caractères numériques d'une chaine de caractères.
La commande :
if instr(x,"3060") <> 0 then

ExtFunction = Mid(x, InStr(x,"3060") , 17)
end if
me donne bien 17 caractères mais je souhaite supprimer les espaces et les lettres et n'obtenir que les chiffres.

Merci de votre aide

6 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Essaye avec..
        ExtFunction = Mid(x, InStr(x,"3060") , 4)

    Pour autant que le nombre à rechercher soit toujours de 4 chiffres.
    Tu dis
    0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    je ne sais pas si j'ai bien compris, mais deux fonctions qui suppriment les caractères non numériques d'une chaine

    Public Function X_chiffres1(x As String) As String  
    If x = "" Then  
      X_chiffres1 = ""  
    Else  
      If IsNumeric(Left(x, 1)) Then  
        X_chiffres1 = Left(x, 1) & X_chiffres1(Right(x, Len(x) - 1))  
      Else  
        X_chiffres1 = X_chiffres1(Right(x, Len(x) - 1))  
      End If  
    End If  
    End Function  
    
    Public Function X_chiffres2(x As String) As String
    Dim s, k As Long
    s = ""
    For k = 1 To Len(x)
      If IsNumeric(Mid(x, k, 1)) Then
         s = s & Mid(x, k, 1)
       End If
    Next k
    X_chiffres2 = s
    End Function


    bonne suite
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Re,
    Effectivement, pourquoi extraire un nombre que l'ont connaît déjà ?
    Y faudrait un point de repaire comme par exemple
        x = "Vendu= 3060 ; retour= 623 "

    Une idée !!
    Sub Test()  
    Dim x As String, d  
        x = "Vendu= 3060 ; Retour= 623 "  
        d = VdRe(x, 0) 'Avec 0 = 3060 : avec 1 = 623  
    End Sub  
    
    Public Function VdRe(x As String, Optional Mode As Integer) As Double  
    Dim S As String, i As Integer, e As Integer  
        S = IIf(Mode = 0, "Vendu= ", "Retour=")  
        i = InStr(x, S)  
        If i > 0 Then  
            S = Trim(Mid(x, i + 7))  
            For e = 1 To Len(S)  
                If Not IsNumeric(Mid(S, e, 1)) Then Exit For  
            Next e  
            VdRe = Val(IIf(e > Len(S), S, Left(S, e - 1)))  
        End If  
    End Function

    Ce n'est qu'une idée :DD
    A+

    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
  4. Vince
     
    Bonjour et merci à ceux qui m'ont apporté des réponses.

    Ma description était peut être floue.... je cherchais à extraire 17 caractères numériques commençant par 3060.
    Visiblement la solution est :

    Function ExtFunction (x)
    ExtFunction= "0"
    if instr(x,"3060") <> 0 then
    x = Replace(x," ","")
    end if
    if instr(x,"3060") <> 0 then
    ExtFunction = Mid(x, InStr(x,"3060") , 17)
    end if
    End Function

    MErci encore à Tous
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    A désespérer....
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    yes !!
    0