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 :

Type de données pour effectuer une différence en vba


Sujet :

Access

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut Type de données pour effectuer une différence en vba
    Bonjour à tous,

    J'ai effectuer une recherche et j'ai trouvé que le(s) type(s) de donnée qu'il faut utiliser pour "manier" des nombre avec des virgule c'est :

    SINGLE : Réel simple, à virgule flottante en simple précision, cela s'étend de : -3.402823E38 à -1.401298E-45 pour le négatif et de 1.401298E-45 à 3.402823E38 pour le positif.

    DOUBLE : Réel double, à virgule flottante en double précision, cela s'étend de : -1.79769313486231E308 à 4.94065645841247E-324 pour le négatif et de 4.94065645841247E-324 à 1.79769313486232E308 pour le positif.

    Dans mon cas, j'utilise le type SINGLE car il utilise que 4 octets comparé au type DOUBLE qui en utilise 8.

    PROBLEME :
    J'ai un sous-formulaire qui contient 4 champs principaux qui sont :

    "masse"_______"masse_controle"_______"pieces"______"pieces_controle"

    (les _ entre les noms sont là à titre d'espace pour une meilleur lisibilité du post)

    Les champs masse et masse_controle sont de type : Numérique --> Réel Double avec 2 décimal dans ma table.

    Les champs pièces et pièces_controle sont de type : Numérique --> Entier long dans ma table.

    Ce que je cherche à faire dans mon sous-formulaire c'est tester que la différence entre le champ masse et masse_controle ne soit pas plus grande que 0.5 voici le code que j'ai fait (c'est une fonction que j'appelle depuis l'évènement perte focus de mon champ controle_masse)

    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
    Public Function fn_ToleranceGramme(sin_MasseEntree As Single, sin_MasseControle As Single)
     
    Dim sin_ToleranceGramme As Single
    Dim sin_Difference As Single
     
    sin_Difference = (sin_MasseControle - sin_MasseEntree)
    sin_ToleranceGramme = "0.5"
     
     
    If (sin_Difference <> "0") Then
        If (sin_Difference > sin_ToleranceGramme) Or (sin_Difference < sin_ToleranceGramme) Then
     
            MsgBox ("La différence des masse est hors tolérance !" & vbCrLf & " Différence [g] : " & sin_Difference & _
            "" & vbCrLf & " Tolérence [g] : +/- 0.5"), vbCritical, "Erreur de masse"
     
     
        End If
    End If
    End Function
    Lorsque je remplis mon formulaire, si je rentre comme donnée :

    MASSE_____________CONTROLE_MASSE
    12.03______________15.02 --> Pas de problème
    12________________ 13 --> Pas de problème
    15.02______________13--> Pas de problème
    15.02______________15.01 --> PROBLEME !!! --> différence = -1.000023E-02
    15.02______________15.03 --> PROBLEME !!! --> différence = 9.999275E-03

    Pour les 2 dernières lignes ci-dessus, je ne comprends pas pourquoi mon MSGBOX s'affiche car les conditions sont respectées ... ...

    Je ne comprend pas vraiment pourquoi j'ai cette erreur. J'ai essayé d'utiliser le type de données DOUBLE et cela me fait la même chose ...

    Si vous avez une idée, elle est la bienvenue ...

    Merci de votre aide ...
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    bonjour,

    voila un ptit truc qu'il faudrait que tu revois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If (sin_Difference > sin_ToleranceGramme) Or (sin_Difference < sin_ToleranceGramme) Then
    ici tu dis que si la différence est plus grande que la tolérance ou si la différence est plus petite que la tolérance ensuite ...

    le fait est que si la différence n'est pas égale à ta tolérance tu auras ta messagebox

    essai de voir pour travailler avec la valeur absolu de ta différence sa simplifira un peu, un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if différence < 0 then différence = différence*-1
    if différence > tolérance then msgbox
    voila

  3. #3
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Merci stan21 ...

    Je vais essayer tout cela maintenant ...


    Le coup de la valeur absolue, je n'y avait pas pensé ... mais c'est vraiment pas bête ....

    A plus ...
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    préviens si ça marche (et si ça marche po aussi d'ailleur )

  5. #5
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Alors ...

    Voila le nouveau 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
    Public Function fn_ToleranceGramme(sin_MasseEntree As Single, sin_MasseControle As Single)
     
        Dim sin_ToleranceGramme As Single
        Dim sin_Difference As Single
     
        sin_Difference = ((sin_MasseControle) - (sin_MasseEntree))
        sin_ToleranceGramme = "0.5"
     
     
        If sin_Difference < 0 Then
            sin_Difference = sin_Difference * -1
        End If
     
        If sin_Difference > sin_ToleranceGramme Then
     
            MsgBox ("La différence des masse est hors tolérance !" & vbCrLf & " Différence [g] : " & Round(sin_Difference, 2) & _
            "" & vbCrLf & " Tolérence [g] : +/- 0.5"), vbCritical, "Erreur de masse"
        End If
     
    End Function
    J'ai ajouter un ROUND pour que j'aie un arrondi ... c'est mieux et plus précis comme ça ...

    Alors ce code est : FONCTIONNEL !!!

    C'est super ...

    Merci pour ton aide Stan21 ... c'est vrai que je n'avais pas pensé à utiliser directement la valeur absolue ... ...

    Merci mille fois
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

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

Discussions similaires

  1. Choix d'un type de données pour une clef
    Par bmayer dans le forum Langage SQL
    Réponses: 12
    Dernier message: 05/10/2013, 22h43
  2. type de données pour une liste
    Par sihamnet dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 29/07/2012, 14h46
  3. Meilleur type de données pour un prix
    Par linar009 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/08/2006, 14h41
  4. liste deroulante pour effectuer une recherche
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/04/2006, 09h27
  5. [Conception] Comment créer un lien pour effectuer une requete ?
    Par Poutchou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/03/2006, 11h54

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