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

Macros et VBA Excel Discussion :

Une variable nulle sur 4


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Une variable nulle sur 4
    Bonjour,

    Je pensais que cette formule posait la condition qu'un seul élément devait être nul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFirst = 0 Xor CSecond = 0 Xor CThird = 0 Xor CFour = 0 Xor CFive = 0
    Ce n'est apparemment pas le cas.

    Je crois que je dois faire ce code à la place :

    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
    count=0
    If CFirst = 0 then
      count +=1
    end if
    If CSecond = 0 then
      count +=1
    end if
    If CThird = 0 then
      count +=1
    end if
    If CFour = 0 then
      count +=1
    end if
    If CFive = 0 then
      count +=1
    end if
     
    If count = 1 then
       traitement
    end if
    Pourriez-vous m'aider à ce sujet, svp? Merci d'avance.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Première remarque : donner à une variable le nom d'une méthode ou d'une propriété comme "count", ça n'est pas une bonne idée.
    Ma méthode perso : utiliser au maximum le français dans le nom de mes variables. Comme VBA est anglophone, ça évite une bonne partie des recouvrements.

    Citation Envoyé par Arsene12 Voir le message
    Je pensais que cette formule posait la condition qu'un seul élément devait être nul.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFirst = 0 Xor CSecond = 0 Xor CThird = 0 Xor CFour = 0 Xor CFive = 0
    Ce n'est apparemment pas le cas.
    J'ai pourtant testé et ça semble fonctionne.
    Quel cas ne fonctionne pas ?
    Tu es sûr que le problème ne vient pas des données dans les variables ?

    Je crois que je dois faire ce code à la place :
    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
    count=0
    If CFirst = 0 then
      count +=1
    end if
    If CSecond = 0 then
      count +=1
    end if
    If CThird = 0 then
      count +=1
    end if
    If CFour = 0 then
      count +=1
    end if
    If CFive = 0 then
      count +=1
    end if
     
    If count = 1 then
       traitement
    end if
    La même chose en plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If IIf(CFirst = 0, 1, 0) + IIf(CSecond = 0, 1, 0) + IIf(CThird = 0, 1, 0) + IIf(CFour = 0, 1, 0) + IIf(CFive = 0, 1, 0) = 1  then
       traitement
    end if

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ou aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (cFirst = 0) + (cSecond = 0) + (cThird = 0) + (cFour = 0) + (cFive = 0) = -1 Then

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Salut mercatog,

    J'ai remarqué cette différence entre le tableur et VBA

    Dans le tableur

    Si C2 = 0 alors la formule dan Excel =(C2= 0)*1 retourne 1

    En VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print (Range("C2") = 0) * 1
    retourne -1

    Idem pour une variable numérique pour cette discussion comme le montre la formule de mercatog.

    Bizarre, cette différence

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour Marcel

    En effet, sur la feuille VRAI/ FAUX c'est 1/ 0

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci pour vos réponses. Je remplacerai dorénavant count par countX par exemple, c'est préférable effectivement. J'ai testé les codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (cFirst = 0) + (cSecond = 0) + (cThird = 0) + (cFour = 0) + (cFive = 0) = -1 Then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IIf(CFirst = 0, 1, 0) + IIf(CSecond = 0, 1, 0) + IIf(CThird = 0, 1, 0) + IIf(CFour = 0, 1, 0) + IIf(CFive = 0, 1, 0) = 1 Then
    et ils marchent, tandis que le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFirst = 0 Xor CSecond = 0 Xor CThird = 0 Xor CFour = 0 Xor CFive = 0
    ne donne pas le résultat escompté.

    J'ai une peu de mal à comprendre ces codes car je ne suis pas expert en excel. Je n'aurais pas pu trouver la solution tout seul.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'ai une peu de mal à comprendre ces codes
    La fonction IIf() fonctionne exactement comme la fonction SI() de Excel.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    Je pensais que cette formule posait la condition qu'un seul élément devait être nul.
    CFirst = 0 Xor CSecond = 0 Xor CThird = 0 Xor CFour = 0 Xor CFive = 0
    Ce n'est apparemment pas le cas.
    Sauf que tu dois exécuter les XOR 1 par 1, le résultat servant le XOR suivant.
    La table de vérité du XOR est : ou l'un, ou l'autre, mais pas les deux. 0 XOR 1 et 1 XOR 0 => 1, 0 XOR 0 et 1 XOR 1 => 1
    Si tu prends seulement les 3 premiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CFirst = 1
    CSecond = 0
    CThird = 0
    que VBA exécute séquentiellement les opérations de la gauche vers la droite ou de la droite vers la gauche tu fais (je met 1 pour TRUE) :
    (CFirst = 0 Xor CSecond = 0) Xor CThird = 0 => (1 XOR 0) XOR 0 => (1) XOR 0 => 1
    ou
    CFirst = 0 Xor (CSecond = 0 Xor CThird = 0) => 1 XOR (0 XOR 0) => 1 XOR (0) => 1

    Ca ne peut donc pas aller pour ton besoin.
    eric

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/02/2009, 08h19
  2. [MySQL] initialiser une variable à NULL
    Par papilou86 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/07/2008, 12h01
  3. Réponses: 2
    Dernier message: 15/12/2007, 15h36
  4. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  5. [SYBASE ASE] Rajouter une contrainte null sur une colonne
    Par Little_Goldo dans le forum Sybase
    Réponses: 1
    Dernier message: 09/02/2005, 10h48

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