IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Extraire chaine placé aléatoirement


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut Extraire chaine placé aléatoirement
    Bonjour a tous
    Voici mon problème du jour, je dois extraire une série de 5 chiffres dans une chaine mais je ne sais absolument pas comment m'y prendre.
    Dans ma base, je possède un champs 'Commentaire' (format Texte) qui se présente ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lvd216;39002;VOCO6;VOLR2;1AFF2;RPA6;PCT7
    Le problème est que cette chaine est de longueur variable est les élement sont placé aléatoirement(toutes la chaine est en formate texte)....
    Cette chaine peut etre beaucoup plus longues , ou beaucoup plus courte, il peut y avoir des points virgule en séparateur ou des virgules...
    Bref et je voudrai récupérer, juste dans mon exemple 39002... En gros, un élément de 5 chiffres concecutifs placé aléatoirement dans une chaine texte (sachant que ces chiffres sont au format texte...) J'ai essayé un peu tout les right left, extract chaine et transformation de type m'est j'arrive a rien...
    Des idées.?
    Merci d'avance !!
    Zephir

  2. #2
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    As-tu essayé la fonction inStr() ?

  3. #3
    seb92400
    Invité(e)
    Par défaut
    Quelques pistes à première lecture...

    Fonction 'Split' pour séparer en fonction des ';' ou des ','
    Ensuite, tu récupères chaque split et tu analyses la longueur : Fonction 'Len'
    Si la longueur est de 5, tu analyses chaque caractère et si tous les caractèrees sont des chiffres, tu as ce que tu cherches...

    Voilà... Tout ça est à dépatouillatationner...

  4. #4
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Utiliser cette petite fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Debug.Print ExtractionValeur("lvd216;39002;VOCO6;VOLR2;1AFF2;RPA6;PCT7")
    qui donne bien 39002

    Le séparateur qui n'est pas connu est tout ce qui n'est pas chiffre ou lettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Function ExtractionValeur(s As String) As Variant
     Dim i As Long, v As String, ok As Boolean
     
     ok = True
     For i = 1 To Len(s)
      c = Mid$(s, i, 1)
      Select Case c
      Case "a" To "z", "A" To "Z"   'contient des lettres
       ok = False                   'donc pas bon
       v = ""
      Case "0" To "9"
       If ok Then v = v & c
      Case Else                     'séparateur quelconque
       If v <> "" Then Exit For     'v ne contient que des chiffres
       ok = True
      End Select
     
     Next i
     
     If v = "" Then
      ExtractionValeur = Null
     Else
      ExtractionValeur = Val(v)
     EndIf
    End Function
    on peut ajouter les lettre accentuées si la chaine en contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Case "a" To "z", "A" To "Z", "é", "è", "à", "ù"

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    bonjour,

    Bon, une idée supplémentaire pour mieux vous embrouiller
    si vous recherchez qu'un entier de 5 chiffres, je ferai un split comme noawsen puis un like.

    La fonction retourne un entier long, a modifier selon votre convenance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Function GetMyNumber(ByVal s As String) As Long
       Dim i As Integer, v As Variant
       v = Split(s, ";")
       For i = 0 To UBound(v)
          If v(i) Like "#####" Then
             GetMyNumber = v(i)
             Exit For
          End If
       Next i
    End Function
    cordialement,

    philippe

  6. #6
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    pour le split le séparateur doit être connu, ici ; mais sinon ?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    bonjour Helas,

    t'as raison avec un peu de chance, c'est le cas ici...
    sinon on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Function GetMyNumberII(ByVal s As String) As Long
       Dim i As Integer
       For i = 5 To Len(s)
       'Debug.Print Mid$(s, i - 4, 5)
          If Mid$(s, i - 4, 5) Like "#####" Then
             GetMyNumberII = Mid$(s, i - 4, 5)
             Exit For
          End If
       Next i
    End Function
    A+

    Philippe

Discussions similaires

  1. Extraire chaine d'un fichier texte
    Par eknd dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2007, 16h35
  2. Extraire chaine de caractère dans chaîne de caratère
    Par kornichon dans le forum Langage
    Réponses: 9
    Dernier message: 11/07/2007, 21h56
  3. Extraire un nombre aléatoire d'un tableau
    Par lolow dans le forum LabVIEW
    Réponses: 10
    Dernier message: 29/05/2007, 17h01
  4. [VBA] extraire chaine
    Par Junior_jef dans le forum Access
    Réponses: 4
    Dernier message: 19/01/2007, 16h00
  5. Extraire chaine de caractere
    Par killuaster dans le forum Langage
    Réponses: 3
    Dernier message: 18/12/2006, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo