none
Où sont les erreurs ??????? RRS feed

  • Question

  • Aidez moi s'il vous plait, j'ai fait 2 jours entrain de chercher les erreurs logiques et de compilations au niveau de la procedure ci dessous. La procedure permet seulement de faire entrer des valeurs dans une structure sommet lorsque l'utilisateur clique sur le bouton OK. Voici ma logique: j'ai creé une structure nommée sommet, en voici sa definition: Structure Sommet Dim nom As String Dim nbrePred As Integer Dim valEtiq As Integer Dim etiq As Integer Dim tabPred() As String Dim tabPond() As Integer End Structure j'ai crée ensuite un tableau de cette structure: Dim tabSommet() As Sommet j'ai declaré une variable qui va lire la longeur de ce tableau de structure sommet: Dim nbreSommet as integer j'ai declarée deux variables pour parcourir le tableau de structure et les deux tableaux tabPred et tabPond: Dim compteur as integer Dim i as integer Les voici mes codes: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim compteur as integer Dim tabSommet() As Sommet Dim nbreSommet as integer If nbreSommet = 0 Then nbreSommet = TextBox1.Text ReDim tabSommet(nbreSommet - 1) compteur = 0 End If tabSommet(compteur).nom = TextBox2.Text tabSommet(compteur).nbrePred = TextBox3.Text tabSommet(compteur).valEtiq = 0 tabSommet(compteur).etiq = compteur + 1 For i = 0 To TextBox3.Text - 1 tabSommet(compteur) = New Sommet tabSommet(compteur).tabPred(i) = InputBox("Introduire les Predecesseurs") tabSommet(compteur).tabPond(i) = InputBox("Introduire les ponderations") Next i compteur = compteur + 1 TextBox2.Text = vbNullString TextBox3.Text = vbNullString TextBox2.Focus() compteur = compteur + 1 End sub Mais lorsque je l'execute, ce message apparait: "La référence d'objet n'est pas définie à une instance d'un objet." Comment faire ? Merci d'avance pour votre aide.
    migration de vb.net à vb 2005
    lundi 3 août 2009 09:03

Réponses

  • Bonjour,

    Le problème vient du fait que tes tableaux à l'interieur de ta structure ne sont pas initialisés.


     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer
            Dim compteur As Integer
            Dim tabSommet(1) As Sommet
            Dim nbreSommet As Integer = 0
    
            If nbreSommet = 0 Then
                nbreSommet = TextBox1.Text
                ReDim tabSommet(nbreSommet - 1)
                compteur = 0
            End If
    
            tabSommet(compteur).nom = TextBox2.Text
            tabSommet(compteur).nbrePred = TextBox3.Text
            tabSommet(compteur).valEtiq = 0
            tabSommet(compteur).etiq = compteur + 1
    
            For i = 0 To TextBox3.Text - 1
                tabSommet(compteur) = New Sommet
                ReDim tabSommet(compteur).tabPred(TextBox3.Text - 1)
                ReDim tabSommet(compteur).tabPond(TextBox3.Text - 1)
                tabSommet(compteur).tabPred(i) = InputBox("Introduire les Predecesseurs")
                tabSommet(compteur).tabPond(i) = InputBox("Introduire les ponderations")
            Next i
    
            compteur = compteur + 1
            TextBox2.Text = vbNullString
            TextBox3.Text = vbNullString
            TextBox2.Focus()
            compteur = compteur + 1
    
        End Sub

    Mais je pense que tu devrais adopter une approche plus objet.
    Premierement, il te faudrais un objet (une classe) à la place de ta structure.
    Ensuite il te faudrais des collections ou des listes à la place de tes tableaux.
    Ces deux principes te permettrait de ne pas avoir à te soucier de l'initialisation de tes tableaux.

    • Proposé comme réponse jchtible lundi 10 août 2009 15:53
    • Marqué comme réponse Marius Bugiulescu lundi 17 août 2009 11:48
    jeudi 6 août 2009 12:23
  • Bonjour

    Je suis entierement dacord avec jchtible.

    Je te anoté plusieres problémés dans ton code;


    Structure Sommet
            Friend nom As String
            Friend nbrePred As Integer
            Friend valEtiq As Integer
            Friend etiq As Integer
            Friend tabPred() As String 'Declarer comme Liste of T 
            'Friend tabPred As List(Of String)
            Friend tabPond() As Integer
            'Friend tabPont As List(Of Integer)
        End Structure
        Dim tabSommet() As Sommet
        Dim nbreSommet As Integer
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer
            Dim compteur As Integer
            Dim tabSommet() As Sommet
            Dim nbreSommet As Integer
    
            If nbreSommet = 0 Then
                nbreSommet = TextBox1.Text
                ReDim tabSommet(nbreSommet - 1)
                compteur = 0
            End If
    
            tabSommet(compteur).nom = TextBox2.Text 'PEUT ETRE SOURCE DE PROBLEMES PLUS TARD (La variable 'tabSommet est utilisée avant qu'une valeur ne lui ait été assignée)
            tabSommet(compteur).nbrePred = TextBox3.Text
            tabSommet(compteur).valEtiq = 0
            tabSommet(compteur).etiq = compteur + 1
    
            For i = 0 To TextBox3.Text - 1
                tabSommet(compteur) = New Sommet 'Pourqoi al interieur de for-next???
                '!!!! Tu te adresses a des ARRAYS Non dimensionés. Il Faut dimensioné un Array avant son utilisation !!!!
                ReDim Preserve tabSommet(compteur).tabPred(i)
                ReDim Preserve tabSommet(compteur).tabPond(i)
                tabSommet(compteur).tabPred(i) = InputBox("Introduire les Predecesseurs")
                'Si on click sur annuler sans dans l'inputbox le string returné est vide.
                'Un string vide, egal comme un string qui ne contient pas de chiffres, peut pas étre convertie en integer
                'Tester sie la entrée est valide
                Dim Test As Integer
                Try
                    Test = CInt(InputBox("Introduire les ponderations"))
                    tabSommet(compteur).tabPond(i) = Test
                Catch
                    MsgBox("Entrées un valeur nummerique dans 'Introduire les ponderations'")
                End Try
    
            Next i
    
            compteur = compteur + 1
            TextBox2.Text = vbNullString
            TextBox3.Text = vbNullString
            TextBox2.Focus()
            compteur = compteur + 1
    
    
        End Sub
                                            Cordialement heka2

    ps* Desolé pour le retard


    vendredi 7 août 2009 08:22

Toutes les réponses

  • Bonjour! charry.nk

    S.V.P. entre le code en copiant Copie/Coller en utilisant le bouton inserer Block de code. C'est l'icon enhaut tout a droit dans l'editeur de message. Cela nous permet de copier ton code directement dans une solution vierge de visualstudio. C'est plus facil a voir et a reproduir le erreur et on saurà dans quelle ligne le erreur se produit et a quelle reference l'erreur est attaché.


                                     Cordialement heka 2
    PS. Je ne serai pas chez moi avant 18 ou 19 heure aujourdui.  
    mercredi 5 août 2009 04:29
  • Bonjours

    La procedure permet seulement de faire entrer des valeurs dans une structure

    sommet lorsque

    l'utilisateur clique sur le bouton OK.

    Voici ma logique:

    j'ai creé une structure nommée sommet, en voici sa definition:

    Structure Sommet

    Dim nom As String
    Dim nbrePred As Integer
    Dim valEtiq As Integer
    Dim etiq As Integer
    Dim tabPred() As String
    Dim tabPond() As Integer

    End Structure

    j'ai crée ensuite un tableau de cette structure:

    Dim tabSommet() As Sommet

    j'ai declaré une variable qui va lire la longeur de ce tableau de structure

    sommet:

    Dim nbreSommet as integer

    j'ai declarée deux variables pour parcourir le tableau de structure et les

    deux tableaux tabPred et tabPond:

    Dim compteur as integer

    Dim i as integer
    Private Sub Button1_Click(...) Handles Button1.Click
    
    Dim i As Integer
    Dim compteur as integer
    Dim tabSommet() As Sommet
    Dim nbreSommet as integer
    
    If nbreSommet = 0 Then
    nbreSommet = TextBox1.Text
    ReDim tabSommet(nbreSommet - 1)
    compteur = 0
    End If
    
    tabSommet(compteur).nom = TextBox2.Text
    tabSommet(compteur).nbrePred = TextBox3.Text
    tabSommet(compteur).valEtiq = 0
    tabSommet(compteur).etiq = compteur + 1
    
    For i = 0 To TextBox3.Text - 1
    tabSommet(compteur) = New Sommet
    tabSommet(compteur).tabPred(i) = InputBox("Introduire les Predecesseurs")
    tabSommet(compteur).tabPond(i) = InputBox("Introduire les ponderations")
    Next i
    
    compteur = compteur + 1
    TextBox2.Text = vbNullString
    TextBox3.Text = vbNullString
    TextBox2.Focus()
    compteur = compteur + 1
    
    End sub 

    Mais lorsque je l'execute, ce message apparait: "La référence d'objet n'est pas définie à une instance d'un objet."

    Comment faire ?

    Merci d'avance pour votre aide.


    migration de vb.net à vb 2005
    • Proposé comme réponse jchtible lundi 10 août 2009 15:53
    jeudi 6 août 2009 12:07
  • Bonjour,

    Le problème vient du fait que tes tableaux à l'interieur de ta structure ne sont pas initialisés.


     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer
            Dim compteur As Integer
            Dim tabSommet(1) As Sommet
            Dim nbreSommet As Integer = 0
    
            If nbreSommet = 0 Then
                nbreSommet = TextBox1.Text
                ReDim tabSommet(nbreSommet - 1)
                compteur = 0
            End If
    
            tabSommet(compteur).nom = TextBox2.Text
            tabSommet(compteur).nbrePred = TextBox3.Text
            tabSommet(compteur).valEtiq = 0
            tabSommet(compteur).etiq = compteur + 1
    
            For i = 0 To TextBox3.Text - 1
                tabSommet(compteur) = New Sommet
                ReDim tabSommet(compteur).tabPred(TextBox3.Text - 1)
                ReDim tabSommet(compteur).tabPond(TextBox3.Text - 1)
                tabSommet(compteur).tabPred(i) = InputBox("Introduire les Predecesseurs")
                tabSommet(compteur).tabPond(i) = InputBox("Introduire les ponderations")
            Next i
    
            compteur = compteur + 1
            TextBox2.Text = vbNullString
            TextBox3.Text = vbNullString
            TextBox2.Focus()
            compteur = compteur + 1
    
        End Sub

    Mais je pense que tu devrais adopter une approche plus objet.
    Premierement, il te faudrais un objet (une classe) à la place de ta structure.
    Ensuite il te faudrais des collections ou des listes à la place de tes tableaux.
    Ces deux principes te permettrait de ne pas avoir à te soucier de l'initialisation de tes tableaux.

    • Proposé comme réponse jchtible lundi 10 août 2009 15:53
    • Marqué comme réponse Marius Bugiulescu lundi 17 août 2009 11:48
    jeudi 6 août 2009 12:23
  • Bonjour

    Je suis entierement dacord avec jchtible.

    Je te anoté plusieres problémés dans ton code;


    Structure Sommet
            Friend nom As String
            Friend nbrePred As Integer
            Friend valEtiq As Integer
            Friend etiq As Integer
            Friend tabPred() As String 'Declarer comme Liste of T 
            'Friend tabPred As List(Of String)
            Friend tabPond() As Integer
            'Friend tabPont As List(Of Integer)
        End Structure
        Dim tabSommet() As Sommet
        Dim nbreSommet As Integer
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer
            Dim compteur As Integer
            Dim tabSommet() As Sommet
            Dim nbreSommet As Integer
    
            If nbreSommet = 0 Then
                nbreSommet = TextBox1.Text
                ReDim tabSommet(nbreSommet - 1)
                compteur = 0
            End If
    
            tabSommet(compteur).nom = TextBox2.Text 'PEUT ETRE SOURCE DE PROBLEMES PLUS TARD (La variable 'tabSommet est utilisée avant qu'une valeur ne lui ait été assignée)
            tabSommet(compteur).nbrePred = TextBox3.Text
            tabSommet(compteur).valEtiq = 0
            tabSommet(compteur).etiq = compteur + 1
    
            For i = 0 To TextBox3.Text - 1
                tabSommet(compteur) = New Sommet 'Pourqoi al interieur de for-next???
                '!!!! Tu te adresses a des ARRAYS Non dimensionés. Il Faut dimensioné un Array avant son utilisation !!!!
                ReDim Preserve tabSommet(compteur).tabPred(i)
                ReDim Preserve tabSommet(compteur).tabPond(i)
                tabSommet(compteur).tabPred(i) = InputBox("Introduire les Predecesseurs")
                'Si on click sur annuler sans dans l'inputbox le string returné est vide.
                'Un string vide, egal comme un string qui ne contient pas de chiffres, peut pas étre convertie en integer
                'Tester sie la entrée est valide
                Dim Test As Integer
                Try
                    Test = CInt(InputBox("Introduire les ponderations"))
                    tabSommet(compteur).tabPond(i) = Test
                Catch
                    MsgBox("Entrées un valeur nummerique dans 'Introduire les ponderations'")
                End Try
    
            Next i
    
            compteur = compteur + 1
            TextBox2.Text = vbNullString
            TextBox3.Text = vbNullString
            TextBox2.Focus()
            compteur = compteur + 1
    
    
        End Sub
                                            Cordialement heka2

    ps* Desolé pour le retard


    vendredi 7 août 2009 08:22
  • Bonjours

    Merci , je vais suivre vos conseils



    migration de vb.net à vb 2005
    vendredi 7 août 2009 18:35