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

Discussion: Aidez-moi à comprendre cette ligne [XL-2016]

  1. #21
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    Si If 12345 then revenait à dire If True Then, alors if 12345 then produirait le même résultat que if 12345 = true then, or ce n'est pas le cas. C'est donc bien que l'évaluation se fait sur FAUX/PAS FAUX et pas sur FAUX/VRAI.

    Je maintiens donc que dire [...]true c'est toutes valeur <>0[...] est une erreur, à tout le moins conceptuelle, même si j'admets que dans beaucoup de cas, le résultat revient au même en terme d'exécution de code. Sauf True et -1, toute valeur différente de 0 est NOT FALSE et pas TRUE. Et cela va bien au delà d'un simple distinguo.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #22
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 552
    Points : 16 229
    Points
    16 229
    Billets dans le blog
    1

    Par défaut

    Ca veut donc bien dire que tout ce qui n'est pas 0 est TRUE, ou alors on ne parle pas la même
    Bien sur que non tu le demontre bien au poste #13!

    Parle en ton nom et pas au mien les deux test que je défends fonctionnent.

    ça fonctionne dans tous les langage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if 1234 then 'est évalué comme true en opposition a 0
    If 123<>0 then ' Retourne true de l'evaluation
    If instr("toto","t") then

  3. #23
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : septembre 2003
    Messages : 5 283
    Points : 11 855
    Points
    11 855

    Par défaut

    Bonjour,

    Selon ma compréhension :
    Dans If 6 Then, 6 n'est pas un booléen.
    VBA essaye donc de le convertir (comme avec CBool).
    Tout valeur numérique <> 0 sera convertie en True, et une valeur numérique de 0 sera convertie en False.
    Si la donnée est un String ne contenant pas un numérique => KO.

    On ne teste donc pas que 6 est True (cela n'aurait aucun sens), mais que la conversion de 6 en booléen selon les règles de VBA renvoi True.

    Cela est parfois utilisé pour des fonctions (API notamment) qui renvoient 0 en cas d'erreur.
    C'est juste par flemme, pour ne pas coder un test <> 0...

  4. #24
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    6 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 6 894
    Points : 11 962
    Points
    11 962

    Par défaut

    Sauf True et -1, toute valeur différente de 0 est NOT FALSE et pas TRUE. Et cela va bien au delà d'un simple distinguo.
    ...
    nous disons la même chose ...
    distinguo à faire entre "prendre la valeur de " et "être".
    et elle n' "est" pas NOT FALSE, seule sa valeur se compare (par conversion) à celle de NOT FALSE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox 25 = Not False ' --- faux
    MsgBox CBool(25) = Not False  ' ---vrai
    MsgBox CBool(25) = CInt(Not False) ' ---vrai
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro). Ne m'en proposez donc pas.

    Rien n'est plus lamentablement vile qu'un joueur qui pipe les dés
    Celui qui prétend déterminer une cause fondamentale sur la base d'un effet n'a aucune chance d'avoir mon estime. S'il insiste, il a alors droit à mon total mépris.

  5. #25
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    juste pour aller au delà du distinguo. Avec la plage suivante, vous constatez comment fonctionne Excel. Ca montre bien que, pour Excel, ce que dit Robert est erroné, sinon, on aurait des VRAI partout en B sauf sur en B5 et B6. Ceci va d'ailleurs illustrer qu'Excel ne se comporte pas comme le VBA lors de l'évaluation booléenne explicite (A) ou implicite (C).

    [EDIT] Ajout de la colonne C sur l'image EXCEL pour montrer le même teste qu'en VBA
    Nom : 2019-01-08_215945.png
Affichages : 35
Taille : 6,3 Ko

    Avec le code suivant qui s'appuie sur A2:A8, on va voir que les réponses sont différentes selon qu'il y a test dl'égalité à VRAI ou pas. Cela montre donc bien que Robert a tort de dire que tout ce qui est différent de 0 est TRUE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TEst()
      Dim r As Range
     
      For Each r In Range("a2:a8")
        If r.Value Then Debug.Print "Ca vaut TRUE" Else Debug.Print "Ca vaut FALSE"
      Next
      Debug.Print "-----"
      For Each r In Range("a2:a8")
        If r.Value = True Then Debug.Print "Ca vaut TRUE" Else Debug.Print "Ca vaut FALSE"
      Next
    End Sub
    Le résultat est parlant. Si Robert avait raison, les deux lignes renverraient le même résultat. Et cela illustre le fait que le IF ne teste pas sur le TRUE, mais sur le FALSE.
    Nom : 2019-01-08_204019.png
Affichages : 38
Taille : 2,6 Ko

    Et ca va bien plus loin que le distinguo car si on doit évaluer une colonne Excel en VBA, ne pas tenir compte de cette différence peut amener à des résultats surprenants.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #26
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : septembre 2003
    Messages : 5 283
    Points : 11 855
    Points
    11 855

    Par défaut

    je m'étais trompé un peu, j'ai inversé.
    On a bien :
    Tout valeur numérique <> 0 sera convertie en True, et une valeur numérique de 0 sera convertie en False.
    L'exemple de Pierre est intéressant.
    Il montre bien la différence entre les deux écritures.
    est équivalent à :
    Donc rien à voir avec :
    Dans la question initiale on a 6 en dur.
    Ce n'est probablement pas le cas, et si le code est trop simplifié dans la question on ne peut pas répondre correctement et on s'embrouille.

  7. #27
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    6 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 6 894
    Points : 11 962
    Points
    11 962

    Par défaut

    Je croyais que tu avais compris à quoi (l'exposé de l'aide en ligne) se référait "le distinguo à faire".
    Question de lecture, donc ...
    Sur ce --->> je vais au dodo
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro). Ne m'en proposez donc pas.

    Rien n'est plus lamentablement vile qu'un joueur qui pipe les dés
    Celui qui prétend déterminer une cause fondamentale sur la base d'un effet n'a aucune chance d'avoir mon estime. S'il insiste, il a alors droit à mon total mépris.

  8. #28
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    il est d'ailleurs intéressant de constater la différence de résultat entre ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if 1 = true then msgbox "TRUE" else msgbox "FALSE" ' ==> FALSE
    if "1" = true then msgbox "TRUE" else msgbox "FALSE" ' ==> TRUE
    Cela tendrait à montrer que si la valeur testée est numérique, le test est directement binaire, sans transtypage (on teste si c'est différent de 0), alors que si on teste une valeur textuelle, le VBA va essayer de la transtyper en boolean puis évaluer.

    La paresse des "raccourcis" pourrait donc amener à des problèmes d'exécution selon ce qui est reçu et testé (notamment en provenance d'un inputbox ou d'un textbox de userform, par exemple).

    Citation Envoyé par dysorthographie Voir le message
    Bien sur que non tu le demontre bien au poste #13![...]
    Quand je disais "ça veut donc bien dire...", le "ça" portait sur ce que tu disais, évidemment. J'ai édité mon post #19 pour éviter les méprises et les interprétations douteuses

    Citation Envoyé par Pierre Fauconnier Voir le message
    [...]


    EDIT (pour éviter les méprises)
    Ca Ce que tu dis veut donc bien dire que tout ce qui n'est pas 0 est TRUE, ou alors on ne parle pas la même langue.[...]
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #29
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 552
    Points : 16 229
    Points
    16 229
    Billets dans le blog
    1

    Par défaut

    Robert a tort de dire que tout ce qui est différent de 0 est TRUE.
    Non je dis que tous ce qui est opposé à zéro est évalué à true

    5 ne peut pas être vrai mais déférant de faux ne cherches à tourner la question.

    En aucun cas 5 ne peux être égal à true mais en perpétuel opposition à zéro c'est ce que je n'arrête pas de dire.

    0=faux? Oui! 5<>faux ?Oui!

    Et voila ce que tu demontre au poste #19
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
    If 123456789 Then MsgBox "Yeah" Else MsgBox "Hé me***"
    If 123456789 = True Then MsgBox "Yeah" Else MsgBox "Hé me***"
    End Sub

  10. #30
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    Citation Envoyé par dysorthographie Voir le message
    Non je dis que tous ce qui est opposé à zéro est évalué à true

    5 ne peut pas être vrai mais déférant de faux ne cherches à tourner la question.

    En aucun cas 5 ne peux être égal à true mais en perpétuel opposition à zéro c'est ce que je n'arrête pas de dire.
    On va arrêter là parce que tu commences vraiment à me les briser menu. J'ai suffisamment cité ce que tu as dit pour montrer clairement que tu n'as pas dit "est évalué à true". Tu as dit "true c'est toutes valeur <>0" ce qui n'est pas la même chose et qui est erroné, à tout le moins dans la logique mise en place, comme je l'ai montré avec différents codes. Si tu ne peux pas comprendre cela et les implications que ces différences peuvent avoir dans l'exécution d'un code, je n'y peux rien.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #31
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    6 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 6 894
    Points : 11 962
    Points
    11 962

    Par défaut

    Juste au moment de m'endormir, j'ai pensé qu'il n'y avait rien de mieux qu'une exclusion logique pour démontrer que ce qui, dans une expression conditionnelle "prenait la valeur de ceci" n'en faisait pour autant pas "ceci"
    et donc --->>
    une exclusion logique entre deux expressions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox True Xor 25 ' ---->> -26
    MsgBox False Xor 25 ' ---->> 25
    Voilà qui démontre bien que 25 et true sont par exemple des valeurs différentes

    Pourquoi avoir rayé ce "s" ? --->> Même l'utilisation du verbe être est malencontreuse. Car une valeurA n'est pas une valeurB. Elle lui est au mieux égale. Le verbe être ne devrait être utilisé que pour des objets, des choses, des personnes, etc ..., pas des valeurs
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro). Ne m'en proposez donc pas.

    Rien n'est plus lamentablement vile qu'un joueur qui pipe les dés
    Celui qui prétend déterminer une cause fondamentale sur la base d'un effet n'a aucune chance d'avoir mon estime. S'il insiste, il a alors droit à mon total mépris.

  12. #32
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 552
    Points : 16 229
    Points
    16 229
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par dysorthographie Voir le message
    en fait tout teste est true/false, true c'est toutes valeur <>0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If 123456789 Then Exit Sub
    Voilà la toute première chose que j'ai dite true c'est toute valeur <>0

    Tu peux dire ce que tu veux ça ce vérifie !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if 5 then
    If 5<>0 then

  13. #33
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : septembre 2003
    Messages : 5 283
    Points : 11 855
    Points
    11 855

    Par défaut

    Citation Envoyé par unparia Voir le message
    Juste au moment de m'endormir, j'ai pensé[…]
    J'ai un super doudou musical à te conseiller pour t'endormir paisiblement. Un hibou tout doux, ma fille adore.

    Citation Envoyé par unparia Voir le message
    Voilà qui démontre bien que 25 et true sont par exemple des valeurs différentes
    De toute façon un booléen n'est pas un numérique, donc aucun risque…
    Il y a des conversions implicites dans beaucoup de codes de cette discussions, ce qui complique l'analyse.

    C'était quoi la question d'origine au fait ? Je n'ai toujours pas compris le problème initial.

  14. #34
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    Robert, pour tenter de terminer sur une note plus positive.

    Ce que j'ai voulu démontrer en disant que tu étais dans l'erreur avec true c'est toutes valeur <>0, c'est que si l'on veut tester qu'une valeur EGALE True, on doit le faire explicitement avec un vrai test d'égalité (Valeur = True), sans quoi on s'expose à des déconvenues. Je m'y suis peut-être mal pris et peut-être mal exprimé...

    Et je conclurai avec un petit test rigolo, qui montre que 1 vaut VRAI, "1" vaut VRAI", 1 = TRUE vaut Faux (pas de transtypage, évalutation binaire), que "1" = True vaut Vrai (transtypage implicite), que "1"= 1 (transtypage implicite), mais que la conversion explicite en booléen met tout le monde d'accord... Rigolo, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Test1()
    If 1 Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> TRUE
    If "1" Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> TRUE
    If 1 = True Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> FALSE
    If "1" = True Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> TRUE
    If "1" = 1 Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> TRUE
    If CBool(1) = True Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> TRUE
    If CBool("1") = True Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> TRUE
    If "a" Then MsgBox "TRUE" Else MsgBox "FALSE" ' ==> AIE
    End Sub
    Conclusions: Attention à la paresse dans la rédaction du code...

    Allez, bonne nuit à tous
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #35
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 552
    Points : 16 229
    Points
    16 229
    Billets dans le blog
    1

    Par défaut


    C'est pourquoi if 6 then exit sub
    Ce que je voulais démonter c'était l'expression original aiguillait toujours sur exit sub.

    Qu'il n'était pas forcément obligatoire d'établir un égalité pour qu'un test soit vue comme une true {aberration,astuce peut importe }

    If true then est une évaluation en soit.

    Et oui c'est rigole.

  16. #36
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    Et moi je voulais montrer les dangers de cette {aberration,astuce peut importe }...

    PS: Je n'aurais peut-être pas dû dire que "tu avais tort" ou que "tu étais dans l'erreur" (termes que l'on devrait bannir de notre langage sur les forums car il manque tout le non verbal qui va avec, ce qui laisse croire à une attaque personnelle alors qu'il n'en est rien, même si l'énervement est venu par la suite). Désolé si je t'ai semblé désobligeant, ce n'était pas mon intention...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #37
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 292
    Points : 35 399
    Points
    35 399
    Billets dans le blog
    40

    Par défaut

    Citation Envoyé par Arkham46 Voir le message
    [...]

    C'était quoi la question d'origine au fait ? Je n'ai toujours pas compris le problème initial.


    La question initiale était: Dans le code suivant, que représente le "6"?
    Ca nous a amené à dériver sur les évaluations booléennes.

    Pour répondre à la question initiale (et en étant d'accord avec Robert sur ce point), tester une constante n'a aucun sens et est donc inutile puisque le résultat du test sera par définition constant. Dans le cas de ce test, le résultat sera toujours évalué à True (tautologie).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #38
    Expert éminent sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 552
    Points : 16 229
    Points
    16 229
    Billets dans le blog
    1

    Par défaut

    Bonjour,
    Juste une petite précision sur le if.

    Le if ne considère que le zéro en retour d'expression et toutes autre valeurs par opposition.

    J'utilise souvent ça en sommant les checkbox par exemple.

    J'appliques également le fait que le + est un OR et * un AND et ça c'est l'algèbre de Boole.

    Et on est bien d'accord sur le fait que true=-1 => 6<>-1 => 6<>false=true=> 0<>false=false

  19. #39
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    6 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 6 894
    Points : 11 962
    Points
    11 962

    Par défaut

    Hé bé ...
    Encore là ...
    Bon. Je vais donc vous inviter à des opérations scabreuses. Par exemple :
    Et vous laisse là.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro). Ne m'en proposez donc pas.

    Rien n'est plus lamentablement vile qu'un joueur qui pipe les dés
    Celui qui prétend déterminer une cause fondamentale sur la base d'un effet n'a aucune chance d'avoir mon estime. S'il insiste, il a alors droit à mon total mépris.

  20. #40
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    9 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 9 850
    Points : 22 052
    Points
    22 052

    Par défaut

    Et on est bien d'accord sur le fait que true=-1 => 6<>-1 => 6<>false=true=> 0<>false=false
    Ben non. Tu ne peux pas comparer des torchons et des serviettes. TRUE = TRUE, pas à -1. Informatiquement, c'est une mauvaise façon de raisonner.

    Exemple : en C, contrairement à C++, tu n'as pas de type booléen. On créé une constante TRUE, et une FALSE avec en exemple 1 pour TRUE et 0 pour FALSE tout aussi valable que 0 pour TRUE et -1 pour FALSE.

    Si je te dis que 11=9, tu me crois ? Pourtant c'est vrai dans le cas ou la partie gauche de l’équation est exprimée en octal et la partie droite en décimal, ce qu'on ne fait jamais.

    Tout comme on ne compare pas un caractère avec un nombre. Et dans les rares cas ou on le fait, on fait un transtypage ou c'est le langage qui va convertir l’élément d'un type x à y comme il peut avec ses propres règles. Et encore plus important en sachant que vba est faiblement typé.

    Bonjour le risque de comportement indéfini comme on dit : résultat qui peut fonctionner 10000 fois mais merder dans un cas bien précis - arrachage de cheveu garanti pour le déboguage.

    Dans l'exemple cité If 6 Then, cela revient à écrire If 6=6 Then ce qui ne sert à rien.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [XL-2007] Aidez moi à comprendre cette formule
    Par AKAKO dans le forum Excel
    Réponses: 5
    Dernier message: 27/10/2014, 17h01
  2. aidez moi pour cette requete
    Par bassoum dans le forum MS SQL-Server
    Réponses: 5
    Dernier message: 12/05/2008, 10h51
  3. Réponses: 3
    Dernier message: 25/03/2008, 10h46
  4. AIdez moi à optimiser cette requete MySQL SVP
    Par petozak dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/09/2005, 16h16

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