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 :

utlisation de l'opérateur "or" et pas de "and"


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut utlisation de l'opérateur "or" et pas de "and"
    Bonsoir,

    J'ai crée une zone de liste modifiable popur saisir le nom d'une baque.
    Je ne veux qu'un utilisateur n'entre, dans le champ de saisie, que certaines valeurs définies, qui sont les valeurs de cette liste modifiable(ex: credit agricole, ou credit lyonnais ou société generale).
    Le code( procédure evènementielle executée sur sortie) utilisé pour verifier qu'un utilisateur a saisi uniquement une valeur permise est celui ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Modifiable69_Exit(Cancel As Integer)
    If Modifiable69.Value <> "Société Générale" And Modifiable69.Value <> "Crédit Lyonnais" And Modifiable69.Value <> "Crédit Agricole" Then
    MsgBox "il faut saisir une valeur de la liste modifiable dans le champ Banque", vbCritical, "Avertissement"
    Modifiable69.Value = " "
    End If
    End Sub
    Pourquoi mettre l'opérateur or ne convient il pas?
    En effet, si j'utlise cet opérateur, quelle que soit la valeur entrée , le message d'erruer s'affiche.
    Je sais que l'utlisation de OR implique que si une proposition au moins est vérifiée, alors le message d'erreur s'affiche.
    Comment comprendre cela dans mon cas?

    Est ce qu'un opérateur XOR pourrait convenir à la place du ET
    Sinon, que signifie l'argument (Cancel As Integer)

    Merci beaucoup de votre aide.
    Cordialement.
    Nathalie

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    bonsoir,
    pour limiter les possibilités de sélection d'une ZLD, a son contenu il suffit de mettre sa propriété - Limiter à liste à OUi.

  3. #3
    Expert éminent

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Parce que la donnée Crédit Lyonnais ne peut pas à la fois être différent de Crédit Lyonnais et de Société Générale.

    Il suffit juste de decortiquer pour comprendre

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut utilisation de l'opérateur or ou and
    Bonjour et merci de ta réponse.
    Le problème est justement là : je ne comprends pourquoi , du fait qu'on utilise l'opérateur OR ,cela permet de comprendre que credit lyonnais peut être différent de crédit lyonnais et credit agricole à la fois.


    Merci de ton explication.

    Cordialement.

    Nathalie

  5. #5
    Expert éminent

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    En fait il faut commencer par les tables d'opérations :

    Test1 AND Test2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Test1 Test2 Resultat
    Vrai  Vrai  Vrai
    Vrai  Faux  Faux
    Faux  Vrai  Faux
    Faux  Faux  Faux
    Test1 OR Test2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Test1 Test2 Resultat
    Vrai  Vrai  Vrai
    Vrai  Faux  Vrai
    Faux  Vrai  Vrai
    Faux  Faux  Faux
    Prenons donc l'exemple de avec ton test :

    saisie<>"SG" AND saisie <>"LCL"

    Si l'utilisateur saisi "CA", le premier test est vrai, le deuxième est vrai. D'aprés la table au dessus, le résultat est donc Vrai. On affichera donc ton message d'erreur

    Si l'utilisateur saisi "SG", le premier test est faux, le deuxième est vrai. Le résultat, est donc Faux. On ne passe donc pas dans le If et on affichera pas de message

    (idem pour LCL)

    Maintenant avec un OR

    Si l'utilisateur saisi "CA", le premier test est vrai, le deuxième est vrai. D'aprés la table au dessus, le résultat est donc Vrai. On affichera donc ton message d'erreur. Il n'y a pas de changement par rapport à AND dans ce cas

    Si l'utilisateur saisi "SG", le premier test est faux, le deuxième est vrai. Le résultat, est donc ce coup ci vrai (car un seul vrai suffit à rendre le résultat vrai). Et donc du coup, on affiche le message et on interdit à l'utilisateur de saisir SG (idem pour LCL)

    Il faut donc bien que la saisie de l'utilisateur ne soit pas égale à SG et à la fois pas égale à LCL.

    Difficile de m'exprimer, mais j'espère que tu saisis la nuance.

    Maintenant, si c'est pas clair, prend le problème à l'envers.

    if Not (saisie="SG" OR saisie="LCL") then

    Car c'est ça que l'on veut : ne rien faire quand il saisi SG ou LCL (et non pas faire quelque chose quand il saisi une donnée différente de SG ou quand il saisi une donnée différente de LCL)

    Et la règle des opérateurs booleen s'applique avec la distributivité ce qui donne :

    If Not Saise="SG" AND Not saisie="LCL" Then

    Car Non(A OU B) équivaut à (Non A et Non B)

    Ce qui donne bien

    If saisie<>"SG" AND saisie<>"LCL" Then

    Car Not saisie="X" equivaut à saisie<>"X"

    En fait, c'est assez difficile à comprendre pour certains parce qu'en langage parlé, on n'exprime finalement pas les vraies conditions. C'est l'histoire des contraires :

    Quel est le contraire de "J'ai une pomme et une poire". On serait tenté sur le coup de répondre : je n'ai pas de pomme, ni de poire. Et pourtant, il suffit que j'ai une poire pour que je ne puisse dire que j'ai une pomme et une poire

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