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 :

If Not .. Is Nothing Then différence 32 vs 64 bits


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut If Not .. Is Nothing Then différence 32 vs 64 bits
    Bonjour,

    J'ai développé les classes clsWindow et clsWindows qui se basent et encapsulent l'API Windows.

    clsWindows est en fait une classe collection de clsWindow.

    Dans clsWindows, j'ai la méthode find, ainsi je peux chercher une clsWindow de la façon suivante : Dim window As clsWindow: Set window = windows.find(classname:="..", name:=".."). La méthode find renvoie Nothing s'il n'y a aucun résultat. Par contre, lorsque j'écris If Not windows.find(classname:="..", name:="..") Is Nothing Then .., Not windows.find(classname:="..", name:="..") Is Nothing est toujours évalué à True sous Excel 64 bits, alors que c'est évalué à False sous Excel 32 bits. Avez-vous une explication ?

    Par contre, tout fonctionne bien sous Excel 32 et 64 bits si j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim window As clsWindow: Set window = windows.find(classname:="..", name:="..")
     
    If Not window Is Nothing Then ..
    Merci par avance !

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Grouper des instructions à la file sur la même ligne, c'est peut-être utile pour économiser de la mémoire. Mais cela transforme le débogage en enfer. En fait, cela date de l'époque des PC à 16 K de mémoire (et 16 K c'était presque juste pour les riches) et des variables à deux caractères maximum. C'est encore là juste pour préserver la compatibilité.

    Quoiqu'il en soit, je ne pense pas que la différence 32 ou 64 buts ne soit en cause. Sauf peut-être une conversion implicite qui tourne mal.

    En VB6 - VBA, la vraie valeur de true c'est -1, mais toute valeur numérique différente de zéro doit, du moins selon Microsoft, doit être compilée comme valant True. 0 (zéro) est automatiquement compilé comme étant False.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut
    Merci Clément pour ces explications. Personnellement, je trouve ça plus "esthétique" d'aller droit au but au lieu de déclarer plein de variables temporaires .

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Points : 30
    Points
    30
    Par défaut
    Il s'avère que dans certains cas, même en ajoutant un booléen dans l'expression, le problème persiste... Par exemple, si myProperty est une propriété d'une classe renvoyant un booléen (idem avec une fonction) évalué à False, l'expression complète est quand même évaluée à True...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If myObj.myProperty And False Then Debug.print("oups, même si myObj.myProperty = False")
    PS : je ne travaille en fait pas avec Excel, mais avec CATIA (vu le prix du logiciel...), même si j'exploite Excel avec les scripts.

    C'est quand même étrange, non ?

Discussions similaires

  1. [XL-2016] Eviter l'instruction "If Not Application.Intersect(Target, Range("I18")) Is Nothing Then"
    Par Henri1830 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 04/08/2019, 17h08
  2. Is Not Nothing Comment ca marche?
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/06/2018, 09h38
  3. Différence entre 64/32 bits
    Par owenho dans le forum Windows 7
    Réponses: 20
    Dernier message: 13/10/2017, 13h00
  4. Réponses: 7
    Dernier message: 27/02/2008, 13h55
  5. Différence entre '=' et 'not <>'
    Par Tito dans le forum SQL
    Réponses: 7
    Dernier message: 29/09/2003, 15h23

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