Microsoft 365 Equation premier degré vba

Saloumakh

XLDnaute Nouveau
SVP est ce que vous avez une idée sur comment résoudre l'équation ax+b=0 où a et b sont des coeff réels , un programme qui doit m'afficher la solution x de l'équation

Merci d'avance
 
Solution
Bonjour chakershaker, Saloumakh,

je te propose cette version améliorée de ton fichier. :)

ça n'utilise plus les cellules W1, W2, et W3 ; après avoir cliqué sur le bouton Équation, tout se passe sur le UserForm ; quand tu vas valider le bouton Résoudre (par un clic dessus, ou en appuyant sur la touche Espace), ça va afficher le résultat (s'il y en a un), puis aller automatiquement sur le bouton Effacer ; tu peux alors appuyer sur la touche Espace pour valider ➯ ça efface les données et le résultat, puis ça va...​

soan

XLDnaute Barbatruc
Inactif
@Saloumakh

dans ton post #3, tu as écrit : « c'était demandé à l'école pourtant » :rolleyes:

alors dans ce cas, voici un fichier .xlsm avec solution VBA.

fais Ctrl e ; tu dois d'abord saisir a, puis b ; attention : tu ne peux pas sortir d'une boîte de dialogue tant que tu n'as pas saisi une donnée ; cette donnée peut être un nombre réel entier, ou un nombre fractionnaire ; dans ce 2ème cas, pour le séparateur décimal, tu peux saisir au choix une virgule ou un point.


exemple 1 : saisis 8 puis 32 ➯ message : « Solution de ax + b : -4 »
vérif : ax + b = (8 × -4) + 32 = -32 + 32 = 0

exemple 2 : saisis -40.32 puis 38,75 ➯ message : « Solution de ax + b : 0,961061507936508 »
vérif : ax + b = (-40,32 × 0,961061507936508) + 38,75 = -38,75 + 38,75 = 0

je te laisse faire d'autres tests, avec d'autres valeurs. :)


Dim a# : idem que Dim a As Double

les calculs sont faits en interne avec la précision maximale (15 chiffres après la virgule), et lors du stockage dans les variables a et b, c'est selon la précision de ces variables du type Double, donc en double précision (par opposition au type Single qui est pour les variables en simple précision).


tu noteras que dans le code VBA, je ne mets pas directement les valeurs saisies dans a et b mais dans 2 chaînes de caractères s1 et s2 ; pourquoi ? car ça évitera de planter si l'utilisateur saisit une valeur incorrecte comme une lettre, ou un mot, ou une autre valeur non numérique.​



bien sûr, si a = 0, il faut sortir de la sub pour éviter une erreur de division par zéro !
car : -b / a = -b / 0 = plantage ! division par zéro : mathématiquement impossible !

tu peux aussi mettre :

If a = 0 Then MsgBox "a = 0 => Il n'y a pas de solution !": Exit Sub



code VBA :

VB:
Option Explicit

Sub Essai()
  Dim s1$, s2$, a#, b#
  Do
    s1 = InputBox("a : ")
  Loop Until s1 <> ""
  Do
    s2 = InputBox("b : ")
  Loop Until s2 <> ""
  a = Val(Replace$(s1, ",", ".")): If a = 0 Then Exit Sub
  b = Val(Replace$(s2, ",", "."))
  MsgBox "Solution de ax + b : " & -b / a
End Sub



ATTENTION :

j'ai amélioré ce fichier ; voir mon post #7.

(clique sur le lien bleu pour aller dessus)

soan
 

Pièces jointes

  • Exo Saloumakh.xlsm
    12.8 KB · Affichages: 3
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir Saloumakh, chakershaker,

voici une version améliorée du fichier de mon post #5.

fais Ctrl e, ou clique sur le bouton « Équation » ; pour la saisie des nombres : mettre un signe moins « - » devant si le nombre est négatif ; séparateur décimal : point « . » ou virgule « , » (au choix)

VB:
Option Explicit

Sub Équation()
  Dim msg$, s1$, s2$, a#, b#
  Do: s1 = InputBox("Saisir la valeur de a :"): Loop Until s1 <> ""
  Do: s2 = InputBox("Saisir la valeur de b :"): Loop Until s2 <> ""
  a = Val(Replace$(s1, ",", "."))
  If a = 0 Then MsgBox "a = 0 => Pas de solution !": Exit Sub
  Const lf2 As String * 2 = vbLf & vbLf
  b = Val(Replace$(s2, ",", "."))
  msg = "a = " & a & lf2 & "b = " & b & lf2 _
    & "Solution de ax + b = 0 :" & lf2 & "x = -b / a = " & -b / a
  MsgBox msg, 0, "Infos"
End Sub

soan
 

Pièces jointes

  • Exo Saloumakh.xlsm
    14.9 KB · Affichages: 3
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour chakershaker, Saloumakh,

je te propose cette version améliorée de ton fichier. :)

ça n'utilise plus les cellules W1, W2, et W3 ; après avoir cliqué sur le bouton Équation, tout se passe sur le UserForm ; quand tu vas valider le bouton Résoudre (par un clic dessus, ou en appuyant sur la touche Espace), ça va afficher le résultat (s'il y en a un), puis aller automatiquement sur le bouton Effacer ; tu peux alors appuyer sur la touche Espace pour valider ➯ ça efface les données et le résultat, puis ça va automatiquement sur la 1ère TextBox : prêt pour la saisie d'une nouvelle valeur de a.

pour la saisie des nombres : mettre un signe moins « - » devant si le nombre est négatif ; séparateur décimal : point « . » ou virgule « , » (au choix)

attention : note bien que le résultat n'est plus affiché dans une TextBox mais dans un Label !​

VB:
Option Explicit

Private Sub cmdRsd_Click()
  Dim a#, b#, s$
  If txtA = "" Then MsgBox "Vous devez donner a !": txtA.SetFocus: Exit Sub
  a = Val(Replace$(txtA, ",", ".")): If a = 0 Then MsgBox "a = 0 => Pas de solution !": Exit Sub
  If txtB = "" Then MsgBox "Vous devez donner b !": txtB.SetFocus: Exit Sub
  b = Val(Replace$(txtB, ",", ".")): s = Replace(LTrim$(Str$(-b / a)), ".", ",")
  If Left$(s, 2) = "-," Then s = "-0," & Right$(s, Len(s) - 2)
  If Left$(s, 1) = "," Then s = "0" & s
  txtX.Caption = s: cmdClr.SetFocus
End Sub

Private Sub cmdClr_Click()
  txtX.Caption = "": txtB = "": txtA = "": txtA.SetFocus
End Sub

Private Sub txtA_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

soan
 

Pièces jointes

  • Équation.xlsm
    22.5 KB · Affichages: 5

Discussions similaires

Réponses
11
Affichages
605

Statistiques des forums

Discussions
315 127
Messages
2 116 539
Membres
112 774
dernier inscrit
Foudil59