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 :

Etrange problème rencontré dans mon code.


Sujet :

VBA Access

  1. #1
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut Etrange problème rencontré dans mon code.
    Bonjour !

    Occupé à réaliser une appli pour faire des étiquettes, j'ai composé un formulaire dans lequel l'utilisateur renseigne les champs suivants:
    • Hauteur de l'étiquette
    • Largeur...
    • Marges de la page (Haut, bas, gauche, droite)
    • Espace horizontal entre chaque étiquettes
    • Espace vertical...

    Ce formulaire a pour but de contrôler (et modifier si nécessaire) ces différents paramètres afin que toutes les étiquettes tiennent sur une page.

    Dans la partie "Contrôle", j'ai le code ci-dessous. Si ce dernier semble fonctionner pour la hauteur de la page (29.7 cm), il ne réalise pas le test de la largeur (21 cm)
    Je dois vous avouer que là, j'y perds un peu mon "VBA" ...
    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
    27
    28
    29
    30
    31
    32
    33
    Private Function ControleEtiquettes() As Boolean
    ' Valeurs des champs:
    '   Me.MargeBas1 = 1.5          Me.MargeDroite1 = 0.95
    '   Me.MargeHaut1 = 1.5         Me.MargeGauche1 = 0.95
    '   Me.Hauteur1 = 1.1           Me.Largeur1 = 2.3
    '   Me.EspaceH1 = 0.5           Me.EspaceV1 = 0.5
    Dim I       As Integer
    Dim Hauteur As Double
    Dim Largeur As Double
    
        ControleEtiquettes = True
        
        For I = 1 To 20
            Hauteur = Me.MargeBas1 + Me.MargeHaut1 + Me.Hauteur1 * I + Me.EspaceH1 * (I - 1)
            Debug.Print Hauteur
            If Hauteur = 29.7 Then GoTo Suite
        Next I
        ControleEtiquettes = False
        Exit Function
    ' Valeurs du Debug.Print: (Ok)
    ' 4.1; 5.7; 7.3; 8.9; 10.5; 12.1; 13.7; 15.3; 16.9; 18.5; 20.1; 21.7; 23.3; 24.9; 26.5; 28.1; 29.7
    
    Suite:
        For I = 1 To 10
            Largeur = Me.MargeDroite1 + Me.MargeGauche1 + (Me.Largeur1 * I) + Me.EspaceV1 * (I - 1)
            Debug.Print Largeur
            If Largeur = 21 Then Exit Function
        Next I
        ControleEtiquettes = False
    ' Valeurs du Debug.Print: (Problème)
    '  4.2;7; 9.8; 12.6; 15.4; 18.2; 21 ; 23.8; 26.6; 29.4
    '                               
    End Function
    Un grand merci d'avance à celui ou celle qui pourra me faire comprendre ce... "truc".

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    À l'instinct, j'essaierais avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Largeur = 21.0 Then Exit Function
    Et si ça marche avec 21.0, c'est que c'est un problème d'arrondi (un « Long », comparé à un « Double »).

    ... Mais sans garantie.


    P.-S. Connais-tu ceci : http://jimbolion.developpez.com/articles/generateur/ ?

  3. #3
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Bonjour Claude,

    J'ai déjà tenté de fonctionner "à l'instinct"... et les nôtres se ressemblent :-

    Par contre, voici ce qui est affiché lorsque je saisis 21.0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Largeur As Double
    ...
    If Largeur = 21# Then Exit Function
    J'ai regardé ce que tu me proposes, c'est intéressant mais pas tout à fait ce à quoi je tends...
    Merci tout de même :-)

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Je ne comprends pas 21#.

    Mais, après test, je constate que ça ne fonctionne pas non plus avec ta hauteur de 29.7.



    Tu ne passes pas par Suite:


    Ne peux-tu tester

    hauteur > 28.1 et largeur > 18.2 ?

    Ça n'expliquerait rien, mais si ça marche...

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Ou comme ceci :




    Ceci plaide pour la thèse du complot des arrondis !

  6. #6
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Oui Claude,

    Cela fonctionne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Hauteur >= 29.6999999 And Hauteur < 29.70000001
    Toutefois, cela me reste incompréhensible... je ne comprends pas où se trouvent ces fameux arrondis.
    En tous les cas, merci beaucoup pour ton aide :-)
    Bernard

  7. #7
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    je pense que ça n'est pas un problème d'arrondi mais un problème de stockage de réel double
    Plus généralement, le if = tombe rarement pile et donc le if = est souvent faux
    je préfère if abs(valeur - limite) < epsilon

  8. #8
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Bonsoir !

    Oui, je pense que vous avez raison car j'ai souvent rencontré ce problème en utilisant le "If".
    Je vais tenter le coup dans mes prochaines "œuvres" :-)

    Merci beaucoup pour l'info, je saurai en tenir compte !

    Amicalement.

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    je pense que ça n'est pas un problème d'arrondi mais un problème de stockage de réel double
    C'est mieux dit ainsi !

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

Discussions similaires

  1. Problème inconnu dans mon code
    Par mouchT8 dans le forum C
    Réponses: 5
    Dernier message: 17/05/2008, 20h52
  2. Réponses: 2
    Dernier message: 03/05/2007, 09h00
  3. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  4. [Upload] Problème pour uploader un fichier dans mon code
    Par Peuplarchiste dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2006, 09h48
  5. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53

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