OVH Cloud OVH Cloud

Total des valeurs de 30 text box

14 réponses
Avatar
sophie
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2, TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie

10 réponses

1 2
Avatar
Emcy
bonjour,

voici une methode possible :
1- Tu crées tes textbox dans ta userform avec leur nom qui commence par
TextBox sauf celle qui doit contenir le resultat (que tu appeleras
ResultatTextBox)
2- Tu crées une procédure qui list tous les controle de ton userfrom => si
le nom du controle commence par "TextBox" alors tu l'ajoute au résultat
total
3- Tu crées un module de classe pour les TextBox qui appel la procedure
precedent sur l'evenement Change
4- A l'initialisation de ta Userform, tu affectes toutes tes TextBox dans le
module de classe créé precedemment

voici un exemple :
http://cjoint.com/?mwnxEC3Vcu



"sophie" a écrit dans le message de news:
doe43p$ul$
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que
le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie




Avatar
françois
Merci pour ton aide "Emcy",

Mais suis-je vraiement obligée de renommer mes txtm txtm1....en "textbox" ?
Je m'explique, j'ai donc 30 txtm, correspondant à des montants HT, 30txttv
correpondant aux montant de TVA et je voudrais additionner tout les txtm
dans un txtht
tous les txttv sans un txttva et additionner txtht+txttva et le resultat
s'afficherai dans un txttotal.

J'ai essayé de manipuler avec ton fichier en modifiant le non des txt en
txtm mais en vain, il y a peu être une subtilité.

Peux tu m'éclairer ?
Merci d'avance;
"Emcy" a écrit dans le message de news:

bonjour,

voici une methode possible :
1- Tu crées tes textbox dans ta userform avec leur nom qui commence par
TextBox sauf celle qui doit contenir le resultat (que tu appeleras
ResultatTextBox)
2- Tu crées une procédure qui list tous les controle de ton userfrom => si
le nom du controle commence par "TextBox" alors tu l'ajoute au résultat
total
3- Tu crées un module de classe pour les TextBox qui appel la procedure
precedent sur l'evenement Change
4- A l'initialisation de ta Userform, tu affectes toutes tes TextBox dans
le module de classe créé precedemment

voici un exemple :
http://cjoint.com/?mwnxEC3Vcu



"sophie" a écrit dans le message de news:
doe43p$ul$
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que
le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon
un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie








Avatar
anonymousA
Bonjour,

tu n'es pas du tout obligé de renommer tes textboxes. Dans ce que te
propose Emcy effectivement il y a effectivement une sorte d'obligation à
ce que les 7 premières lettres de tes texboxes soient TextBox mais tu
peux écrire la même chose que ce qu'il te propose avec une autre manière
de détermination de Textboxes de la maniière suivante ce qui tévite de
devoir renommer.

Au lieu d'écrire
For Each Controle In UserForm1.Controls
If Left(Controle.Name, 7) = "TextBox" Then
ReDim Preserve MesTextBox(i)
Set MesTextBox(i).MaTextBox = Controle
i = i + 1
End If
Next Controle

écrire

For Each Controle In UserForm1.Controls
If TypeName(Controle)= "TextBox" and controle.name<> "txttotal" Then
ReDim Preserve MesTextBox(i)
Set MesTextBox(i).MaTextBox = Controle
i = i + 1
end if
Next

Idem pour la procédure CalculTotal

A+

Merci pour ton aide "Emcy",

Mais suis-je vraiement obligée de renommer mes txtm txtm1....en "textbox" ?
Je m'explique, j'ai donc 30 txtm, correspondant à des montants HT, 30txttv
correpondant aux montant de TVA et je voudrais additionner tout les txtm
dans un txtht
tous les txttv sans un txttva et additionner txtht+txttva et le resultat
s'afficherai dans un txttotal.

J'ai essayé de manipuler avec ton fichier en modifiant le non des txt en
txtm mais en vain, il y a peu être une subtilité.

Peux tu m'éclairer ?
Merci d'avance;
"Emcy" a écrit dans le message de news:


bonjour,

voici une methode possible :
1- Tu crées tes textbox dans ta userform avec leur nom qui commence par
TextBox sauf celle qui doit contenir le resultat (que tu appeleras
ResultatTextBox)
2- Tu crées une procédure qui list tous les controle de ton userfrom => si
le nom du controle commence par "TextBox" alors tu l'ajoute au résultat
total
3- Tu crées un module de classe pour les TextBox qui appel la procedure
precedent sur l'evenement Change
4- A l'initialisation de ta Userform, tu affectes toutes tes TextBox dans
le module de classe créé precedemment

voici un exemple :
http://cjoint.com/?mwnxEC3Vcu



"sophie" a écrit dans le message de news:
doe43p$ul$

Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que
le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon
un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie












Avatar
michdenis
Bonjour Sophie,

Je te propose une alternative intéressante !

http://cjoint.com/?mwuAo8PEgX

Pour additionner, ça additionne !!!!

;-))


Salutations!



"sophie" a écrit dans le message de news: doe43p$ul$
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2, TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie
Avatar
Emcy
Sophie n'a pas l'ir de bien maitriser le vba, c'est pourquoi je vais
reprendre l'explication de françois de façon plus détaillée

Dans le classeur il y a un module de classe qui décrit le comportement que
doivent avoir les TextBox (dans ce cas le comportement est qu'a chaque fois
qu'il y a un changement de valeur dans une text box j'execute une procedure
qui recalcul le total)

Après, il faut affecter les TextBox dans la classe. Utilises la solution de
françois qui est un peu plus rigoureuse que la mienne :
For Each Controle In UserForm1.Controls
If TypeName(Controle)= "TextBox" and controle.name<> "txttotal" Then
ReDim Preserve MesTextBox(i)
Set MesTextBox(i).MaTextBox = Controle
i = i + 1
end if
Next


je t'explique par étape ce que fais le code :

For Each Controle In UserForm1.Controls
....

Next
=> ça effectue boucle qui balaye un par un de tous les controles que

conporte Userform1 : à chaque boucle, l'element balayé est mis dans la
variable Controle.

If TypeName(Controle)= "TextBox" and controle.name<> "txttotal" Then
...

end if
=> If TypeName(Controle)= "TextBox" : si Controle est une TextBox

=> and controle.name<> "txttotal" : et que sont nom est différent de
txttotal (c'est le nom que doit avoir la textbox qui somme les resultats)
alors on execute la suite

ReDim Preserve MesTextBox(i)
Set MesTextBox(i).MaTextBox = Controle
i = i + 1
=> ReDim Preserve MesTextBox(i) : redimensionne le tableau MesTextBox en

gardant les valeurs précedemment entrées
=> Set MesTextBox(i).MaTextBox = Controle : affecte la Variable Controle au
à la propriété MaTextBox du tableau MesTextBox (ça affecte le controle dans
la classe)
=> i = i +1 : ajout 1 à i (ça c'est pas compliqué)

voila j'espere avoir éclairé un peu plus ta lanterne...


"anonymousA" a écrit dans le message de news:
43aaf747$0$29226$
Bonjour,

tu n'es pas du tout obligé de renommer tes textboxes. Dans ce que te
propose Emcy effectivement il y a effectivement une sorte d'obligation à
ce que les 7 premières lettres de tes texboxes soient TextBox mais tu peux
écrire la même chose que ce qu'il te propose avec une autre manière de
détermination de Textboxes de la maniière suivante ce qui tévite de devoir
renommer.

Au lieu d'écrire
For Each Controle In UserForm1.Controls
If Left(Controle.Name, 7) = "TextBox" Then
ReDim Preserve MesTextBox(i)
Set MesTextBox(i).MaTextBox = Controle
i = i + 1
End If
Next Controle

écrire

For Each Controle In UserForm1.Controls
If TypeName(Controle)= "TextBox" and controle.name<> "txttotal" Then
ReDim Preserve MesTextBox(i)
Set MesTextBox(i).MaTextBox = Controle
i = i + 1
end if
Next

Idem pour la procédure CalculTotal

A+

Merci pour ton aide "Emcy",

Mais suis-je vraiement obligée de renommer mes txtm txtm1....en "textbox"
?
Je m'explique, j'ai donc 30 txtm, correspondant à des montants HT,
30txttv correpondant aux montant de TVA et je voudrais additionner tout
les txtm dans un txtht
tous les txttv sans un txttva et additionner txtht+txttva et le resultat
s'afficherai dans un txttotal.

J'ai essayé de manipuler avec ton fichier en modifiant le non des txt en
txtm mais en vain, il y a peu être une subtilité.

Peux tu m'éclairer ?
Merci d'avance;
"Emcy" a écrit dans le message de news:


bonjour,

voici une methode possible :
1- Tu crées tes textbox dans ta userform avec leur nom qui commence par
TextBox sauf celle qui doit contenir le resultat (que tu appeleras
ResultatTextBox)
2- Tu crées une procédure qui list tous les controle de ton userfrom =>
si le nom du controle commence par "TextBox" alors tu l'ajoute au
résultat total
3- Tu crées un module de classe pour les TextBox qui appel la procedure
precedent sur l'evenement Change
4- A l'initialisation de ta Userform, tu affectes toutes tes TextBox dans
le module de classe créé precedemment

voici un exemple :
http://cjoint.com/?mwnxEC3Vcu



"sophie" a écrit dans le message de news:
doe43p$ul$

Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais
que le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon
un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans
le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que
le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie













Avatar
Emcy
salut,

ton controle d'erreur sur la saisie à quelques lacunes : si tu fais des
copier/coller rien ne tempeche d'avoir des saisie farfelues genre chiffre
avec plusieurs virgule ou -

j'ai créer deux module de classe qui peuvent pallier à ce genre de probleme
:
- un module qui te permet de controler des saisies numérique (avec plusieurs
options possibles)
- un module qui permet de bloquer la saisie tout en permettant de faire des
copier (le module propose aussi d'autre options)

qu'en penses-tu ?

http://cjoint.com/?mxjB0ps68J


"michdenis" a écrit dans le message de news:
%
Bonjour Sophie,

Je te propose une alternative intéressante !

http://cjoint.com/?mwuAo8PEgX

Pour additionner, ça additionne !!!!

;-))


Salutations!



"sophie" a écrit dans le message de news:
doe43p$ul$
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que
le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie





Avatar
anonymousA
Bonjour,

Quelle explication de Francois ?

A+
Avatar
Emcy
oups j'ai sauter une ligne : je voulais dire de anonymous...

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

Bonjour,

Quelle explication de Francois ?

A+



Avatar
michdenis
Bonjour Emcy,

A ) J'ai ouvert ton classeur et on peut dire d'emblée qu'il y a beaucoup de travail
derrière. J'ai essayé de saisir quelques données et voici ce que j'observe :

Dans le premier textbox, après avoir saisi : 12
si je tape une virgule ou un point, le textbox de la somme affiche 0
ce comportement est vrai pour chacun des textbox.

Je n'ai pas beaucoup de temps pour regarder le code ...
'----------------------------

| ton controle d'erreur sur la saisie à quelques lacunes

Je suis bien au fait des limitations du code que j'ai publié...
c'était plus pour susciter les réactions... Habituellement les
modules de classe ne suscite pas beaucoup de réaction !!!
À cet égard, j'ai décidé de conserver la version finale pour moi...
attendant de voir l'intérêt des gens pour ce type de bidule.
'----------------------------

| si tu fais des copier/coller

Moi, je n'avais rien prévu pour cette éventualité ...la demande n'a jamais
été exprimé par la demanderesse... comme tu es généreux tu as pris
l'initiative et c'est très bien.

Une remarque à propos du copier-coller :
test que j'ai fait :
Dans un textbox, j'entre : 12
dans un second textbox, j'entre 42
Je fais un copier-coller du premier textbox vers le deuxième textbox
la valeur affichée dans le textbox de la somme : 4224

Est-ce ma calculette qui déraille ?
'----------------------------

| La présence de 2 modules de classe :

Personnellement, dans la mesure du possible, j'en aurais utilisé qu'un.
L'objectif d'un module de classe est de regrouper tout le code
afférent à la classe d'objet que l'on a défini. De plus, si tu désires
réutiliser ton module de classe dans un autre projet, ton module est
autononome avec un minimum d'intervention de ta part sur
le code qu'il contient.

Ceci était dit, je te félicite...pas beaucoup de personnes s'aventurent
sur ce terrain ... et ce n'est pas chose facile non plus.


Salutations!

P.-S. Je n'ai pas beaucoup de temps à consacrer au forum aujourd'hui !




"Emcy" a écrit dans le message de news:
salut,

ton controle d'erreur sur la saisie à quelques lacunes : si tu fais des
copier/coller rien ne tempeche d'avoir des saisie farfelues genre chiffre
avec plusieurs virgule ou -

j'ai créer deux module de classe qui peuvent pallier à ce genre de probleme
:
- un module qui te permet de controler des saisies numérique (avec plusieurs
options possibles)
- un module qui permet de bloquer la saisie tout en permettant de faire des
copier (le module propose aussi d'autre options)

qu'en penses-tu ?

http://cjoint.com/?mxjB0ps68J


"michdenis" a écrit dans le message de news:
%
Bonjour Sophie,

Je te propose une alternative intéressante !

http://cjoint.com/?mwuAo8PEgX

Pour additionner, ça additionne !!!!

;-))


Salutations!



"sophie" a écrit dans le message de news:
doe43p$ul$
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que
le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie





Avatar
Emcy
A ) J'ai ouvert ton classeur et on peut dire d'emblée qu'il y a beaucoup
de travail
derrière. J'ai essayé de saisir quelques données et voici ce que j'observe
:
=> c'est vrai que j'ai passé pas mal de temps dessus mais je suis sure qu'on

peut encore l'ameliorer :) en plus ça peut donner des idée pour d'autre type
de controle => j'en ai surtout bavé pour la gestion du copier/coller sans
alterer la valeur du presse-papier originale

Dans le premier textbox, après avoir saisi : 12
si je tape une virgule ou un point, le textbox de la somme affiche 0
ce comportement est vrai pour chacun des textbox.
=> là je comprend pas, ça ne le fait pas chez moi ????

=> par contre si tu mets juste un pint dans un champs, c'est normale que tu
es 0 comme résulat car "." = 0 en numérique
mais je pense qu'il faudrait que je rajoute un controle supplementaire pour
ne jamais avoir de chaine vide => avoir au minimum 0 comme valeur

Habituellement les modules de classe ne suscite pas beaucoup de réaction
!!!
=> c'est dommage car je trouve leur utilisation vraimment puissante


Une remarque à propos du copier-coller :
test que j'ai fait :
Dans un textbox, j'entre : 12
dans un second textbox, j'entre 42
Je fais un copier-coller du premier textbox vers le deuxième textbox
la valeur affichée dans le textbox de la somme : 4224
=> c'est normale si tu copie dans la deuxieme textbox 12 après 42, ça

devient 4212
=> TextBox1 + TextBox2 = 12 + 4212 = 4224
=> ma methode permet de copier la chiane à l'endroit du curseur si tu veux
supprimer la chaine, il faut la surligner avant de faire le coller (ce que
font la pluspart des appli)

P.-S. Je n'ai pas beaucoup de temps à consacrer au forum aujourd'hui !
=> c'est pas grave ;) t'en passe déja habituellement pas mal


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

Bonjour Emcy,

A ) J'ai ouvert ton classeur et on peut dire d'emblée qu'il y a beaucoup
de travail
derrière. J'ai essayé de saisir quelques données et voici ce que j'observe
:

Dans le premier textbox, après avoir saisi : 12
si je tape une virgule ou un point, le textbox de la somme affiche 0
ce comportement est vrai pour chacun des textbox.

Je n'ai pas beaucoup de temps pour regarder le code ...
'----------------------------

| ton controle d'erreur sur la saisie à quelques lacunes

Je suis bien au fait des limitations du code que j'ai publié...
c'était plus pour susciter les réactions... Habituellement les
modules de classe ne suscite pas beaucoup de réaction !!!
À cet égard, j'ai décidé de conserver la version finale pour moi...
attendant de voir l'intérêt des gens pour ce type de bidule.
'----------------------------

| si tu fais des copier/coller

Moi, je n'avais rien prévu pour cette éventualité ...la demande n'a jamais
été exprimé par la demanderesse... comme tu es généreux tu as pris
l'initiative et c'est très bien.

Une remarque à propos du copier-coller :
test que j'ai fait :
Dans un textbox, j'entre : 12
dans un second textbox, j'entre 42
Je fais un copier-coller du premier textbox vers le deuxième textbox
la valeur affichée dans le textbox de la somme : 4224

Est-ce ma calculette qui déraille ?
'----------------------------

| La présence de 2 modules de classe :

Personnellement, dans la mesure du possible, j'en aurais utilisé qu'un.
L'objectif d'un module de classe est de regrouper tout le code
afférent à la classe d'objet que l'on a défini. De plus, si tu désires
réutiliser ton module de classe dans un autre projet, ton module est
autononome avec un minimum d'intervention de ta part sur
le code qu'il contient.

Ceci était dit, je te félicite...pas beaucoup de personnes s'aventurent
sur ce terrain ... et ce n'est pas chose facile non plus.


Salutations!

P.-S. Je n'ai pas beaucoup de temps à consacrer au forum aujourd'hui !




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

salut,

ton controle d'erreur sur la saisie à quelques lacunes : si tu fais des
copier/coller rien ne tempeche d'avoir des saisie farfelues genre chiffre
avec plusieurs virgule ou -

j'ai créer deux module de classe qui peuvent pallier à ce genre de
probleme
:
- un module qui te permet de controler des saisies numérique (avec
plusieurs
options possibles)
- un module qui permet de bloquer la saisie tout en permettant de faire
des
copier (le module propose aussi d'autre options)

qu'en penses-tu ?

http://cjoint.com/?mxjB0ps68J


"michdenis" a écrit dans le message de news:
%
Bonjour Sophie,

Je te propose une alternative intéressante !

http://cjoint.com/?mwuAo8PEgX

Pour additionner, ça additionne !!!!

;-))


Salutations!



"sophie" a écrit dans le message de news:
doe43p$ul$
Bonjour à tous,

Dans un formulaire, j'ai 30 lignes de TXT (TXTM1, TXTM2,
TXTM3.....TXTM30),
dans lesquels les utilisateurs saisissent des montants et je voudrais que
le
montant total de ces TXT s'inscrive dans mon TXTHT. Je connais la façon
un
peu fastidieuse de TXTHT= val(txtm1)+val(txtm2)....mais je bloque dans le
cas où si l'utilisateur modifie sa saisie dans un TXT il faudrait que le
montant dans TXTHT se modifie lui aussi.

Merci d'avance pour votre aide.

Sophie










1 2