Cherche comment automatiser un calcul

Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - Modifié le 1 sept. 2022 à 10:38
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - 3 sept. 2022 à 14:02

Bonjour le Forum,

Je cherche comment automatiser un calcul avec un bouton, je m'explique, l'utilisateur rentre des valeurs décimal dans 19 Textbox, puis en appuyant sur un bouton il faut que la valeur finale soit de 1000, mais seules certaines Textbox peuvent être modifiées par ce calcul "X1; X2; X3 et Y1; Y2", tout en gardant le même rapport entre X1; X2; X3 et Y1; Y2. Je pensais incorporer des pourcentages, mais reste le comment.

Voici le code.
 

  If X3 = 0 And X2 = 0 And X1 = 0 Or Y1 = 0 And Y2 = 0 Then
            Valeure.Text = Str(CDec(0))
        Else
            Valeure.Text = CStr(CDec((X3 + X2 + X1) / (Y1 + Y2)))
        End If
 
 
  RESULTAT.Text = CStr(X3 + X2 + X1 + Y1 + Y2 + B1 + A1 + A2 + D1 + D2 + D3 + D4 + J1 + J2 + J3 + J4 + Z1 + Z2 + V)

Merci pour votre aide,

5 réponses

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
1 sept. 2022 à 10:47

Bonjour

pour la présentation du code merci de choisir le langage basic, je te l'ai déjà dit il y a quelques jours.

On t'a déjà dit, aussi et à maintes reprises, d'enlever la référence à visual basic dans tes projets, ainsi qu'activer Option Strict et Option Explicit.

Pour tes variables, puisque le "calcul" est une somme de 19 valeurs, tu devrais utiliser une List(of double) et sa méthode Sum.

Pour ton calcul,

  • tu fais la somme.
  • si elle ne vaut pas 1000, tu calcules la différence et tu la répartis proportionnellement entre les variables qu'il faut. Tu peux refaire la somme pour voir, mais ça devrait le faire au pouillemme près à cause de l'imprecision des doubles et éventuellement des arrondis si tu en fait,

0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
1 sept. 2022 à 19:20

Je ne regarde que le code :

If X3 = 0 And X2 = 0 And X1 = 0 Or Y1 = 0 And Y2 = 0 Then
            Valeure.Text = Str(CDec(0))
        Else
            Valeure.Text = CStr(CDec((X3 + X2 + X1) / (Y1 + Y2)))
        End If

si Y1=5 et Y2=-5, les 2 sont différents de 0, mais tu aura une erreur de division par 0.
Il serait préférable de tester Y1+Y2 plutot que les 2 séparés.
Et concernant les X, pas besoin de tester, car 0/Y donnera toujours 0.


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
Modifié le 3 sept. 2022 à 00:22

Bonsoir à vous deux,

Je vais essayer d'apporter un peu plus de précision.

je dois trouver une solution pour augmenter ou diminuer les valeurs des Textbox "X1; X2; X3 et Y1; Y2" en gardant le même ratio entre elles , tout en prenant en compte qu'il faut que l'utilisateur remplisse 2 valeurs au minimum, un X et un Y pour que le calcul se fasse.

Par exemple si Y1 = 157.89; Y2 = 171.76; X1 = 113.21; X2=92.59; X3= 149.25; B1=300 et V= 200 

le total est de 978.45

 
Valeure.Text = CStr(CDec((X3 + X2 + X1) / (Y1 + Y2))) => (113.21+92.59+149.25)/(157.89+171.76) =1.07

il faut donc augmenter les valeurs X1 ,X2 ,X3 ,Y1 et Y2 proportionnellement jusqu'à 1000 tout en gardant le rapport de 1.07, après il peut aussi arriver que cela dépasse 1000, si au dessous tel code si en dessous tel code.

If RESULTAT.Text > Str(CDec(1000)) Then
Else if RESULTAT.Text < Str(CDec(1000)) Then

sinon mon projet est bien en Option Strict et Option Explicit.

0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
3 sept. 2022 à 00:27

J'ai encore dû modifier l'une de tes zones de saisie de code.

sinon mon projet est bien en Option Strict et Option Explicit.

Ha bon, alors  X1, X2, X3 et Y1, Y2 ne sont pas des textbox, sinon, il manque .Text partout et avec ces options ça ne compilerait pas.

De plus tu n'as pas enlevé la référence à Visual Basic, car Str et CDec ce n'est pas du VB.Net.

Enfin, ta précision n'a rien précisé du tout, parce que je comprends le même besoin qu'à ton premier message.

Et donc ma première réponse reste complètement valable.

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
3 sept. 2022 à 08:53

Oui, cela n'a pas été précisé mais les lettres sont des variables

exemple => Dim Y1 As Decimal

Pour Str et Cdec, VB.net ne me donne pas le choix, sinon j'ai une erreur de conversion String en Decimal.

0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
Modifié le 3 sept. 2022 à 13:38

cstr et cdec sont à éviter.

If RESULTAT.Text > Str(CDec(1000)) Then

est complètement à bannir, si tu veux comparer 2 nombres :

If Decimal.parse(RESULTAT.Text) > 1000 Then

Est plus juste.

Pour remplacer CDec -> Decimal.Parse (ou TryParse si la valeur peut être incorrecte)
Pour Remplacer CStr -> <Value>.ToString()

0

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

Posez votre question
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
3 sept. 2022 à 14:02

Bonjour NHenry,

Merci pour vos conseils, je viens de tester Decimal.parse et cela fonctionne parfaitement, j'étais resté sur Cdec car cela faisait le taf aussi

0
Rejoignez-nous