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

Résultat d'une division dans un textbox

21 réponses
Avatar
Denys
Bonjour =E0 tous,

Comment faire pour que le r=E9sultat d'une division de la valeur d'un
textbox par un autre textbox donne comme r=E9sultat un maximum de 4
d=E9cimales dans un troisi=E8me textbox ?

Exemple

Private Sub TextBox42_AfterUpdate()
TextBox43.Value =3D TextBox41.Value / TextBox42.Value
End Sub

455 / 12.6677 donne comm r=E9sultat dans le textbox43
35.9181224689565

Je voudrais comme r=E9sultat 35.9181

Sauriez-vous comment ? car m=EAme en inscrivant 7 comme maximum de
caract=E8res acceptables, le r=E9sultat ne change pas....

Merci

Denys

10 réponses

1 2 3
Avatar
lSteph
Bonne nuit!

--
- -
Avatar
MichDenis
| on a déjà mis longhtemps à comprendre que dans les textbox fallait
| utiliser le point

Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule tu
dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu est
numérique ?

Ta proposition :
| Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")

la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la réponse
utilisera la virugle et non le point... cela peut confondre l'usager. ;-))
De plus, si tu devrais utiliser le contenu du texbox3 qui vient de recevoir
le résultat de la première opération... comme il contient une virgule comme
séparateur décimale...faudrait prévoir le coup dans tes opérations subséquentes !!!
Si c'est une virgule qui est utilisé dans le textbox comme séparateur décimale,
la fonction Val() laisse tomber la section décimale de ton chiffre contenu
dans le textbox. Pourquoi utiliser la fonction "Format()" ???
Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille exclusivement
avec le séparateur contenu dans le panneau de configuration de Windows sinon
la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value), "0.0000")
Me.TextBox3.Value = Format(CSng(TextBox1.Value) / CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

| Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
| sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !

ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !


--
- -


Avatar
MichDenis
Voir la réponse donnée à LSteph.

Bye.


"garnote" a écrit dans le message de news:
%
Salut Denis,

Si TextBox1 contient 455 et TextBox2 contient 12,6677
alors
1)
Private Sub UserForm_Initialize()
TextBox3.Value = Format(TextBox1.Value / TextBox2.Value, "0.0000")
End Sub
renvoie 35,9181 dans TextBox3 (bonne réponse).
et
2)
Private Sub UserForm_Initialize()
TextBox3.Value = Format(CSng(Val(TextBox1)) / CSng(Val(TextBox2)), "0.0000")
End Sub
renvoie 37,9167 dans TextBox3 (mauvaise réponse).

Si je remplace 12,6677 par 12.6677 alors :
1) renvoie Erreur d'exécution 13 (lamentable)
2) renvoie 35,9181 (bonne réponse)

Qu'est-ce à dire ?

Serge




"MichDenis" a écrit dans le message de news:

| Les deux trucs suivants sont-ils équivalents ?
| Format(TextBox41.Value / TextBox42.Value, "0.0000")
| Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !





Avatar
lSteph
Bonjour,

Effectivement dans un autre contexte c'est une erreur, mais en
l'occurence et selon ce que j'ai entendu de la commande , le résultat
est rigoureusement exact.

Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la
même convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant
que vba utilise le point comme séparateur, j'ai envisagé la réponse à
la question strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement
après la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient (selon ce qu'indiqué) un
point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox
dans un format qui convient lorsqu'ils doivent intervenir dans un
calcul.

Merci quand même de nous donner la formule qui fonctionne dans tous les
cas de figure, parceque dans le principe de gèrer tous cas d'erreur
possibles je suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu est
numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la réponse
utilisera la virugle et non le point... cela peut confondre l'usager. ;-))
De plus, si tu devrais utiliser le contenu du texbox3 qui vient de recevoir
le résultat de la première opération... comme il contient une virgule comme
séparateur décimale...faudrait prévoir le coup dans tes opérations
subséquentes !!! Si c'est une virgule qui est utilisé dans le textbox comme
séparateur décimale, la fonction Val() laisse tomber la section décimale de
ton chiffre contenu dans le textbox. Pourquoi utiliser la fonction "Format()"
??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration de
Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !



--
- -



Avatar
lSteph
lSteph envisage une petite rectif :
Bonjour,

Effectivement dans un autre contexte c'est une erreur, mais en l'occurence et
selon ce que j'ai entendu de la commande , le résultat est rigoureusement
exact.

Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la même
convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant que vba
utilise le point comme séparateur, j'ai envisagé la réponse à la question
strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement après
la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient
du texte comme son nom l'indique et qu'il n'y a pas une virgule mais

(selon ce qu'indiqué) un point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox dans un
format qui convient lorsqu'ils doivent intervenir dans un calcul.
(ici c'est sans ddoute redondant j'en conviens.


Merci quand même de nous donner la formule qui fonctionne dans tous les cas
de figure, parceque dans le principe de gèrer tous cas d'erreur possibles je
suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu
est
numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la
réponse
utilisera la virugle et non le point... cela peut confondre l'usager.
;-))
De plus, si tu devrais utiliser le contenu du texbox3 qui vient de recevoir
le résultat de la première opération... comme il contient une virgule comme
séparateur décimale...faudrait prévoir le coup dans tes opérations
subséquentes !!! Si c'est une virgule qui est utilisé dans le textbox comme
séparateur décimale, la fonction Val() laisse tomber la section décimale de
ton chiffre contenu dans le textbox. Pourquoi utiliser la fonction
"Format()" ??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration
de Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !




--
- -




Avatar
MichDenis
L'essentiel de mon propos est contenu dans mon message précédent.
C'est possible qu'il ne soit pas évident à saisir ou que l'explication
soit floue ....Ce n'était pas une critique formulée à l'endroit de ta
proposition ou de celle de Serge mais plutôt un énoncé sur la
problématique des Textbox, des opérations mathématiques et
de l'opérateur décimale. Ceci dit, tu fais comme tu veux.

En vba, on retrouve la même problématique avec les dates.
La méthode de passer une date au code est importante afin
que le code ne soit pas lié au format "Date" du panneau de
configuration de son ordi. Si l'application se trimbale, certains
usagers risquent d'avoir des surprises à moins que tous aient
la même configuration !!!!


Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la
même convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant
que vba utilise le point comme séparateur, j'ai envisagé la réponse à
la question strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement
après la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient (selon ce qu'indiqué) un
point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox
dans un format qui convient lorsqu'ils doivent intervenir dans un
calcul.

Merci quand même de nous donner la formule qui fonctionne dans tous les
cas de figure, parceque dans le principe de gèrer tous cas d'erreur
possibles je suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu est
numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la réponse
utilisera la virugle et non le point... cela peut confondre l'usager. ;-))
De plus, si tu devrais utiliser le contenu du texbox3 qui vient de recevoir
le résultat de la première opération... comme il contient une virgule comme
séparateur décimale...faudrait prévoir le coup dans tes opérations
subséquentes !!! Si c'est une virgule qui est utilisé dans le textbox comme
séparateur décimale, la fonction Val() laisse tomber la section décimale de
ton chiffre contenu dans le textbox. Pourquoi utiliser la fonction "Format()"
??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration de
Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !



--
- -



Avatar
lSteph
On est bien d'accord sur tout cela, je n'ai peuut-être pas été clair
non plus:
la solution dépend du contexte ou si on ne veut pas compliquer de celui
de la question ,
à moins de prendre le temps de gèrer d'avantage d'hypothèses aussi le
fait que tu évoques
problématique des Textbox
supposait que tu avais

une solution plus universelle.

Tant pis merci quand même.

@+

lSteph

MichDenis a pensé très fort :
L'essentiel de mon propos est contenu dans mon message précédent.
C'est possible qu'il ne soit pas évident à saisir ou que l'explication
soit floue ....Ce n'était pas une critique formulée à l'endroit de ta
proposition ou de celle de Serge mais plutôt un énoncé sur la
problématique des Textbox, des opérations mathématiques et
de l'opérateur décimale. Ceci dit, tu fais comme tu veux.

En vba, on retrouve la même problématique avec les dates.
La méthode de passer une date au code est importante afin
que le code ne soit pas lié au format "Date" du panneau de
configuration de son ordi. Si l'application se trimbale, certains
usagers risquent d'avoir des surprises à moins que tous aient
la même configuration !!!!


Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la
même convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant
que vba utilise le point comme séparateur, j'ai envisagé la réponse à
la question strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement
après la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient (selon ce qu'indiqué) un
point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox
dans un format qui convient lorsqu'ils doivent intervenir dans un
calcul.

Merci quand même de nous donner la formule qui fonctionne dans tous les
cas de figure, parceque dans le principe de gèrer tous cas d'erreur
possibles je suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu
est numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la réponse
utilisera la virugle et non le point... cela peut confondre l'usager.
;-)) De plus, si tu devrais utiliser le contenu du texbox3 qui vient de
recevoir le résultat de la première opération... comme il contient une
virgule comme séparateur décimale...faudrait prévoir le coup dans tes
opérations subséquentes !!! Si c'est une virgule qui est utilisé dans le
textbox comme séparateur décimale, la fonction Val() laisse tomber la
section décimale de ton chiffre contenu dans le textbox. Pourquoi utiliser
la fonction "Format()" ??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration de
Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !




--
- -




Avatar
MichDenis
Si tu veux un exemple, il y en a un ici : http://cjoint.com/?mjpbJOljK5



"lSteph" a écrit dans le message de news:

On est bien d'accord sur tout cela, je n'ai peuut-être pas été clair
non plus:
la solution dépend du contexte ou si on ne veut pas compliquer de celui
de la question ,
à moins de prendre le temps de gèrer d'avantage d'hypothèses aussi le
fait que tu évoques
problématique des Textbox
supposait que tu avais

une solution plus universelle.

Tant pis merci quand même.

@+

lSteph

MichDenis a pensé très fort :
L'essentiel de mon propos est contenu dans mon message précédent.
C'est possible qu'il ne soit pas évident à saisir ou que l'explication
soit floue ....Ce n'était pas une critique formulée à l'endroit de ta
proposition ou de celle de Serge mais plutôt un énoncé sur la
problématique des Textbox, des opérations mathématiques et
de l'opérateur décimale. Ceci dit, tu fais comme tu veux.

En vba, on retrouve la même problématique avec les dates.
La méthode de passer une date au code est importante afin
que le code ne soit pas lié au format "Date" du panneau de
configuration de son ordi. Si l'application se trimbale, certains
usagers risquent d'avoir des surprises à moins que tous aient
la même configuration !!!!


Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la
même convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant
que vba utilise le point comme séparateur, j'ai envisagé la réponse à
la question strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement
après la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient (selon ce qu'indiqué) un
point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox
dans un format qui convient lorsqu'ils doivent intervenir dans un
calcul.

Merci quand même de nous donner la formule qui fonctionne dans tous les
cas de figure, parceque dans le principe de gèrer tous cas d'erreur
possibles je suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu
est numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la réponse
utilisera la virugle et non le point... cela peut confondre l'usager.
;-)) De plus, si tu devrais utiliser le contenu du texbox3 qui vient de
recevoir le résultat de la première opération... comme il contient une
virgule comme séparateur décimale...faudrait prévoir le coup dans tes
opérations subséquentes !!! Si c'est une virgule qui est utilisé dans le
textbox comme séparateur décimale, la fonction Val() laisse tomber la
section décimale de ton chiffre contenu dans le textbox. Pourquoi utiliser
la fonction "Format()" ??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration de
Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !




--
- -




Avatar
garnote
Bonjour Denis,

Ah ben ça alors, c'est quelque chose à conserver.
Encore une tite bière et une pointe de tourtière du Lac Saint-Jean ;-)

Serge

"MichDenis" a écrit dans le message de news: %23HI%
Si tu veux un exemple, il y en a un ici : http://cjoint.com/?mjpbJOljK5



"lSteph" a écrit dans le message de news:

On est bien d'accord sur tout cela, je n'ai peuut-être pas été clair
non plus:
la solution dépend du contexte ou si on ne veut pas compliquer de celui
de la question ,
à moins de prendre le temps de gèrer d'avantage d'hypothèses aussi le
fait que tu évoques
problématique des Textbox
supposait que tu avais

une solution plus universelle.

Tant pis merci quand même.

@+

lSteph

MichDenis a pensé très fort :
L'essentiel de mon propos est contenu dans mon message précédent.
C'est possible qu'il ne soit pas évident à saisir ou que l'explication
soit floue ....Ce n'était pas une critique formulée à l'endroit de ta
proposition ou de celle de Serge mais plutôt un énoncé sur la
problématique des Textbox, des opérations mathématiques et
de l'opérateur décimale. Ceci dit, tu fais comme tu veux.

En vba, on retrouve la même problématique avec les dates.
La méthode de passer une date au code est importante afin
que le code ne soit pas lié au format "Date" du panneau de
configuration de son ordi. Si l'application se trimbale, certains
usagers risquent d'avoir des surprises à moins que tous aient
la même configuration !!!!


Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la
même convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant
que vba utilise le point comme séparateur, j'ai envisagé la réponse à
la question strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement
après la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient (selon ce qu'indiqué) un
point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox
dans un format qui convient lorsqu'ils doivent intervenir dans un
calcul.

Merci quand même de nous donner la formule qui fonctionne dans tous les
cas de figure, parceque dans le principe de gèrer tous cas d'erreur
possibles je suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu
est numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la réponse
utilisera la virugle et non le point... cela peut confondre l'usager.
;-)) De plus, si tu devrais utiliser le contenu du texbox3 qui vient de
recevoir le résultat de la première opération... comme il contient une
virgule comme séparateur décimale...faudrait prévoir le coup dans tes
opérations subséquentes !!! Si c'est une virgule qui est utilisé dans le
textbox comme séparateur décimale, la fonction Val() laisse tomber la
section décimale de ton chiffre contenu dans le textbox. Pourquoi utiliser
la fonction "Format()" ??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration de
Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !




--
- -









Avatar
lSteph
Re,
Cela s'écarte de ce qui consistait à apporter un simple formule à une
question .
On en revient non pas à ce que j'imaginais venir derrière ton
intervention soit une formule magique, mais à ce qu'il est convenu de
faire dans ces cas là, lorsqu'on veut gèrer toutes les hypothèses de
saisie, à savoir gèrer d'abord un contrôle de saisie avant de
l'utiliser.


Sur ce principe je reste tout à fait d'accord et merci, je garde même
ton code qui me semble optimal.

;o)
Mérite même une ou deux Bière de plus!!!

Cdlt.

lSteph
(Comme il est dommage de le laisser dans un cjoint)

'''''*****dans userform
Private Sub CommandButton1_Click()
'On se doit d'utiliser les fonctions de conversion
'puisque le séparateur décimale utilisé est toujours
'celui du panneau de configuration

Dim T As Double, S As Double
'Le test permet d'éviter l'erreur si
'le textbox est vide...car cdbl("") ne fonctionne pas.
'Il y a toujours les partisans de On error resume next
If IsNumeric(Me.TextBox1) Then
T = CDbl(Me.TextBox1)
End If
If IsNumeric(Me.TextBox2) Then
S = CDbl(Me.TextBox2)
End If

Me.TextBox3 = Format(T + S, "0.0000")
Range("A1").Value = CDbl(Me.TextBox3)
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(TextBox2, KeyAscii)
End Sub

Private Sub UserForm_Click()

End Sub

'''''*****dans le code de la feuille

Sub AfficherFormulaire()
UserForm1.Show
End Sub


Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As
Integer)

SepDec = Format(0, ".")

If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If

End Function

'''''**************



Il se trouve que MichDenis a formulé :
Si tu veux un exemple, il y en a un ici : http://cjoint.com/?mjpbJOljK5



"lSteph" a écrit dans le message de news:

On est bien d'accord sur tout cela, je n'ai peuut-être pas été clair
non plus:
la solution dépend du contexte ou si on ne veut pas compliquer de celui
de la question ,
à moins de prendre le temps de gèrer d'avantage d'hypothèses aussi le
fait que tu évoques
problématique des Textbox
supposait que tu avais

une solution plus universelle.

Tant pis merci quand même.

@+

lSteph

MichDenis a pensé très fort :
L'essentiel de mon propos est contenu dans mon message précédent.
C'est possible qu'il ne soit pas évident à saisir ou que l'explication
soit floue ....Ce n'était pas une critique formulée à l'endroit de ta
proposition ou de celle de Serge mais plutôt un énoncé sur la
problématique des Textbox, des opérations mathématiques et
de l'opérateur décimale. Ceci dit, tu fais comme tu veux.

En vba, on retrouve la même problématique avec les dates.
La méthode de passer une date au code est importante afin
que le code ne soit pas lié au format "Date" du panneau de
configuration de son ordi. Si l'application se trimbale, certains
usagers risquent d'avoir des surprises à moins que tous aient
la même configuration !!!!


Moi je n'ai pas de préférence...
***je crois que c'est surtout tes usagers que tu pertuberas !
Effectivement!

J'en ai une , faire les calculs dans la feuille en utilisant tous la
même convention de saisie donc pour les décimaux avec une virgule.

Voilà sans doute la cause de ce qui peut génèrer une erreur, sachant
que vba utilise le point comme séparateur, j'ai envisagé la réponse à
la question strictement comme elle était posée:
Pourquoi Format, parceque le Monsieur il a demandé 4 chiffres seulement
après la virgule et que c'est une façon de l'obtenir.
Pourquoi Val parceque le textbox contient (selon ce qu'indiqué) un
point.
Pourquoi Csng, parceque j'ai pris l'habitude de convertir les textbox
dans un format qui convient lorsqu'ils doivent intervenir dans un
calcul.

Merci quand même de nous donner la formule qui fonctionne dans tous les
cas de figure, parceque dans le principe de gèrer tous cas d'erreur
possibles je suis bien d'accord.

Cdlt.

lSteph




MichDenis a utilisé son clavier pour écrire :
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point


Moi je n'ai pas de préférence...mais que tu utilises le point ou la virgule
tu dois prévoir dans ton code une manière de contrôler le contenu des
textbox... et le résultat attendu.

Admettons que ton séparateur décimale est la virgule et que tu permettes
à l'usager d'utiliser le point dans les textbox...
Si tu veux vérifier que le contenu du textbox est numérique, il est logique
d'utiliser ceci : If isnumeric(Me.textbox1.value) = True then
'le reste du code
End If
Ben, la fonction retourne Faux si tu as le point comme séparateur décimale
dans ton textbox et la virgule comme séparateur décimale dans ton panneau
de configuration. Quelle fonction utiliseras-tu pour savoir si le contenu
est numérique ?

Ta proposition :
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")


la fonction Val() travaille exclusivement avec le point comme séparateur
décimale...De plus même si dans les textbox, tu as saisi un point comme
séparateur décimale, si l'usager a la virgule comme séparateur décimale
dans le panneau de configuration de Windows, le textbox affichant la
réponse utilisera la virugle et non le point... cela peut confondre
l'usager. ;-)) De plus, si tu devrais utiliser le contenu du texbox3 qui
vient de recevoir le résultat de la première opération... comme il contient
une virgule comme séparateur décimale...faudrait prévoir le coup dans tes
opérations subséquentes !!! Si c'est une virgule qui est utilisé dans le
textbox comme séparateur décimale, la fonction Val() laisse tomber la
section décimale de ton chiffre contenu dans le textbox. Pourquoi utiliser
la fonction "Format()" ??? Quel est le rôle de la fonction CSng() ici ?

Par contre, les fonctions de conversion Cdbl(), Csng() travaille
exclusivement avec le séparateur contenu dans le panneau de configuration
de Windows sinon la ligne de commande plante tout simplement ...

Me.TextBox3.Value = Format(CDbl(TextBox1.Value) / CDbl(TextBox2.Value),
"0.0000") Me.TextBox3.Value = Format(CSng(TextBox1.Value) /
CSng(TextBox2.Value), "0.0000")

Dès que tu utilises le contenu des textbox pour effectuer des opérations
mathématiques, tu dois obligatoirement apprendre à gérer le séparateur
décimale afin d'obtenir une homogénéité tant au niveau de la saisie, de
l'affichage que de la méthode de calcul à travers toute ton application.

Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..
***je crois que c'est surtout tes usagers que tu pertuberas !


ET merci pour la bière.



"lSteph" a écrit dans le message de news:

Bonsoir MD,
sitôt que tu as traversé l'atlantique, je t'offre une bière +
de bon coeur, mais
on a déjà mis longhtemps à comprendre que dans les textbox fallait
utiliser le point
à l'instar de la feuille qui elle requiert "selon la norme fr" une
virgule comme séparateur décimal,
Alors c'est pas gentil ;o)) d'vouloir ainsi nous perturber.
sinon c'est amusant , cela arrondi..

Bon allez tu veux une deuxième Bière (sur le compte de Serge), donne ta
formule, qui marche dans tous les cas.

Amicordialement.

lSteph.



MichDenis avait prétendu :
Les deux trucs suivants sont-ils équivalents ?
Format(TextBox41.Value / TextBox42.Value, "0.0000")
Format(CSng(Val(TextBox41)) / CSng(Val(TextBox42)), "0.0000")



Bonjour Serge,

As-tu testé les deux séparateurs décimales possibles dans tes textbox ?
La virgule ou le point ? Est-ce que cela fonctionne dans les 2 cas ?

Ceci vaut pour les 2 lignes de code !!!!

Ça vaut une petite bière !





--
- -





1 2 3