[vb6] Trouver le type d'une variable

Résolu
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 5 déc. 2006 à 10:44
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 5 déc. 2006 à 13:36
Bonjour à tous!
Je souhaite créer une fonction qui me retourne le type d'une variable... Aprés quelques recherches je suis tombé sur la fonction varType. J'ai donc tenté de m"en servir et j'ai fait ceci :

Select Case varType(Text1.Text)
Case vbBoolean: var = "boolean"
Case vbInteger: var = "Integer"
Case vbString:   var = "String"
Case vbDate:  var = "Date"
Case vbDouble:  var = "Double"
Case vbObject:  var = "Object"
Case vbSingle:  var = "Single"
Case vbVariant:  var = "Variant"
End Select



MsgBox var



Seulement; quelque soit la valeur entrée dans ma TextBox, le type renvoyé est String! Quelqu'un pourrait il me mettre sur la bonne voie ou m'indiquer mon erreur?
Merci d'avance!





         (Si la réponse vous convient, appuyez sur réponse acceptée...).




                           Noubliez pas de lire le REGLEMENT 

9 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 déc. 2006 à 10:55
Le type d'une variable, hum, et ca va te servir à quoi au juste ???

Si c'est pour faire de la généricité, passe par des objets en lieu et place des types de données de vb.
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 déc. 2006 à 11:53
"Je comprends bien ce que tu me dis, et c'est d'ailleurs assez logique... Mais comment puis je récupérer la valeur de cette TextBox en gardant son type?"




 



Tu ne peux tout simplement pas !



Sauf peut-être en alourdissant considérablement ton application, en faisant "dérouler" toutes tes variables jusqu'à en trouver celle sui correspond ou en construisant au préalable quelquechose pour y parvenir... Tout celà est quelque peu insensé, et ce d'autant que si tu es capable de mettre dans une textbox une chaîne de caractères "toto", c'est que tu connais l'existence de la vbariable nommée toto !!!

PS : je n'ai pas voulu "relever" tes "cases" dans ton 1er messages, car j'ai estimé la chose de toutes façons inutile... mais regarde (pour améliorer tes connaissances uniquement) à quoi sert donc la fonction TypeName et tu verras que tu n'avais pas besoin de passer par un tel chemin  ...... ). Celà n'a toutefois rien à voir avec ton problème....
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 déc. 2006 à 10:50
"Select Case varType(Text1.Text)"


Te retourne bien évidemment le type de Text1.txt, qui est string !

Tu ne peux te référer à une variable autrement que par son nom (directement) et jamais par la traduction de son nom en chaîne de caractères !

ne confonds pas la variable toto avec la chaîne de caractères qui "représenterait" son nom ("toto") !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 déc. 2006 à 10:59
En d'autres termes : il n'existe pas de fonction VB te permettant de pointer vers la variable toto à partir de la chaîne de caractères "toto"

Ainsi donc : vartype("toto") retournera vbString alors même que la variable toto sera un Integer

vartype(toto), par contre, te retournera bien vbInteger.
0

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

Posez votre question
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
5 déc. 2006 à 11:08
DARKSIDIOUS


"Le type d'une variable, hum, et ca va te servir à quoi au juste ???"
En fait je veux envoyer des méthodes via XML à un Web Service et pour ca je dois compter les attributs d'une fonction et trouver leur type. Par contre, tu peux m'expliquer un peu ce que tu veux dire par 'passe par des objets' si ca ne te dérange pas? Est ce que je dois passer toutes mes variables en objets et si oui et ce que je peux retrouver leur type par la suite?

jmfmarques
Je comprends bien ce que tu me dis, et c'est d'ailleurs assez logique... Mais comment puis je récupérer la valeur de cette TextBox en gardant son type?


 


Merci pour votre aide!





         (Si la réponse vous convient, appuyez sur réponse acceptée...).




                           Noubliez pas de lire le REGLEMENT 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 déc. 2006 à 11:42
"Je comprends bien ce que tu me dis, et c'est d'ailleurs assez logique... Mais comment puis je récupérer la valeur de cette TextBox en gardant son type?"




 



Tu ne peux tout simplement pas !



Sauf peut-être en alourdissant considérablement ton application, en faisant "dérouler" toutes tes variables jusqu'à en trouver celle sui correspond ou en construisant au préalable quelquechose pour y parvenir... Tout celà est quelque peu insensé, et ce d'autant que si tu es capable de mettre dans une textbox une chaîne de caractères "toto", c'est que tu connais l'existence de la vbariable nommée toto !!!
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
5 déc. 2006 à 12:23
Merci pour l'elargissement de mes connaissances! J'ai regardé typeName et il est vrai que c'etait plus facile lol! Je vais donc essayer de trouver une autre solution, peut être en cherchant du coté du type variant.


"si tu es capable de mettre dans une textbox une chaîne de caractères "toto", c'est que tu connais l'existence de la vbariable nommée toto "


oui, mais ce n'est pas moi qui rentre la variable dans la textBox... puis je ne veux pas savoir si la variable existe, mais de quel type elle est... Je vais peut être faire un test en me servant des Chr() ca occupera mon apres midi!


Merci pour ton aide (même si tu as détruit mon idée grrr lol!) !!! Bonne journée!





         (Si la réponse vous convient, appuyez sur réponse acceptée...).




                           Noubliez pas de lire le REGLEMENT 
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 déc. 2006 à 12:29
Tu as une solution en passant par une collection : si tu mets toutes tes variables dans une collection, alors tu peux accèder à une variable par son nom, c'est très lourd, ca va ralentir énormément ton prog, donc à utiliser avec parcimonie, et dans des cas très spéciaux !

Pas passage par objets, cela est pratique pour faire de la généricité (traîter de la même façon un double ou un integer par exemple), du "polymorphisme" à la sauce vb (faire un bon vieux select case avec des instance of sur un objet). Mais cela ne s'applique pas à ton cas.
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
5 déc. 2006 à 13:36
Merci  DARKSIDIOUS !
Mais en fait je vais tout passer en variant, je pense que ca sera plus facile. Pour compter les arguments je vais passer par des optional dans ma fonction!


Merci pour votre aide à tous les deux!





         (Si la réponse vous convient, appuyez sur réponse acceptée...).




                           Noubliez pas de lire le REGLEMENT 
0
Rejoignez-nous