M² et € dans UserForm vers cellule

Bonjour à tous

Depuis un UserForm, j'invite l'utilisateur à saisir des informations dans des champs.
Le premier champ concerne un prix (en euros donc), le deuxième concerne une superficie en m². Lorsque l'utilisateur valide sa saisie dans le UserForm, les valeurs "prix" et "superficie" viennent s'afficher dans la feuille de calcul.

Tout cela fonctionne parfaitement, mais les valeurs s'affichent comme "standard". Or j'aimerais que les cellules affichent les valeurs avec leurs désignations ("€" et "m²").
J'ai pourtant fixé ces infos dans les cellules de la feuille de calcul, mais je crois qu'à chaque fois que le UserForm est validé, il envoie la valeur dans la cellule, et la cellule perd son formatage.

Merci d'avance pour votre aide et bon weekend !

Bonjour,

Quand vous dites que vous avez fixé ces infos, vous parlez bien de format personnalisé ?

Pouvez-vous coller sur le forum le code en question ?

Merci,

Bonjour Ckidon, 3GB,

Or j'aimerais que les cellules affichent les valeurs avec leurs désignations ("€" et "m²").

J'ai pourtant fixé ces infos dans les cellules de la feuille de calcul, mais je crois qu'à chaque fois que le UserForm est validé, il envoie la valeur dans la cellule, et la cellule perd son formatage.

En utilisant les TextBox leur propriété par défaut (comme leur nom l'indique) est le texte. Soit implicitement TextBox.Text

Donc les données seront inscrites en texte par défaut quelque soit le formatage des cellules sur la feuille.

Afin que ce formatage feuille ressorte, il suffit de valider les sorties TextBox avec la propriété Value. Soit par exemple Range("A1") = TextBox1.Value

Ainsi ce n'est plus le format texte qui s'appliquera sur la cellule.

Bons tests, bonne continuation.

Bonjour,

J'aurais plutôt dit :
Range("A1") = cdbl(TextBox1.Value)
pour transformer le texte en numérique.
eric

Edit : comme ça m'étonnais de ta part (un peu trop gros pour n'être que de la distraction), j'ai fait le test.
Effectivement, .Value met bien un numérique
Je me coucherai moins bête ce soir

Par contre ce que j'ai du mal à m'expliquer c'est que :

Dim a
a = TextBox1.Value

affiche "56" avec le curseur sur a. Et son type est bien Variant/String, pareil que pour TextBox1.Text ?!?.

A nouveau,

@Eriiic,

Non, cdbl fait double emploi ici. Puisque les cellules sont déjà formatées en numérique!

Il n'y a pas besoin de les convertir avant. Ce n'est que lorsque les cellules de la feuille sont en texte que la conversion est nécessaire.

Pourtant un Textbox retourne bien un texte, c'est son soucis d'ailleurs. Et j'ai testé en laissant le format Standard
J'ai complété mon post précédent avec une interrogation

Suite,

par contre ce que j'ai du mal à m'expliquer c'est que :

Dim a

a = TextBox1.Value

affiche "56" avec le curseur sur a. Et son type est bien Variant/String.

Ici a n'a pas un format prédéfini et il ne prendra pas le type value. Comme tout échange de données entre Textbox, ce sera du texte.

C'est particulier en effet.

Tu ne m'as pas convaincu
Value n'est pas un type.
Et :

Debug.Print VarType(TextBox1)
Debug.Print VarType(TextBox1.Value)
Debug.Print VarType(TextBox1.Text)

retourne tous les trois 8 : vbString ce qui correspond bien à la définition d'un TextBox.
Le fait que TextBox1.Value s'inscrive en numérique reste encore une énigme pour moi

Suite,

@Eriiic,

Le fait que TextBox1.Value s'inscrive en numérique reste encore une énigme pour moi

La propriété Value est justement faite pour cela. Car tous les contrôles sont en entrée Texte et sortie texte par défaut (nul besoin de rajouter .Text)

La propriété value évite de se servir des opérateurs de conversion. Et je l'utilise régulièrement. Maintenant si tu n'est pas convaincu tu peux toujours convertir...

Mais ce sera toujours du double-emploi dans des cellules déjà formatées numériquement.

Ah mais je constate et j'admet que ça fonctionne.
Cependant ça reste pour moi pour l'instant une anomalie. Le .Value et le .Text d'un Texbox sont bien des String ce qui est conforme à l'objet.
J'avoue que j'aurai, de ce fait, du mal à l'utiliser.
D'une part parce que je n'aurai pas le réflexe, d'autre part parce que je préfère exprimer clairement ce que je veux plutôt que laisser vba ou excel interpréter. On peut supposer que cette bizarrerie perdurera, mais...

Et ce n'est en aucun cas un format numérique qui force la chose, ça fait pareil sur une cellule au format Standard comme dit précédemment.
eric

Bonjour à tous

Merci pour toutes ces réponses !

La solution de @XCellus (Range("A1") = TextBox1.Value) m'a bien aidé.

Bonne journée

Rechercher des sujets similaires à "userform"