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

VB.NET Discussion :

Ordre de l'évaluation des conditions


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Par défaut Ordre de l'évaluation des conditions
    Bonjour à tous,

    Question un peu technique, j'ai un While avec 2 conditions dont le résultats de la première conditionne la bonne évaluation de la deuxième...

    En clair et simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    While i < UBound(tab) AND tab(i) = maValeurRecherchee
       'blablabla...
       i = i + 1
    Wend
    La première condition teste si i est toujours dans la limite des indices du tableau, s'il ne l'est pas forcément la deuxième condition plante. En C, je sui presque sûr que ce code fonctionne car à partir du moment ou la première condition est fausse, il ne teste pas le reste, la je pense que VBA teste unitairement chaque condition avant d'en faire un ET logique... Du coup rien ne va plus...

    Est-ce que quelqu'un a une solution pour contrer ce problème sans changer trop l'algo ? J'ai essayé des parenthèses, changer l'ordre des conditions... rien n'y fait...

  2. #2
    Membre éclairé Avatar de Khalyss
    Homme Profil pro
    Développeur .NET et Web
    Inscrit en
    Septembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET et Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 47
    Par défaut
    Citation Envoyé par NeraOne Voir le message
    Bonjour à tous,

    Question un peu technique, j'ai un While avec 2 conditions dont le résultats de la première conditionne la bonne évaluation de la deuxième...

    En clair et simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    While i < UBound(tab) AND tab(i) = maValeurRecherchee
       'blablabla...
       i = i + 1
    Wend
    La première condition teste si i est toujours dans la limite des indices du tableau, s'il ne l'est pas forcément la deuxième condition plante. En C, je sui presque sûr que ce code fonctionne car à partir du moment ou la première condition est fausse, il ne teste pas le reste, la je pense que VBA teste unitairement chaque condition avant d'en faire un ET logique... Du coup rien ne va plus...

    Est-ce que quelqu'un a une solution pour contrer ce problème sans changer trop l'algo ? J'ai essayé des parenthèses, changer l'ordre des conditions... rien n'y fait...
    Hello !
    Au passage on est dans le forum VB.NET et non VBA.
    Pour ton soucis à tu essayé d'imbriqué les deux conditions ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    While i < UBound(tab)
      If tab(i) = maValeurRecherchee
         'blablabla...
          i = i + 1
      End If
    Wend

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Alors il faut savoir que dans vba et vb.net les opérateurs And et Or n'agissent pas comme en C (je reprends ton exemple), toutes les conditions sont évaluées.

    Par contre si c'est du vb.net, si tu souhaites un comportement similaire au C (je reprend ton exemple), il faut utiliser les opérateurs OrElse et AndAlso.
    Si c'est du vba tu n'as d'autre choix que d'imbriquer comme proposé par le précédent post.

    Bon courage

  4. #4
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Citation Envoyé par ostenhard Voir le message
    Bonjour,

    Alors il faut savoir que dans vba et vb.net les opérateurs And et Or n'agissent pas comme en C (je reprends ton exemple), toutes les conditions sont évaluées.

    Par contre si c'est du vb.net, si tu souhaites un comportement similaire au C (je reprend ton exemple), il faut utiliser les opérateurs OrElse et AndAlso.
    Si c'est du vba tu n'as d'autre choix que d'imbriquer comme proposé par le précédent post.

    Bon courage
    Euh, en fait c'est exactement la même chose qu'en C:
    • And équivalent à &
    • Or équivalent à |
    • AndAlso équivalent à &&
    • OrElse équivalent à ||


    après on a tellement l'habitude d'utiliser les 2 derniers qu'on oublie les 2 premiers

    Cordialement !

  5. #5
    Membre éclairé Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Par défaut
    Ok,

    Merci beaucoup pour vos réponses, je ne suis pas très familier avec les technos Microsoft. En gros, ma solution ce serait AndAlso mais en VBA je peux m’assoir dessus, je vais décomposer dans l'algo comme tu me la suggéré jln.vergier, je voulais éviter parce que j'ai 25 fois cette condition mais tant pis !

    Désolé pour l'erreur de forum, je faisais pas la différence en fait, puis j'ai vu que y'avais un forum VB6...

    Merci, ++

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Euh, en fait c'est exactement la même chose qu'en C:
    • And équivalent à &
    • Or équivalent à |
    • AndAlso équivalent à &&
    • OrElse équivalent à ||
    Il faut lire C# ici je suppose, pas C : en C les opérateurs & et | sont exclusivement bit-à-bit, alors qu'en C# ils sont bit-à-bit ou logique suivant le contexte.

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

Discussions similaires

  1. Ordre d'évaluation des conditions dans un if
    Par christian79 dans le forum C++
    Réponses: 33
    Dernier message: 17/05/2013, 01h03
  2. Ordre des conditions dans une clause WHERE, important ou pas en 2012 ?
    Par clavier12AZQSWX dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/03/2012, 11h54
  3. Ordre des condition (If) vba ?
    Par Biggy30 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/02/2012, 17h12
  4. [MySQL] Influence de l'ordre des conditions dans la clause WHERE
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/02/2012, 22h46
  5. Ordre de vérification des conditions dans un "if"
    Par LDPDC dans le forum Général Java
    Réponses: 6
    Dernier message: 20/04/2009, 13h44

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