Quel est l'erreur ?

Signaler
Messages postés
2
Date d'inscription
dimanche 27 décembre 2020
Statut
Membre
Dernière intervention
28 décembre 2020
-
 arthurbertau -
Bonsoir,
Je dois rendre un dossier pour mon examen de janvier, mon code fonctionne mais j'aimerais rajouter de l'automatisation. J'aimerais que lorsque j'appuie sur enter mon code s'active mais rien ne se passe ...
Pouvez-vous m'aider ?

Merci et bonne fin de soirée
Public Class Form1
    Dim A, B, C, D, J, F, G, H, I, K, L, M, X, Y, Z
    Dim matrice(1) As Double
    Dim déterminant As Double
    Dim det1 As Double
    Dim det2 As Double
    Dim det3 As Double
    Dim det4 As Double
    Dim det5 As Double
    Dim det6 As Double

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles calculer.Click
        A = TextBox1.Text
        B = TextBox2.Text
        C = TextBox3.Text
        D = TextBox4.Text
        J = TextBox5.Text
        F = TextBox6.Text
        G = TextBox7.Text
        H = TextBox8.Text
        I = TextBox9.Text
        K = TextBox10.Text
        L = TextBox11.Text
        M = TextBox12.Text
        det1 = A * (((J) * (I)) - ((H) * (F)))
        det2 = B * (((D) * (I)) - ((G) * (F)))
        det3 = C * (((D) * (H)) - ((G) * (J)))
        déterminant = det1 - det2 + det3
        If déterminant = 0 Then
            TextBox13.Text = "les équations sont indéterminée"
        ElseIf déterminant <> 0 Then
            det4 = (K * (((J) * (I)) - ((H) * (F)))) - (B * (((L) * (I)) - ((M) * (F)))) + (C * (((L) * (H)) - ((M) * (J))))
            X = det4 / déterminant
            det5 = (A * (((L) * (I)) - ((M) * (F)))) - (K * (((D) * (I)) - ((G) * (F)))) + (C * (((D) * (M)) - ((G) * (L))))
            Y = det5 / déterminant
            det6 = ((((J) * (M)) - ((H) * (L)))) - (B * (((D) * (M)) - ((G) * (L)))) + (K * (((D) * (H)) - ((G) * (J))))
            Z = det6 / déterminant
            TextBox13.Text = "x =" & X & "   " & "y=" & Y & "   " & "z=" & Z
        End If
    End Sub

    Private Sub calculer_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles calculer.KeyPress
        If Asc(e.KeyChar) = 13 Then
            det1 = A * (((J) * (I)) - ((H) * (F)))
            det2 = B * (((D) * (I)) - ((G) * (F)))
            det3 = C * (((D) * (H)) - ((G) * (J)))
            déterminant = det1 - det2 + det3
            If déterminant = 0 Then
                TextBox13.Text = "les équations sont indéterminée"
            ElseIf déterminant <> 0 Then
                det4 = (K * (((J) * (I)) - ((H) * (F)))) - (B * (((L) * (I)) - ((M) * (F)))) + (C * (((L) * (H)) - ((M) * (J))))
                X = det4 / déterminant
                det5 = (A * (((L) * (I)) - ((M) * (F)))) - (K * (((D) * (I)) - ((G) * (F)))) + (C * (((D) * (M)) - ((G) * (L))))
                Y = det5 / déterminant
                det6 = ((((J) * (M)) - ((H) * (L)))) - (B * (((D) * (M)) - ((G) * (L)))) + (K * (((D) * (H)) - ((G) * (J))))
                Z = det6 / déterminant
                TextBox13.Text = "x =" & X & "   " & "y=" & Y & "   " & "z=" & Z
            End If
        End If
    End Sub
End Class

7 réponses

Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2021
551
Bonjour

Maintenant que @Karamel a rendu ton code lisible, on peut commencer à y voir clair.

J'aimerais que lorsque j'appuie sur enter mon code s'active mais rien ne se passe ...

Où appuies tu tu enter?
  • sur button1?
  • sur calculer?


Quel est le type de calculer?

As tu placé un point d’arret dans tes méthodes et exécuté le code en pas à pas, tout en espionnant le contenu des variables pour voir ce qui se passe?

En aparté, ton nommage de contrôle n’est pas bon. « Button1 » ou « textbox1 » ne donnent aucune indication sur leur utilité, et « calculer » ne donne aucune indication sur le type du contrôle.
Dans 6 mois, si on te demande de faire évoluer ce code tu ne sauras plus qui fait quoi....
Une façon de nommer conseillée un peu partout et de commencer par quelques caractères qui symbolise le type de contrôle (par exemple tbx => TextBox, but => Button, frm => Form, etc) et ensuite un ou deux mots en camel case décrivant l’utilité (par exemple butCalcuDeterminant, txtParamA)
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2021
551
Tu peux commencer par lire ceci
https://openclassrooms.com/fr/courses/1526901-apprenez-a-developper-en-c/2867766-utilisez-le-debogueur/

Ensuite, quand on clique sur enter alors qu’un bouton a le focus, c’est l’événement Click qui est déclenché.
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137
Salut Whis
Le lien que tu as donné est un lien "mort"

Bonjour arthurberteau
On a tous été débutant un jour . Pour être efficace il faut apprendre et assimiler les bases du langage .
Un excellent cours bien qu'il date un peu : https://plasserre.developpez.com/cours/vb-net/ . il ne fera pas de toi un codeur hors pair mais te permettra de coder correctement et d'évoluer si tu suis ce cours .
Bon courage

Ton "Enter" c'est lorsque tu modifies une Textbox et que tu valides par la touche "Enter" . Et tu voudrais que ceci déclenche ton code si je comprends bien ?

>
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021

Re,
cela ne fonctionne pas. je ne sais pas pq ...
De plus, lorsque j'appuie sur mon tab et que je modifies les chiffres, la réponse ne change pas

merci
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137 > arthurbertau
Dire "cela ne fonctionne pas " n'est pas précis et ne nous éclaire pas .
Peux-tu poster le code du KeyPress des Textbox ?
Attention TAB sert à naviguer entre les Textbox . Il faut taper les chiffres et valider par Enter . De plus les Textbox doivent toutes être remplies à l'initialisation du programme .
>
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021

bonjour, j'aimerais que lorsque j'apuie sur enter, après avoir remplis les textbox, que mon programmes calculer les différentes réponse.
 Private Sub Textbox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress, TextBox5.KeyPress, TextBox6.KeyPress, TextBox7.KeyPress, TextBox8.KeyPress, TextBox9.KeyPress, TextBox10.KeyPress, TextBox11.KeyPress, TextBox12.KeyPress
        If e.KeyChar = Convert.ToChar(13) Then
        det1 = A * (((J) * (I)) - ((H) * (F)))
        det2 = B * (((D) * (I)) - ((G) * (F)))
        det3 = C * (((D) * (H)) - ((G) * (J)))
        déterminant = det1 - det2 + det3
        If déterminant = 0 Then
            TextBox13.Text = "les équations sont indéterminée"
        ElseIf déterminant <> 0 Then
            det4 = (K * (((J) * (I)) - ((H) * (F)))) - (B * (((L) * (I)) - ((M) * (F)))) + (C * (((L) * (H)) - ((M) * (J))))
            X = det4 / déterminant
            det5 = (A * (((L) * (I)) - ((M) * (F)))) - (K * (((D) * (I)) - ((G) * (F)))) + (C * (((D) * (M)) - ((G) * (L))))
            Y = det5 / déterminant
            det6 = ((((J) * (M)) - ((H) * (L)))) - (B * (((D) * (M)) - ((G) * (L)))) + (K * (((D) * (H)) - ((G) * (J))))
            Z = det6 / déterminant
            TextBox13.Text = "x =" & X & "   " & "y=" & Y & "   " & "z=" & Z
            End If
        End If
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137 > arthurbertau
Ce code-ci devrait fonctionner !
Par contre ce que tu ne comprends point ( et que moi j'ai peut-être mal compris de ta part )
1) Supposons toutes les Textbox remplies . Le fait de modifier une Textbox déclenche avec le Enter sur cette Textbox le calcul . C'est le fonctionnement du code au-dessus et ceci est valable pour n'importe quelle Textbox .
2) Ou alors toutes les Textbox sont vides et on les remplit les unes après les autres et une fois toutes remplies le calcul se déclenche .
Quel est le fonctionnement que tu désires ?
Autre chose : enlève le é à la variable
déterminant
. On ne met aucun accent, cédille et autre du même genre dans un nom de variable .
>
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021

Bonsoir,
j'aimerais arrivé à la situation numéro 2. les textbox sont vides et on les remplis les unes après les autres et lorsque le remplissage finis, le calcul se déclenche avec enter
Oui, c'est vrai je le modifie
merci
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2021
551
Ha ben pour une fois qu’openclassroom avait un bon tuto, ils l’ont viré....

Y’a celui là aussi
https://docs.microsoft.com/fr-fr/visualstudio/debugger/debugger-feature-tour?view=vs-2019
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2021
551
Bonsoir

j'avais laissé de coté cette discussion, pensant le problème simple à résoudre et VB parfaitement à même de t'y mener.
Il semble que non finalement, on dirait qu'il y a une incompréhension entre vous.

Je reviendrais un peu plus tard avec un exemple (code et captures d'écran) de ce que je pense être une solution.

Mais en attendant, sur la forme, ton code est "lourd", il y a des choses inutiles ou obsolètes qui le rendent plus difficile à lire que nécessaire (et donc à debboguer)
  • les parenthèses en trop

sur cette ligne par exemple
det1 = A * (((J) * (I)) - ((H) * (F)))
les parenthèses autour d'une variable ne servent à rien, on peut donc déjà simplifier comme ça
det1 = A * ((J * I) - (H * F))
. Mais c'est pas tout, VB respecte la priorité des opérations => la multiplication est prioritaire sur la soustraction et l'addition, il ne faut mettre des parenthèses que pour contrecarrer cette priorité.
On arrive à
det1 = A * (J * I - H * F)
, ça fait moins mal aux yeux non?
  • la construction de string

ça
TextBox13.Text = "x =" & X & "   " & "y=" & Y & "   " & "z=" & Z
c'est du VB6. Comme précédement c'est lourd à lire, les & et les ", y'en a partout et on a vite fait de se tromper. En plus en l'état, X, Y et Z étant des doubles ça peut afficher pleins de chiffres après la virgule => code difficile à coder et à lire et résultat encore plus difficiles à lire du gens
"x= 1.99999999999999999999999 y = 1.234567890123456789 etc..."
effet pourri garanti, surtout si c'est plus long que ce que ton textbox peut afficher.
VB.Net, permet d'écrire le texte fixe d'un coup, en balisant l'emplacement des données variables. Et en plus de baliser on, peut formater. On liste ensuite les variables à insérer
String.Format("x={0:0.00} y={1:0.00} z={2:0.00}", 1.23456789, 2.99999999999, 3.0987654321)
ce qui donne en mode console


PS pour l'historique VB6 a été abandonné par Microsoft progressivement entre 1998 et 2005 (plus de 15 ans....)
PS2 VB.Net est en fait du C# avec un skin VB, C# a une lointaine ascendance avec le C, langage dans lequel il est déjà possible de composer des strings avec le modèle balisé et formaté et ensuite les variables

Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2021
551
J'ai oublié un truc sur le fond
  • "chacun chez soi et les poules seront bien gardés"

un bout de code qui fait un calcul, fait un calcul
un bout de code qui interagit avec l'interface, interagit avec l'interface

Moins on mélange plus c'est clair
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2021
551
Pour mon exemple, j'ai un formulaire avec 3 textbox
  • tbxA
  • tbxB
  • tbxRes

et des labels qui indiquent leur rôles.


J'ai une méthode qui calcule (et rien que ça)
    ''' <summary>
    ''' Méthode qui calcule la division de 2 nombres
    ''' C'est donc une méthode dont le travail est un calcul
    ''' </summary>
    ''' <param name="Dividende">Nombre à diviser</param>
    ''' <param name="Diviseur">Nombre par lequel on divise</param>
    ''' <returns></returns>
    Private Function Divise(Dividende As Double, Diviseur As Double) As Double
        If Diviseur = 0 Then
            Return Double.NaN 'la division par 0 est impossible alors on retourne Not A Number
        End If

        Return Dividende / Diviseur

    End Function


J'ai aussi une méthode qui gère l'IHM, attention sa signature est celle d'une méthode abonnée à un évènement KeyPress d'un TextBox
    ''' <summary>
    ''' Méthode abonné aux évenènements KeyPress des 2 textbox d'entrée
    ''' Cette méthode vérifie que les conditions sont remplies pour le calcul et si oui demande à la méthode dédiée de le faire.
    ''' Elle affiche un text selon le cas.
    ''' C'est une méthode d'IHM
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub MesTextBox_KeyPress(sender As Object, e As KeyPressEventArgs)
        'sender est l'objet qui appelle la méthode, en théorie c'est un textbox, on essaye de caster pour vérifier

        Dim tbx As TextBox = TryCast(sender, TextBox)
        If tbx Is Nothing Then
            Return 'finallement c'était pas un textbox, y'a un bog quelque part mais on s'en affanchi en quittant la méthode maintenant
        End If

        If e.KeyChar <> Convert.ToChar(13) Then
            tbxRes.Text = "tapez Enter pour calculer"
            Return
        End If

        Dim a, b As Double
        If Double.TryParse(tbxA.Text, a) And Double.TryParse(tbxB.Text, b) Then
            'les textes contenus dans tbxA et tbxB sont convertis en double, on peut appeler la méthode qui calcule
            Dim res As Double = Divise(a, b)
            If Double.IsNaN(res) Then
                tbxRes.Text = "Division par 0 impossible"
            Else
                tbxRes.Text = String.Format("A/B = {0:0.000}", res)
            End If

        Else
            tbxRes.Text = "tbxA et tbxB ne contiennent pas que des nombres"
        End If


    End Sub


Dans le designer, on sélectionne un textBox d'entrée, on va chercher l'évènement KeyPress et surtout on ne double clique pas, on clique sur la liste déroulantes et toutes les méthodes du formulaire dont la signature est compatible seront sélectionnables.


Là y'en a qu'une, mais faudra faire attention quand tu en auras plusieurs (d'où l'importance d'un nom fort).

On fait pareil avec le 2eme textbox et y'a plus qu'à




merci pour votre temps ;)
Messages postés
2
Date d'inscription
dimanche 27 décembre 2020
Statut
Membre
Dernière intervention
28 décembre 2020

Bonjour,
je suis nouveau sur le forum mais je ferais gaffe pr la prochaine fois ( merci @Karamel).
J'ai changé le nom de button1 par calculer mais je l'ai oublié dans mon code. Qu'est ce qu'un point d'arrêt. je suis désolé mais je suis vriament pas doué en code (j'esssaye d'évoluer mais ce n'est pas facile)

merci pour vos réponse