J'ai un textbox dans laquelle je rentre une valeur (un nombre de Km), je souhaite afficher dans cette texte box "1 000 Km" par exemple. Pour l'instant j'ai mis un format : Format(Textbox1, "0 000 Km"). Ca marche du tonnerre pour ce qui est du texbox. Le problème survient après lorsque je veux mettre la valeur de ce textbox dans une cellule excel afin de faire des calculs. Le textbox contenant des lettres est considéré comme du texte et je ne peux donc rien faire avec...
Je souhaiterai savoir si il y a une solution qui permet d'afficher un format dans un textbox sans pour autant changer la valeur de celui-ci (comme le format personnalisé dans les feuilles excel).
Merci d'avance,
Ben_Co
PS :J'ai trouvé une solution pour contourner le problème mais elle ne me convient pas étant donné le nombre de userform : replace(textbox1, " Km","").
Bonsoir
Il faut que tu commences par dire à excel de transformer le type du contenu du textbox (text) en nombre avant de faire autre chose
Suivant le type de nombre attendu pour tes km, il faut transformer ton text en integer (Cint), long (Clng), double (Cdbl)...
Par exemple :
Distance = CLng(textbox1.value)
textbox1= format(distance, "0 000 Km")
Range("A1")= format(distance, "0 000 Km")
Tu dois récupérer la partie numérique au début de TextBox1 avec la fonction VAL.
Code:
Private Sub CommandButton1_Click()
Dim distance As Double
'Pour récupérer la partie numérique au début de TextBox1
distance = Val(Replace(TextBox1.Value, Format(0, ","), "."))
TextBox1 = distance & " Km"
Range("A1") = distance
End Sub
@DocMarti,
Attention, la fonction val ne marche que si le séparateur décimal de l'utilisateur est le . (système américain). Si c'est la virgule, ça ne fonctionne pas. C'est la raison pour laquelle il est préférable d'utiliser les fonctions de transtypage.
@DocMarti,
Attention, la fonction val ne marche que si le séparateur décimal de l'utilisateur est le . (système américain). Si c'est la virgule, ça ne fonctionne pas. C'est la raison pour laquelle il est préférable d'utiliser les fonctions de transtypage.
le résultat étant une valeur de type Double qui inclut correctement la partie décimale, la virgule potentielle ayant été remplacée par un point.
Val(Replace("123,456 km", Format(0, ","), ".")) donne bien comme résultat la valeur de type Double 123,456 qui sera correctement interprétée sur la feuille Excel comme une valeur numérique.
Certes mais c'est plus compliqué
Comme j'utilise le point comme séparateur décimal depuis des années, j'utilise souvent val quand je fais un truc pour moi seule. Mais dès que le classeur peut avoir à être partagé, je préfère transtyper et du même coup choisir si la variable devient un Integer un long, un double. Je ne me suis pas penchée sur ce qui se passe quand le classeur est ouvert dans une version 64bits car de toutes façons il y aurait plus d'une variable à modifier.
Amicalement