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

Access Discussion :

Probleme Extraction Chiffre D' Une Chaine


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut Probleme Extraction Chiffre D' Une Chaine
    Bonjour,

    J'ai utilisé le code de DEMCO pour tenter de récupérer les caractères numériques d'une chaîne de caractères qui comporte des chiffres suivies d'une lettre.
    le code fonctionne sauf dans le cas ou la lettre est F et dans le cas ou il n'y a pas de lettres ( while tourne en permanence ). Que faut-il modifier pour que dans ces cas , les chiffres soient tout de même affichés .

    Voici le code
    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
     
    Function VERIFLETTRE()
     
     
    Dim Ncpte As Long
    Ncpte = 1
    While (IsNumeric(Left$(Forms!MonForm!COMPTE, Ncpte)))
     'on incremente, ainsi on verra au prochain tour si la lettre suivant est egalement un chiffre
     
     Ncpte = Ncpte + 1
    Wend
    Ncpte = Ncpte - 1
    MsgBox "Voici la partie numerique : " & Left(Forms!MonForm!COMPTE, Ncpte)
     
    End Function
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir GUYSYS,

    Avez-vous essayé de déterminer le nombre de caractères contenus dans le champ avec la fonction "Len".

    Ensuite la boucle doit s'arrêter quand la valeur de la variable "Ncpte" est supérieure à la variable contenant le nombre de caractères ?

    Amicalement.

  3. #3
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Appel de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Nombre = RetourneNombre("65432 f sfgr é")
    retourne 0 dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Nombre = RetourneNombre(" f s65432fgr é")
    la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function RetourneNombre(s As String) As Long
     Dim i As Long
     RetourneNombre = 0
     For i = 1 To Len(s)
      Select Case Mid$(s, i, 1)
      Case "0" To "9"
      Case Else
       If i > 1 Then RetourneNombre = Left$(s, i - 1)
       Exit For
      End Select
     Next i
    End Function

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    [QUOTE=helas]Appel de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Nombre = RetourneNombre("65432 f sfgr é")
    retourne 0 dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Nombre = RetourneNombre(" f s65432fgr é")
    Je ne comprends pas ce code , peux-tu m'expliquer, j'ai essayé avec la fonction RetourneNombre mais j'ai toujours les mêmes problèmes que ce soit avec la lettre F ou avec l'absence de lettres.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Merci de votre aide ,

    je vous joins la table avec le code en module pour que vous constatiez mon souci ( Ctrl+Pause) pour arrêter la boucle lorsque la lettre est F ou lorsqu'il n'y a pas de lettre.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonsoir,
    Quand tu parle de la fonction de Demco, as tu essaye celle qu'il proposé ici:
    http://www.developpez.net/forums/sho...traire+chiffre

    Avec les explications fournies, je pense que tu devrais y arriver....

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Freeaccess , c'est cette discussion dont je me suis servi et cela fonctionne mais pas pour la lettre F ni lorsqu'il n'y a pas de lettre . Je pense que le code confond F avec le symbole monétaire F et que c'est la raison pour laquelle while ne s'arrête pas ( idem lorsqu'il n'y a pas de lettre comme dernier caractère) .
    Dans les deux cas , je ne sais pas comment faire. As-tu une idée.
    Merci

  8. #8
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Re,
    Ecoute, je viens de vérifier ta base....et en effet avec ton code cela ne fonctionne pas....

    Mais bonne nouvelle, avec le code de Demco (proposé plus haut dans mon précédent post)...cela fonctionne...

    Donc essaie ceci:
    -Dans un Module copie et colle le code de Demco (Function nuner...)
    -Sur l'événement "Sur clic" de ton bouton de commande, tu tape simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande4_Click()
    MsgBox numer(COMPTE)
    End Sub
    A chaque fois tu obtiens bien uniquement la partie numérique de ta chaine (même se terminant par F...)........

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    désolé freeaccess, je n'y arrives pas . je ne vois pas l'erreur et cela ne fonctionne pas davantage, je reverrai ça demain . Merci pour ton aide.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print val("65432 f sfgr é")

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    Comme toujours il y a bien sûr plusieurs façons possibles.

    A toutes fins utiles, en voici une autre, un peu simpliste mais qui fonctionne également :

    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
    Function VERIFLETTRE()
    Dim n As String
    Dim tn As String
    Dim nb As Long
    Dim Ncpte As Long
     
    tn = ""
    Ncpte = 1
    nb = Len(Forms!MonForm!COMPTE)
    MsgBox " NOMBRE DE CARACTERES:" & Len(Forms!MonForm!COMPTE)
     
    Compare:
    If Ncpte > nb Then
    MsgBox "Voici la partie numerique : " & tn
    Exit Function
    End If
     
    n = Mid(Forms!MonForm!COMPTE, Ncpte, 1)
    If Asc(n) >= 48 And Asc(n) <= 57 Then
    tn = tn & n
    End If
     
    Ncpte = Ncpte + 1
     GoTo Compare
    End Function
    Amicalement

  12. #12
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,
    Tout d'abord juste un petit rectificatif (rendons à César ce qui lui appartient...)....
    Le code proposé provenait de random

    Ensuite:
    .....je n'y arrives pas . je ne vois pas l'erreur et cela ne fonctionne pas davantage,.....
    Si tu as fait exactement ce que je t'ai dit sur ta base, cela fonctionne...en tout cas très bien chez moi....
    Dans un module, tu tape ce code
    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
    Public Function numer(x As String) As Variant
    Dim v As Variant
    Dim rep As Variant
    Dim ou As Integer
    ou = 1
    rep = Mid(x, 1, 1)
    Do Until IsNumeric(rep) Or ou = Len(x)
    ou = ou + 1
    rep = Mid(x, ou, 1)
    Loop
    If IsNumeric(rep) Then
    Do Until Not IsNumeric(Mid(x, ou + 1, 1)) Or ou = Len(x)
    ou = ou + 1
    rep = rep & Mid(x, ou, 1)
    Loop
    numer = rep
    Exit Function
    Else
    numer = v
    End If
    End Function
    Puis, sur l'événement "Sur Clic" de ton bouton de commande (Commande4), tu change tout ton code par celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande4_Click()
    MsgBox numer(COMPTE)
    End Sub
    Quand tu clic, tu obtiens les résultats voulus:
    5125w = 5125
    .....
    5456 = 5456
    5498F = 5498
    ....
    F54878FF = 54878

    Bonne continuation.....

    [EDIT] La solution de random est encore plus simple....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print val("65432 f sfgr é")
    Dans ton code, remplace par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande4_Click()
    MsgBox Val (COMPTE)
    End Sub
    Par contre, attention avec cette méthode, si ta chaine commence par une lettre, la valeur retournée est égale à 0 (zéro).

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Bonjour et merci Freeaccess,

    J'ai effectivement fait comme tu m'as dit et celà fonctionne.

    J'ai donc pu récupérer la valeur numérique du champ COMPTE via la fonction numer (COMPTE) et celà fonctionne ....avec toutes les lettres ...ou sans lettres, c'est ce dont j'avais besoin pour continuer mon développement.
    C'est parfait.
    Ceci étant , tu me dis que le code de RANDOM est plus simple .
    Pourrais-tu me traduire en langage courant ce que ce code qui me parait bien court veut dire et ou le mettre.

  14. #14
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Re,
    Pourrais-tu me traduire en langage courant ce que ce code qui me parait bien court veut dire et ou le mettre

    Heu...as-tu lu mon post jusqu'au bout

    Dans ton code, remplace par:

    Code :
    Private Sub Commande4_Click()
    MsgBox Val (COMPTE)
    End Sub

    Par contre, attention avec cette méthode, si ta chaine commence par une lettre, la valeur retournée est égale à 0 (zéro).
    Ici, tu n'as plus besoin de créer une fonction dans un module, mais tu utilise directement la fonction Val.
    Avec l'aide d'Access tu aurais trouvé tout seul:
    Val, fonction

    Renvoie le nombre contenu dans une chaîne de caractère sous la forme d'une valeur numérique d'un type approprié.
    Voila, maintenant, je pense que tu pourras mettre le tag

    Bonne continuation...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    OK FreeAccess , j'ai trouvé la touche

    Ma chaîne ne commence jamais par une lettre et la fonction Val me suffira amplement par rapport à numer de Demco.

    Merci encore pour ton aide et ta patience.

    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi .
    Albert EINSTEIN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/08/2006, 13h30
  2. Probleme de blanc dans une chaine
    Par Bahan dans le forum C
    Réponses: 22
    Dernier message: 25/07/2006, 16h38
  3. extraction caractère d'une chaine.
    Par Fabouney dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2006, 14h10
  4. Probleme de coupe dans une chaine
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2005, 23h39
  5. Réponses: 8
    Dernier message: 02/11/2005, 14h16

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