Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

type de variable?

5 réponses
Avatar
Yan
Bonjour,
J'aimerais saoir s'il est possible de modifier le type d'une variable au
cours d'une procédure, sans perdre sa valeur?
je m'explique un peu, je commence ma Sub avec une string "correspondance",
puisque j'ai des caractère alpha dedans, que je "néttois" ensuite!
Il me reste un truc du genre "171127000"
j'aimerais obtenir une nouvelle variable de type long (toujours nommée
"correspondance") contenant 171127000
Pensez vous que ce soit possible?

Pour le moment la seule chose que j'ai réussi à faire c'est de créer une
nouvelle variable "corresp" que je déclare comme "long" puis j'y met
corresp = correspondance
Ca fait pas tres "clean", non?
Merci d'avance.

5 réponses

Avatar
michdenis
Il n'y a pas de problème à utiliser plus d'une variable dans une procédure.

Dans le cas qui te concerne, déclare ta variable as variant
cette dernière pourra contenir ce que tu désires.

Fais un petit test comme ceci :
Sub Test()
Dim MyVar as Variant
MyVar = Date
Msgbox Typename(MyVar)
myVar = 122254
Msgbox Typename(MyVar)
MyVar = "Ok"
Msgbox Typename(MyVar)
End Sub


"Yan" a écrit dans le message de groupe de discussion :

Bonjour,
J'aimerais saoir s'il est possible de modifier le type d'une variable au
cours d'une procédure, sans perdre sa valeur?
je m'explique un peu, je commence ma Sub avec une string "correspondance",
puisque j'ai des caractère alpha dedans, que je "néttois" ensuite!
Il me reste un truc du genre "171127000"
j'aimerais obtenir une nouvelle variable de type long (toujours nommée
"correspondance") contenant 171127000
Pensez vous que ce soit possible?

Pour le moment la seule chose que j'ai réussi à faire c'est de créer une
nouvelle variable "corresp" que je déclare comme "long" puis j'y met
corresp = correspondance
Ca fait pas tres "clean", non?
Merci d'avance.
Avatar
Yan
Merci pour ta réponse rapide.
J'ai essayé comme tu me l'a proposé, mais malheureusement ca garde le type
"string"
je me sert de la fenêtre d'exécution où je tape;
?vartype(mavariable)

ce qui me donne toujours 8!
et comme ensuite je me sert de cette variable dans un Vlookup, bein ca
plante!
Je me suis dépanné avec ca;

Dim corresp as long
dim correspondance as string

corresp = clng(correspondance)

et ca fonctionne, mais ca me fait une variable de plus (j'en ai déjà plus
d'une trentaine, et je commence à m'emmêler les pinceaux!




"michdenis" a écrit dans le message de
news:
Il n'y a pas de problème à utiliser plus d'une variable dans une
procédure.

Dans le cas qui te concerne, déclare ta variable as variant
cette dernière pourra contenir ce que tu désires.

Fais un petit test comme ceci :
Sub Test()
Dim MyVar as Variant
MyVar = Date
Msgbox Typename(MyVar)
myVar = 122254
Msgbox Typename(MyVar)
MyVar = "Ok"
Msgbox Typename(MyVar)
End Sub


"Yan" a écrit dans le message de groupe de
discussion :

Bonjour,
J'aimerais saoir s'il est possible de modifier le type d'une variable au
cours d'une procédure, sans perdre sa valeur?
je m'explique un peu, je commence ma Sub avec une string "correspondance",
puisque j'ai des caractère alpha dedans, que je "néttois" ensuite!
Il me reste un truc du genre "171127000"
j'aimerais obtenir une nouvelle variable de type long (toujours nommée
"correspondance") contenant 171127000
Pensez vous que ce soit possible?

Pour le moment la seule chose que j'ai réussi à faire c'est de créer une
nouvelle variable "corresp" que je déclare comme "long" puis j'y met
corresp = correspondance
Ca fait pas tres "clean", non?
Merci d'avance.



Avatar
Modeste
Bonsour® Yan

J'aimerais saoir s'il est possible de modifier le type d'une variable
au cours d'une procédure, sans perdre sa valeur?
je m'explique un peu, je commence ma Sub avec une string
"correspondance", puisque j'ai des caractère alpha dedans, que je
"néttois" ensuite!
Il me reste un truc du genre "171127000"
j'aimerais obtenir une nouvelle variable de type long (toujours nommée
"correspondance") contenant 171127000
Pensez vous que ce soit possible?

Pour le moment la seule chose que j'ai réussi à faire c'est de créer
une nouvelle variable "corresp" que je déclare comme "long" puis j'y
met corresp = correspondance
Ca fait pas tres "clean", non?



Public Correspondance As Variant
Sub toto()
Correspondance = "qsdf389766780AS"
Correspondance = CLng(Yan_nettois(Correspondance))
MsgBox Correspondance
Correspondance = CDate(Correspondance / 10 ^ 4)
MsgBox Correspondance
Correspondance = CDbl(Correspondance)
MsgBox Correspondance
End Sub


Function Yan_nettois(mavariable)
Dim xxx As String
'--????--- ici j'ai des caractère alpha dedans, que je "néttois"
Yan_nettois = xxx
End function
Avatar
Yan
Ahh oui!
Très bonne idée comme ca aussi! Pis, j'adore le nom de la function! ;)





"Modeste" a écrit dans le message de
news:
Bonsour® Yan

J'aimerais saoir s'il est possible de modifier le type d'une variable
au cours d'une procédure, sans perdre sa valeur?
je m'explique un peu, je commence ma Sub avec une string
"correspondance", puisque j'ai des caractère alpha dedans, que je
"néttois" ensuite!
Il me reste un truc du genre "171127000"
j'aimerais obtenir une nouvelle variable de type long (toujours nommée
"correspondance") contenant 171127000
Pensez vous que ce soit possible?

Pour le moment la seule chose que j'ai réussi à faire c'est de créer
une nouvelle variable "corresp" que je déclare comme "long" puis j'y
met corresp = correspondance
Ca fait pas tres "clean", non?



Public Correspondance As Variant
Sub toto()
Correspondance = "qsdf389766780AS"
Correspondance = CLng(Yan_nettois(Correspondance))
MsgBox Correspondance
Correspondance = CDate(Correspondance / 10 ^ 4)
MsgBox Correspondance
Correspondance = CDbl(Correspondance)
MsgBox Correspondance
End Sub


Function Yan_nettois(mavariable)
Dim xxx As String
'--????--- ici j'ai des caractère alpha dedans, que je "néttois"
Yan_nettois = xxx
End function
Avatar
michdenis
| je me sert de la fenêtre d'exécution où je tape;
| ?vartype(mavariable)

Cette procédure affiche 3 valeurs dans la fenêtre Exécution
correspondant respectivement au contenu de la variable
à chacune des étapes :
La fenêtre exécution affiche :
Date
Long
String
Cela c'était pour démontrer que le type "Variant" s'adapte
selon l'affectation de la donnée que tu lui transmet.
'-------------------------
Sub Test()
Dim MyVar As Variant
MyVar = Date
Debug.Print TypeName(MyVar)
MyVar = 122254
Debug.Print TypeName(MyVar)
MyVar = "Ok"
Debug.Print TypeName(MyVar)
End Sub
'-------------------------
Tu peux regarder dans l'aide, il y a les fonctions de conversion
au besoin Clng(), Cdbl(), Cdate()... qui peuvent être utiles pour
convertir le TYPE de données. Garde cependant à l'esprit que
les fonctions de conversions utilisent les paramètres définis dans
le panneau de configuration pour effectuer la transformation.



ce qui me donne toujours 8!
et comme ensuite je me sert de cette variable dans un Vlookup, bein ca
plante!
Je me suis dépanné avec ca;

Dim corresp as long
dim correspondance as string

corresp = clng(correspondance)

et ca fonctionne, mais ca me fait une variable de plus (j'en ai déjà plus
d'une trentaine, et je commence à m'emmêler les pinceaux!




"michdenis" a écrit dans le message de
news:
Il n'y a pas de problème à utiliser plus d'une variable dans une
procédure.

Dans le cas qui te concerne, déclare ta variable as variant
cette dernière pourra contenir ce que tu désires.

Fais un petit test comme ceci :
Sub Test()
Dim MyVar as Variant
MyVar = Date
Msgbox Typename(MyVar)
myVar = 122254
Msgbox Typename(MyVar)
MyVar = "Ok"
Msgbox Typename(MyVar)
End Sub


"Yan" a écrit dans le message de groupe de
discussion :

Bonjour,
J'aimerais saoir s'il est possible de modifier le type d'une variable au
cours d'une procédure, sans perdre sa valeur?
je m'explique un peu, je commence ma Sub avec une string "correspondance",
puisque j'ai des caractère alpha dedans, que je "néttois" ensuite!
Il me reste un truc du genre "171127000"
j'aimerais obtenir une nouvelle variable de type long (toujours nommée
"correspondance") contenant 171127000
Pensez vous que ce soit possible?

Pour le moment la seule chose que j'ai réussi à faire c'est de créer une
nouvelle variable "corresp" que je déclare comme "long" puis j'y met
corresp = correspondance
Ca fait pas tres "clean", non?
Merci d'avance.