cs_antom
Messages postés44Date d'inscriptionvendredi 25 janvier 2008StatutMembreDernière intervention17 mai 2012
-
28 janv. 2009 à 09:18
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_antom
Messages postés44Date d'inscriptionvendredi 25 janvier 2008StatutMembreDernière intervention17 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 !
cs_antom
Messages postés44Date d'inscriptionvendredi 25 janvier 2008StatutMembreDernière intervention17 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.
cs_antom
Messages postés44Date d'inscriptionvendredi 25 janvier 2008StatutMembreDernière intervention17 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.