Calcul via USF et ComboBox

Résolu
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012 - 28 janv. 2009 à 09:18
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 29 janv. 2009 à 10:12
Hello tout le monde,

Je souhaite effectuer un calcul via un USF et des ComboBox et des TextBox.

J'ai essayé plusieurs façons, avec ou sans les Value, sans succès.

Private TextBoxTotal_Change()
TextBoxTotal.Value = Val(ComboBoxA).Value*Val(TextBoxC).Value+Val(ComboBoxB).Value*Val(TextBoxC).Value+Val(TextBoxD).Value
End Sub

Private TextBoxTotal_Change()
TextBoxTotal = ComboBoxA * TextBoxC + ComboBoxB * TextBoxC + TextBoxD
End Sub

Quelqu'un a la gentillesse de m'aider svp ?

Si jamais vous pouvez télécharger le fichier ci-dessous.http://www.cijoint.fr/cjlink.php?file=cj200901/cijd9haZOn.ziphttp://www.cijoint.fr/cjlink.php?file=cj200901/cijd9haZOn.ziphttp://www.cijoint.fr/cjlink.php?file=cj200901/cijd9haZOn.zip
Merci infiniment pour votre aide.

Antoniom.

10 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 janv. 2009 à 09:51
Salut
Comme son nom l'indique, TextBoxTotal semble être la TextBox qui affichera le résultat ?
Si tu mets un évènement dans TextBoxTotal_Change, il ne sera exécuté que lorsque quelque chose changera dans cet objet.
Ce n'est donc pas l'endroit le plus adapté pour lancer le calcul : à toi de voir

Le contenu d'une TextBox est dans maTextBox.Text : Pourquoi "Value" ?
Oui, Val() est bien nécessaire à la convertion explicite de ton texte en valeur numérique : il faut le garder car s'il existe une lettre dans ton texte, ce ne sera pas un chiffre - Lapalisse (1470-1525) - et si tu n'utilises pas Val(), tu auras une erreur programme. Val() renverra 0 si le contenu n'est pas un chiffre.

Dans l'aide, tu trouveras aussi que le texte sélectionné dans une ComboBox est aussi .Text

Si tu dois faire des calculs avec un mitigeage de + et de *, je te recommande d'ajouter des niveaux de parenthèses pour éviter les erreurs d'interprétation.

Si tu dois faire un calcul au fur et à mesure de la saisie dans les différentes TextBox/Combo :
Créé une Sub indépendante nommée monCalcul dans laquelle tu mettras
   Private Sub monCalcul()
      maTextBoxTotal.Text = 2 * 3 + 18
   End Sub
(je te laisse le soin de résoudre ton histoire de calcul comme décrit plus haut)
puis, dans chaque TextBox_Change de chaque paramètre, fais appel à cette Sub :
   Call monCalcul

Il fait beau en Suisse ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 janv. 2009 à 09:54
Pour le .Value, je n'avais jamais fait attention que cet propriété existait sous VBA.
Il semble que ce soit la même chose que .Text
Voir détails dans l'aide
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 janv. 2009 à 15:04
lol
As-tu créé ta Sub avec le calcul ?
As-tu bien inséré un appel à cette Sub dans chaque "TextBox_Change" (*) ou "ComboBox_Change" ?
(*) Sauf le TextBox du Total qui, d'ailleurs, devrait être un Label (avec effet 3D = ressemble à TextBox) puisqu'on n'est pas sensé faire de saisie de cette valeur

Connais-tu les touches F9 et F8 ?
F9 pose une demande d'arrêt sur une ligne de code.
Une fois stoppé sur cette ligne, il te suffit de survoler les noms des variables pour que leur valeur s'affichent.
F8 permet de continuer à exécuter le code, mais d'une seule figne afin de poursuivre la recherche de bug
F5, bien sûr, permet de continuer le programme normalement

Utilise ces fonctions pour suivre le programme et vérifier son cheminement + vérifier que les calculs sont bons. S'ils ne le sont pas, de regarder pourquoi.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 janv. 2009 à 00:21
Re
J'ai rechargé ton projet.
Il manque l'appel pour la TextBoxD
Ce qui m'étonne, c'est pourquoi est-ce que tu fais des calculs vers les cellules alors que tu travailles avec les TextBox/ComboBox ?
Non, il fallait reprendre ton idée initiale : Faire les calculs dans la UserForme avec les éléments de la UserForme. Oublie les cellules tant que tu n'as pas validé les chiffres.
Dans CalculTotal, il faut remettre :
TextBoxTotal.Value = Val(ComboBoxA).Value * _
                     Val(TextBoxC).Value + _
                     Val(ComboBoxB).Value * _
                     Val(TextBoxC).Value + _
                     Val(TextBoxD).Value
Cela calcule le résultat dans ta TextBoxTotal, point final. Pourquoi veux-tu faire interagir les cellules avec ?
Si, une fois les paramètres corrects entrés dans les TextBox/ComboBox, tu décides de valider ces chiffres, c'est là qu'il faut en faire la copie vers les cellules comme tu l'as fait.
Ce code de transfert UserForme/Cellules doit être mis dans le bouton de validation "OK" de la UserForme.
Si tu cliques sur le bouton d'annulation, bah tu ne fais rien, tu refermes la UserForme sans toucher aux cellules.

Comprends-tu ?
Je ne te refilerai pas le code corrigé, ce n'est pas dans mes habitudes et c'est un mauvais service à te rendre : C'est en comprenant mieux les choses que tu ne referas pas les mêmes "erreurs".

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
28 janv. 2009 à 10:08
Hello,

Ok Jack merci de m'avoir répondu, et merci pour tes explications !

Je vais voir ce que je peux faire avec tout ça et ton idée de créer une autre macro.

Je débute en prog donc pour ça, pas évident pour moi, mais c'est comme ça qu'on apprend le mieux.

Au fait j'ai mis le code dans le Change car justement je ne sais pas trop où le placer. J'ai à peu près essayé d'y mettre un peu partout, mais en vain.

Bref, je vais voir ce que je peux faire grâce à es explications, et si jamais je galère encore trop je reviendrais à la charge !

Merci encore Jack.

Antoniom.

P. S. En Suisse beau ? Tu rigoles ?
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
28 janv. 2009 à 13:47
Hello le Forum,

Rien à faire je n'y arrive pas  au secours..

Antoniom.
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
28 janv. 2009 à 22:22
Hello le Forum, Jack,

Avant tout, désolé de ne pas avoir répondu avant.

Ok j'ai réussi à faire quelque chose grâce à ton aide Jack.
Ce n'est pas excactement ce que tu me préconisais, mais pas loin.

En effet j'ai bien créé une macro pour le calcul et fait appel à elle sur chaque TextBox et CombobBox, j'en ai même créé deux, car il se peut aussi qu'on se passe de la TextBoxC pour le calcul.
Je te laisse voir la solution que j'ai trouvé dans le ficher que je joins plus bas.

Au passage, si tu pouvais me montrer ce que toi tu aurais fais, ça serait intéressant.

En tout les cas un grand merci de m'avoir mis sur la (bonne) voie.

Au plaisir de te lire.

http://www.cijoint.fr/cjlink.php?file=cj200901/cijtfcKGsU.zip

Antoniom.
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
29 janv. 2009 à 01:24
Hello,

C'est bien ce que je disais, comme je n'y arrivais pas, j'ai tenté (et réussi) de procéder autrement.
Après tout, le résultat est celui escompté
Mais pour l'exercice, je vais encore tenter avec ta proposition.

J'ai bien compris pour le bouton Ok et Annuler

Te tiens au courant.

@+, Antoniom.
0
cs_antom Messages postés 44 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 17 mai 2012
29 janv. 2009 à 09:48
Bonjour le Forum,

Jack si tu lis ce message sache que c'est bon, j'ai réussi et grâce à ton aide !

Si tu veux, charges le fichier et dis moi si ça a l'air correct.

http://www.cijoint.fr/cjlink.php?file=cj200901/cij4OAMidn.zip

Encore merci pour ton aide.

Au plaisir de te lire.

Antoniom.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 janv. 2009 à 10:12
De rien
0
Rejoignez-nous