VBA Problème de conversion Format "Texte" en Format "Nombre" d'une textbox

Fermé
ZBou - 19 nov. 2021 à 23:00
 Utilisateur anonyme - 20 nov. 2021 à 09:45
Bonsoir à tous

J'ai créé un fichier de suivi d'activité.
Il comporte un Userform à Multiples Pages.

Tout est presque opérationnel, à quelques détails près.

a.) Le premier souci c'est l'affichage dans une textbox du résultat de l'addition des valeurs de plusieurs textbox qui ne fonctionne.
Au lieu de les additionner, il colle à la suite les valeurs de chaque textbox.

Pour illustrer :
15 + 12 + 4 = 31
La textbox affiche comme résultat : 15124

b.) Le deuxième problème c'est le format des valeurs issues des textbox qui se mettent en format "Texte", dès lors où le nombre contenu dans la textbox est un nombre décimal.

Ce qui fait que mes formules sur la feuille de destination ne prennent pas toutes les données de la feuille en compte.
Et cela fausse tout le reste de mes calculs.

Donc, j'aimerais savoir s'il existe un moyen de faire en sorte que les contenus de mes textbox soient considérés comme chiffres et non comme des textes, et que lors de leur transfert sur une feuille, qu'elles restent toujours au format "Nombre".

J'espère que j'ai su bien exposer le problème, et je vous remercie par avance pour votre aide.

Z'Bou,



Configuration: Android / Chrome 94.0.4606.85
A voir également:

3 réponses

Utilisateur anonyme
20 nov. 2021 à 00:19
Bonjour

comme son nom l'indique une TextBox est une boite de texte, donc pas de nombres.

Tes 2 problèmes viennent de là.

Tu as bien perçu qu'il faut convertir en nombre pour résoudre le second, mais le premier aussi.
En effet, l'opérateur +, pour du texte (type string) concatène ce qui donne bien 15124.

Pour convertir en nombre, il faut utiliser CInt, CLong, CSng, CDbl selon le type attendu.
0
Bonjour Whismeril.

Tout d'abord, un grand merci pour ta réponse.

En effet, pour la textbox, cela tombe sous le sens, d'en otenir que du texte comme son nom l'indique.

Donc je vais essayer les options que tu m'as proposé et je vais te faire un retour dès que possible.

Par contre, ce que je ne comprends pas, c'est le fait que la multiplication, la division et la soustraction puissent fonctionner sans tenir compte du fait que ces valeurs contenues dans ces textbox sont des textes.

Je donne un Exemple pour illustrer ce qui se passe :

Si je sélectionne un article dans la Combobox1,
La Textbox1 affiche la description de l'article
La Textbox2 affiche le prix unitaire
Dans la Textbox3 je saisie la quantité
La Textbox4 affiche le total qui serait égal à Textbox2*Textbox3

Jusqu'à là, ça fonctionne, malgré le fait que ce soit des textes contenues dans ces textbox

J'ai ensuite une Combobox2 qui me permet de sélectionner une remise en pourcentage qui s'applique sur le total affiché dans la Textbox4.

Du coup, ma Textbox5, affiche un résultat qui est égal à
((Textbox2 *Textbox3)-((Textbox2*Textbox3)*Combobox2)).

Et là aussi ça fonctionne.

Mais dès lors où j'essaie d'additionner les totaux trouvés dans la Textbox5, Textbox10, ... et dans l'espoir d'afficher le résultat de cette addition dans la Textbox22 par exemple, ça bug.

Du coup je ne comprends pas.

Pourquoi dès qu'il s'agit d'additionner les mêmes contenus, l'opérateur "+" se met à agir comme si j'avais utilisé le "&" ?

Qu'est-ce qui explique ce phénomène ?
0
Utilisateur anonyme
20 nov. 2021 à 09:45
Ha là tu touches du doigt le débat « ancestral » de savoir si vb (peut importe lequel) est un bon langage ou pas.

Tout d’abord un opérateur c’est une sorte de fonction qui fait une « opération » (mais pas forcément mathématique) entre 2 variables du même type ou de types compatibles et donne un résultat dans un des ces 2 types.
Si tu soustrais un entier et un décimal tu obtiens un décimal.


Microsoft a voulu faire en sorte que ce soit un langage facilement accessible aux autodidactes.
Donc, on peut ne pas déclarer les variables, on peut ne peut leur donner de type précis et beaucoup de chose se font de manière implicite (notamment les conversions de type)

Donc quand l’interpréteur tombe sur cette ligne
 ((Textbox2 *Textbox3)-((Textbox2*Textbox3)*Combobox2))
il se dit
  • une opération avec des contrôles c’est pas possible, je vais donc utiliser le contenu de la propriété que le codeur du contrôle à défini comme étant celle à utiliser quand y’a pas d’indication (selon le vb Text, Value, SelectedText, SelectedItem etc….)
  • et là bam, c’est du texte, donc il regarde quel opérateur est utilisé, si cet opérateur existe pour du texte pas de problème il applique. Sinon, il cherche un type compatible avec l’opérera et dont une conversion du texte saisi fonctionne. Souvent ça marche mais y’a 2 écueils
    • tu voulais calculer en double pour plus de précision et il a converti en single
    • tu voulais additionner et l’opérateur + existe pour le texte



Alors pourquoi Microsoft a choisi de coder 2 opérateurs (+ et & ) qui pour le texte fond la même chose et peuvent chacun porter à confusion ? Bonne question….

Toujours est il que l’autodidacte, non averti, se casse toujours les dents un jour ou l’autre sur ces écueils. Et il ne comprends pas pourquoi, puisque qu’il ne sait pas que ce qui est naturel pour lui ne l’est pas pour l’ordinateur.
Et plus il tombe tard sur un de ces écueils et plus l’incompréhension peut être grande.
Dans d’autres languages ou rien n’est laissé « au hasard » on y est confronté des les premières lignes de codes, donc on le sais et le comprends très vite.

Et donc ça donne du grain à moudre au camp des « vb n’est pas un bon langage ».

Si tu ne veux plus être confronté à ces écueils, tu peux activer Option Strict et Option Explicit mais il est probable que tu doivent remanier tout ton code parce que toutes les variables devront être déclarées et typées, toutes les conversions explicitement codées et peut-être même (je suis pas sûr je code très rarement en vba) les propriétés par défaut ne seront plus utilisées.
0