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 :

Récupérer un nombre dans un champs texte


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut Récupérer un nombre dans un champs texte
    Bonjour, voilà mon problème :
    j'ai des notes dans un champs qui peuvent prendre les valeurs suivantes : 1, 2 , 3- ; 3 ; 3(+) ; 3+ ; 3,5 ; 4 (donc le champs est en texte).
    Je voudrais faire une moyenne dans un état et j'avais pensé que je pourrais peut être récupérer dans une requête uniquement le nombre 1 ; 2 ; 3 ; 3,5 ou 4 (ce qui serais suffisant pour mon application).
    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Cnum([TonChamp]) devrait faire l'affaire, non ?

    JMarc

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci de répondre aussi rapidement ; je vais essayer.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Ta solution ne fonctionne pas tout à fait ; pour 3,5 j'obtient 3 et surtout lorsque ça ne fonctionne pas à tout les coups : je pense que c'est lorsque j'ai un enregistrement où la note n'est pas incrite j'obtient le message suivant : "Cette expression comporte une syntaxe incorrecte, ou est trop complexe pour être évaluée. Par exemple, une expression numérique peut contenir des éléments trop compliqués. Essayez de la simplifier en en affectant des parties à des variables."
    Voilà je ne sait pas trop comment faire.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut Microsoft a dit...
    Donc, j'ai trouvé ça sur le site MS :
    La raison pour laquelle la conversion des chiffres placés après la
    virgule n'est pas réalisée vient du fait que la fonction Val (Cnum) utilise
    comme séparateur de décimales un point (séparateur de décimales des pays
    Anglo-saxons) et non le séparateur défini dans le panneau de
    configuration de Microsoft Windows.
    Et si tu remplaces ta virgule par un point dans la table, la requête te retourne bien 3,5.

    Sinon, j'ai testé avec les + ou - et les (+) et pour moi ça fonctionne...

    JMarc

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    avec une fonction du genre, c'est faisable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function GetNumber(ByVal str As String) As Double
    
    str = Replace(str, "(", "")
    str = Replace(str, ")", "")
    str = Replace(str, "+", "")
    
    GetNumber = IIf(InStr(str, "-"), -1, 1) * CDbl(Replace(str, "-", ""))
    
    End Function
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Je veux bien mais je ne vois pas où mettre le code dans la requête

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Moi non plus, vu que tu n'as pas inclus ta requete ...

    déjà essaie pour voir si c'est bien du numérique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT GetNumber([MaTable]![ChampNote]) As Note From [MaTable]
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Excuse moi mais je ne comprend pas bien ce que tu veux me faire faire.
    Je réexplique mon problème en essayant d'être plus clair.
    Dans un requête avoir un colonne où l'on a un nombre ; ce nombre est fonction d'un champs qui peut avoir les valeurs suivantes : 1 ; 2 ; 3- ; 3 ; 3(+) ; 3+ ; 3,5 ; 4 ou "vide".
    Dans la colonne de la requête je souhaite avoir 1 ; 2 ; 3 ; 3,5 ; 4 ou vide (ou encore mieux mais 1 ; 2 ; 2,75 (qui correspond à 3-) ; 3 ; 3,12 (qui correspond à 3(+)) ; 3,25 (qui correspond à 3+) ; 3,5 ; 4 ou vide). Ceci je sais le faire dans un état (par VBA) mais je souhaite l'avoir dans une requête car j'ai plusieurs moyennes "successives" à effectuer ensuite.
    Je ne sais pas si j'ai été beaucoup plus claire ; merci tout de même de votre attention envers mon problème.

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    rire,

    heu nous étions censés deviner ce qu'est 3+ et 3(+) ???

    bon en adaptant un peu, ça peut donner ça :
    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
    Function GetNumber(ByVal str As String) As Double
    
    ' variable contenant l'ajustement +-(+)(-)
    Dim dblOffset As Double
    
    ' analyse de dernier caractère
    Select Case Right(str, 1)
        Case ")"
            dblOffset = IIf(InStr(str, "-"), -1, 1) * 0.125
            str = Left(str, Len(str) - 3)
        Case "-"
            dblOffset = -0.25
            str = Left(str, Len(str) - 3)
        Case "+"
            dblOffset = 0.25
            str = Left(str, Len(str) - 1)
    End Select
    
    GetNumber = CDbl(str) + dblOffset
    
    End Function
    Citation Envoyé par mandou36
    Excuse moi mais je ne comprend pas bien ce que tu veux me faire faire.
    Je réexplique mon problème en essayant d'être plus clair.
    Dans un requête avoir un colonne où l'on a un nombre ; ce nombre est fonction d'un champs qui peut avoir les valeurs suivantes : 1 ; 2 ; 3- ; 3 ; 3(+) ; 3+ ; 3,5 ; 4 ou "vide".
    Dans la colonne de la requête je souhaite avoir 1 ; 2 ; 3 ; 3,5 ; 4 ou vide (ou encore mieux mais 1 ; 2 ; 2,75 (qui correspond à 3-) ; 3 ; 3,12 (qui correspond à 3(+)) ; 3,25 (qui correspond à 3+) ; 3,5 ; 4 ou vide). Ceci je sais le faire dans un état (par VBA) mais je souhaite l'avoir dans une requête car j'ai plusieurs moyennes "successives" à effectuer ensuite.
    Je ne sais pas si j'ai été beaucoup plus claire ; merci tout de même de votre attention envers mon problème.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci mais j'ai encore un problème : je ne vois toujours pas où l'on peut ajouter du code dans une requête.

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le code est à placer dans un module VBA.

    La requête utilise ensuite la fonction

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci maintenant je pense que je pourrais y arriver (j'essaie tout de suite).

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Je n'ai pas eu beaucoup de cours sur access et on ne nous a pas montré comment utiliser les modules alors je crois que j'ai quelques difficultés (je ne vois pas comment faire le lien entre le module et la requête) mais je viens de trouver une autre manière pour m'en sortir.
    Ainsi, je remercie tout de même les personnes qui ont bien voulu m'aider. Sincères remerciement.

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    as-tu essayé ça ?
    Citation Envoyé par cafeine
    Moi non plus, vu que tu n'as pas inclus ta requete ...

    déjà essaie pour voir si c'est bien du numérique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT GetNumber([MaTable]![ChampNote]) As Note From [MaTable]
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Merci mais ça y est ça fonctionne comme je veux : j'ai créer une table de correspondance et surtout je ne laisse pas la possibilité de laisser une valeur vide (valeur 0 à la place) car j'ai besoin de tous les enregistrements.
    Merci encore

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Citation Envoyé par mandou36
    mais je viens de trouver une autre manière pour m'en sortir.
    Comme ça la prochaine fois que tu sera confronté à un problème où tu dois créer une fonction tu ne saura toujours pas comment faire

    Autre solution : tu fais ce que te propose Cafeine et tu en sais plus ce soir que ce matin

    => tu vas dans les modules et tu en crée un nouveau (appellons le bas_fonction). Dans ce module tu colle le code proposé par Cafeine. Et voila tu as une nouvelle fonction de disponible !

    Pour l'utiliser tu vas dans ton editeur de requete, et tu utilise GetNumber comme n'importe quelle autre fonction !


    A+

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Salut,
    Alors que je viens de finir mon "bidouillage" (qui fonctionne aussi), je viens d'essayer ce que tu m'as dis. En effet ça fonctionne aussi (excepté lorsque j'ai une valeur vide), je me coucherais moins bête que ce matin ; mais quand on m'explique correctement j'y arrive mieux (on ne m'avais jamais expliqué à quoi sert les modules et comment les utiliser) ; donc merci à toi pour tes explications (c'est vraiement sympa).

  19. #19
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par mandou36
    Salut,
    Alors que je viens de finir mon "bidouillage" (qui fonctionne aussi), je viens d'essayer ce que tu m'as dis. En effet ça fonctionne aussi (excepté lorsque j'ai une valeur vide), je me coucherais moins bête que ce matin ; mais quand on m'explique correctement j'y arrive mieux (on ne m'avais jamais expliqué à quoi sert les modules et comment les utiliser) ; donc merci à toi pour tes explications (c'est vraiement sympa).
    il suffit de gérer le cas où la note est vide, ça se dit Null dans Access.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



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

Discussions similaires

  1. [WD-2007] Formulaire : Format de Nombre dans un champ texte
    Par Escandil dans le forum Word
    Réponses: 4
    Dernier message: 06/11/2012, 13h27
  2. Requête SQL complexe Additionner nombre dans un champ texte
    Par spaukensen dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/01/2012, 11h37
  3. [AC-2007] Sélection stricte des nombres dans un champ texte
    Par Razorback dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/08/2009, 09h32
  4. Réponses: 1
    Dernier message: 16/07/2007, 08h26
  5. Réponses: 10
    Dernier message: 23/04/2007, 14h18

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