Pourquoi IsEmpty(vbEmpty) renvoi FALSE ???

MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 7 janv. 2009 à 22:11
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 8 janv. 2009 à 13:44
Bonjour à tous,

Pour des raisons de rigueur, je voulais utiliser vbEmpty comme retour d'une fonction qui échoue.
Seulement, IsEmpty(vbEmpty) renvoi False, c'est quoi ce charabia ?

Je n'y comprend plus rien, avez-vous une idée ?

Merci d'avance

MadMatt

8 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
7 janv. 2009 à 22:27
vbEmpty est utilisé avec la fonction VarType et plus exactement comme valeur de retour.
vbEmpty est une constante de type Integer, égale à 0. Elle signifie que la variable testée, et en l'occurrence une variable de type Variant, est de type Empty. Cela signifie pour une variable de Variant que la valeur est égale à 0 dans un contexte numérique ou à une chaine de longueur nulle dans un contexte textuel.

IsEmpty(vbEmpty) = False car vbEmpty n'est pas vide, elle est bien définie, de type integer, et égale à 0

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
7 janv. 2009 à 22:48
Arf merci pour la réponse, mais alors que dois-je utiliser pour renvoyer une valeur vide non typeé ?

MadMatt
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 janv. 2009 à 23:53
un Variant, me semble
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
8 janv. 2009 à 00:03
Oui mais quelle valeur je met dedans ?

MadMatt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 janv. 2009 à 00:56
salut,

voici un exemple de fiasco observable....






Option Explicit




Dim 
iTest 
As Integer


Dim 
sTest 
As String




Private Sub 
Form_Load()

    Dim u As Integer
    MsgBox IsEmpty(fYes) '<- NON
    MsgBox IsEmpty(fNo)  '<- NON
    MsgBox IsEmpty(sTest) '<- NON
    MsgBox IsEmpty(iTest) '<- NON
    MsgBox IsEmpty(u) '<- NON

    MsgBox IsNull(fYes) '<- NON
    MsgBox IsNull(fNo) '<- NON
    MsgBox IsEmpty(sTest) '<- NON
    MsgBox IsEmpty(iTest) '<- NON
    MsgBox IsNull(u) '<- NON

    Unload Me
End Sub

Function fYes() As Integer
    fYes =  0
End Function

Function fNo() As Integer
'
End Function





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>






pourquoi?
une partie est expliqué par casy
d'autres subtilités existent, à l'instant je n'arrive pas à les reproduire, mais je garde (au final) de mauvais souvenirs de ces 2 fonctions soit disant utiles

déclare U en variant, les résultats ne sont pas les mêmes...

à part IS NOTHING( qui ne colle pas ici), mieux vaut rester méfiant

une possibilité (à toi de voir...) serait de passer par une classe, avec sa fonction perso :






Option Explicit


'


Private 
mValue 
As Variant


Dim 
bEmpty 
As Boolean




Public Property Get 
Value() 
As Variant

    Value  = mValue
End Property
Public Property Let Value(ByVal nValue As Variant)
    mValue =  nValue
    bEmpty = False
End Property

Private Sub Class_Initialize()
    bEmpty = True
End Sub

Public Function IsEmpty() As Boolean
    IsEmpty = bEmpty
End Function










Option Explicit


'


Private Sub 
Form_Load()

    Dim x As New Class1
    MsgBox x.IsEmpty '<-
OUI
    x = 30
    MsgBox x.IsEmpty '<-
NON

    Unload Me
End Sub






<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>






ici plus aucun problème....

NB : il faut attribuer ( outils > attributs de procédure... ) VALUE par défaut pour na pas avoir à spécifier la propriété

++

<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 janv. 2009 à 07:20
??

Private Sub Form_Load()
MsgBox IsEmpty(MaFonction) '# => Renvoie True
MsgBox IsEmpty(MaFonctionPasVide) '# => Renvoie False
End Sub

Public Property Get MaFonction() As Variant
'
End Property

Public Property Get MaFonctionPasVide() As Variant
MaFonctionPasVide = 3
End Property





ca fonctionne très bien
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 janv. 2009 à 11:25
oui c'est aussi ce que j'ai indiqué "

déclare U en variant

"

je voulais dire d'utiliser un type défini (integer par exemple) pour Value dans la classe, et que la fonction retourne un type classe

mais faut voir selon l'utilité

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
8 janv. 2009 à 13:44
Ah ouais c'est peu fiable ! Enfin bon avec un variant je vois que ça marche. Merci.

MadMatt
0
Rejoignez-nous