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 :

problème avec condition If et And [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Par défaut problème avec condition If et And
    Bonjour tout le monde,
    J'ai un problème avec une condition If qui réagit bizarrement
    Dans un formulaire, je teste des formats saisis pour les comparer à des formats de machine de manière à ce qu'il n'y ai pas d'erreur
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Private Sub ft_mini_maxi()
    'comparaison avec format mini maxi machine
    Dim strSql1 As String
    Dim strSql2 As String
    Dim strSql3 As String
    Dim strSql4 As String
    Dim format_mini_h As Integer
    Dim format_mini_l As Integer
    Dim format_maxi_h As Integer
    Dim format_maxi_l As Integer
    Dim mon_tirage_hauteur As Integer
    Dim mon_tirage_largeur As Integer
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim rs3 As DAO.Recordset
    Dim rs4 As DAO.Recordset
    strSql1 = "SELECT TBL_machine_offset.Ft_min_hauteur, machtps.N° FROM TBL_machine_offset INNER JOIN machtps ON TBL_machine_offset.num_machine_offset = machtps.num_machine WHERE (((machtps.N°)=" & Me.N° & "));"
    strSql2 = "SELECT TBL_machine_offset.Ft_min_largeur, machtps.N° FROM TBL_machine_offset INNER JOIN machtps ON TBL_machine_offset.num_machine_offset = machtps.num_machine WHERE (((machtps.N°)=" & Me.N° & "));"
    strSql3 = "SELECT TBL_machine_offset.Ft_max_hauteur, machtps.N° FROM TBL_machine_offset INNER JOIN machtps ON TBL_machine_offset.num_machine_offset = machtps.num_machine WHERE (((machtps.N°)=" & Me.N° & "));"
    strSql4 = "SELECT TBL_machine_offset.Ft_max_largeur, machtps.N° FROM TBL_machine_offset INNER JOIN machtps ON TBL_machine_offset.num_machine_offset = machtps.num_machine WHERE (((machtps.N°)=" & Me.N° & "));"
    Set rs1 = CurrentDb.OpenRecordset(strSql1)
    Set rs2 = CurrentDb.OpenRecordset(strSql2)
    Set rs3 = CurrentDb.OpenRecordset(strSql3)
    Set rs4 = CurrentDb.OpenRecordset(strSql4)
    format_mini_h = rs1("Ft_min_hauteur").Value
    format_mini_l = rs2("Ft_min_largeur").Value
    format_maxi_h = rs3("Ft_max_hauteur").Value
    format_maxi_l = rs4("Ft_max_largeur").Value
    mon_tirage_hauteur = Me.ft_tirage_haut.Value
    mon_tirage_largeur = Me.ft_tirage_larg.Value
    'comparaison format mini
    If mon_tirage_hauteur < format_mini_h Or mon_tirage_largeur < format_mini_l _
    And mon_tirage_hauteur < format_mini_l Or mon_tirage_largeur < format_mini_h Then
    MsgBox "le format papier indiqué est plus petit que le format minimum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    Me.ft_tirage_haut.SetFocus
    End If
    'comparaison format maxi
    If mon_tirage_hauteur > format_maxi_h Or mon_tirage_largeur > format_maxi_l _
    And mon_tirage_hauteur > format_maxi_l Or mon_tirage_largeur > format_maxi_h Then
    MsgBox "le format papier indiqué est plus grand que le format maximum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    Me.ft_tirage_haut.SetFocus
    End If
    rs1.Close
    Set rs1 = Nothing
    rs2.Close
    Set rs2 = Nothing
    rs3.Close
    Set rs3 = Nothing
    rs4.Close
    End Sub
    la comparaison au format minimum fonctionne très bien, aucun problème
    par contre la comparaison au format maximum délire complètement et je n'y comprends rien.
    la machine testée à un format maxi de 520 x 740, je fais le test en indiquant 450 x 640 et la condition se vérifie alors qu'elle ne le devrait pas (voir copie d'écran)
    très sincèrement je n'y comprends plus rien et ça commence vraiment à me rendre chèvre.
    si quelqu'un avait une idée je serais preneur.
    Merci d'avance
    Images attachées Images attachées   

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

    Je crois que votre comparaison avec le format minimum fonctionne parce qu'aucune des conditions n'est vraie.

    Par contre, dans l'exemple de la comparaison avec le format maximum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    format_maxi_h = 520
    format_maxi_l = 720
    mon_tirage_hauteur = 450
    mon_tirage_largeur = 640
    
    If mon_tirage_hauteur > format_maxi_h And mon_tirage_largeur > format_maxi_l _
    And mon_tirage_hauteur > format_maxi_l Or mon_tirage_largeur > format_maxi_h Then
    MsgBox "le format papier indiqué est plus grand que le format maximum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    End If
    la condition indiquée en rouge est vraie et c'est elle qui est retenue.

    C'est le problème des "Or" inclus dans des "And" et de la priorités des opérateurs.

    Je regarde pour reformuler votre code, mais vous aurez peut-être d'autres réponses d'ici-là.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If mon_tirage_hauteur > format_maxi_h Or mon_tirage_largeur > format_maxi_l Then
    MsgBox "le format papier indiqué est plus grand que le format maximum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    ElseIf mon_tirage_hauteur > format_maxi_l Or mon_tirage_largeur > format_maxi_h Then
    MsgBox "le format papier indiqué est plus grand que le format maximum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    End If
    Vous pouvez l'adapter pour la comparaison du format minimum.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Par défaut
    Citation Envoyé par jacques_jean Voir le message
    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If mon_tirage_hauteur > format_maxi_h Or mon_tirage_largeur > format_maxi_l Then
    MsgBox "le format papier indiqué est plus grand que le format maximum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    ElseIf mon_tirage_hauteur > format_maxi_l Or mon_tirage_largeur > format_maxi_h Then
    MsgBox "le format papier indiqué est plus grand que le format maximum de la machine sélectionnée" & vbCrLf & "veuillez saisir un format approprié", vbOKOnly + vbDefaultButton1 + vbExclamation, "problème de format papier"
    End If
    Vous pouvez l'adapter pour la comparaison du format minimum.
    bonjour Jacques,
    merci de vous être penché sur mon cas mais mon problème reste entier, je reviendrais dessus à tête reposé (le lundi ne me vaut rien).
    à propos du format minimum, ce que je voulais dire, c'est que les conditions fonctionnent et si le format saisi est plus petit (et ce dans n'importe quel sens) ça déclenche bien la condition.
    je vais peut être essayer en deux sub distinctes, on sait jamais, je n'en serais plus à une bizarrerie près.

    en fait le problème vient surtout du fait que je cherche à donner le maximum de possibilité aux utilisateurs et à pouvoir rentrer les formats dans tous les sens. un coup 520 x 740 et l'autre 740 x 520. je vais peut être limiter la saisie à une seule possibilité.
    merci encore

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

Discussions similaires

  1. problème avec condition " if " et "liste" pour programme
    Par hypnotief dans le forum Général Python
    Réponses: 10
    Dernier message: 22/03/2011, 21h49
  2. Problème avec condition IF
    Par bambino13 dans le forum ASP
    Réponses: 7
    Dernier message: 04/05/2009, 23h50
  3. Parcourir ligne - Problème avec conditions
    Par JP1983 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/02/2008, 22h29
  4. [MySQL] Problème avec condition if + is_int
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 25/08/2006, 14h12
  5. Réponses: 6
    Dernier message: 15/06/2006, 15h15

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