VB : l'index se trouve en dehors du tableau.

Fermé
Loulipop - Modifié par Loulipop le 12/04/2010 à 09:53
 mariethe - 19 mai 2010 à 11:54
Bonjour,
J'ai besoin d'avis extérieur parce que je ne trouve pas mon erreur. Je veux lire un fichier et le mettre dans un datagridview.
Je veux lire certaines colonnes (mais je n'ai pas encore compris comment faire), mais déjà, j'ai une erreur : "l'index se trouve en dehors du tableau"

Donc j'ai ça
Module Module1  
    Function ListeFichierATraiter() As String()  

        '   Déclarations et initialisations de varaibles locales  
        '  
        Dim DossierCourant As String = "Data\Projet"  
        Dim ListeFichiers As String() = Directory.GetFiles(DossierCourant & "\GD")  
        Dim OKDebug As Boolean = True  
        ' on vérifie si on est dans le bon fichier  
        Debug.WriteLine("Dossier Courant = " & DossierCourant)  
        
     If OKDebug Then  
            For Each f As String In ListeFichiers  
                Debug.WriteLine(f)  
            Next f  
        End If  
        Return ListeFichiers  
    End Function  
    Sub Traitement(ByVal NomFichierAtraiter As String)  
        Dim Sr As StreamReader = New StreamReader(NomFichierAtraiter)  
        Dim MonDs As DataSet  
        Dim dt As DataTable = New DataTable("MaTable")  
        Dim Colonne As DataColumn  
        Dim Ligne As DataRow  
        Dim LigneLue As String = Nothing  
        Dim LigneSplittee() As String = Nothing  
        
LigneLue = Sr.ReadLine()  

        LigneSplittee = LigneLue.Split(CType(vbTab, Char))  

        For Each LS As String In LigneSplittee  
            Debug.WriteLine("LS = " & LS)  
        Next LS  
        

        Try  
            
            Colonne = New DataColumn()  
            Colonne.DataType = System.Type.GetType("System.String")  
            Colonne.ColumnName = LigneSplittee(0).Trim  
            Colonne.ReadOnly = True  
            Colonne.Unique = False  
            '  
            '   Ajout de la colonne à la collection Columns de dt  
            '  
            dt.Columns.Add(Colonne)  
            '  
            '   Construction de la deuxième table  
            '  
            Colonne = New DataColumn()  
            Colonne.DataType = System.Type.GetType("System.String")  
            Colonne.ColumnName = LigneSplittee(1).Trim  
            Colonne.ReadOnly = True  
            Colonne.Unique = False  
            '  
            '   Ajout de la colonne à la collection Columns de dt  
            '  
            dt.Columns.Add(Colonne)  
            '  
            '   Création de notre dataSet  
            '  
            MonDs = New DataSet  
            '  
            '   Ajout de la table à la collectio Tables de MonDs  
            '  
            MonDs.Tables.Add(dt)  
            '  
            '   Lecture et traitement des données contenues dans le fichier   
            '   en cours de traitement  
            '  
            Do While Not Sr.EndOfStream  
                '  
                LigneLue = Sr.ReadLine()  
                '  
                '   Si la ligne est vide, on en lit une nouvelle  
                '  
                If LigneLue = "" Then  
                    Continue Do  
                End If  
                  
                LigneSplittee = LigneLue.Split(CType(vbTab, Char))  
                '  
                '   Boucle permettant de vérifier si l'attendu est l'obtenu  
                '  
                For Each LS As String In LigneSplittee  
                    Debug.WriteLine("LS = " & LS)  
                Next LS  
                '  
                '   Création et remplissage d'une nouvelle ligne.  
                '  
                Ligne = dt.NewRow  
                 
                Ligne(0) = LigneSplittee(0)  
                Ligne(1) = LigneSplittee(1)  
                '  
                '   Ajout de la ligne à la collection  
                '  
                dt.Rows.Add(Ligne)  
                '  
            Loop  
            Sr.Close()  
            '  
            '   Paramétrage du DataGridView1  
            '  
            With Form1.DataGridView1  
                .RowHeadersVisible = True  
                .ColumnHeadersVisible = True  
                .ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter  
                .RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter  
                .RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders  
                .DataSource = MonDs.Tables(0)  
                Dim rowNumber As Integer = 1  
                '  
                For Each row As DataGridViewRow In .Rows()  
                    If row.IsNewRow Then Continue For  
                    '  
                    '   La valeur doit être de type String apparement  
                    '  
                    row.HeaderCell.Value = rowNumber.ToString  

                    rowNumber += 1  
                Next row  
                '  
                .AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)  
                .RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter  
                '  
            End With  
        Catch ex As Exception  
            Debug.WriteLine(ex.Message)  
        End Try  
    End Sub  

End Module 


et un form1
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim MaListeFichier() As String = Module1.ListeFichierATraiter
        Module1.Traitement(MaListeFichier(0))
        'Me.DataGridView1.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
        'Me.DataGridView1.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        'InitialisationDataGridView()
    End Sub
    Sub InitialisationDataGridView()
        With Me.DataGridView1
            'Définition du nombre de colonne
            .ColumnCount = 20
            '   Définition du nombre de ligne
            .RowCount = 101
            '
            .RowHeadersVisible = True
            .ColumnHeadersVisible = True
            '.RowHeadersDefaultCellStyle =
            .RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders

            For i As Integer = 0 To .ColumnCount - 1
                .Columns(i).Name = CStr(i + 1)
            Next i
            .ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize

            Dim rowNumber As Integer = 1
            For Each row As DataGridViewRow In .Rows()
                If row.IsNewRow Then Continue For
                row.HeaderCell.Value = rowNumber.ToString
                rowNumber += 1
            Next row
            .AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
            .RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter

            For i As Integer = 0 To 99
                For j As Integer = 0 To 19
                    .Rows(i).Cells(j).Value = CStr((i + 1) * (j + 1))
                Next j
            Next i
            .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        End With
    End Sub


Mon erreur apparait lors du Catch ex As Exception du module 1, avec le message "L'index se trouve en dehors des limites du tableau"

Je ne trouve pas mon erreur et je sèche beaucoup!
Si vous pouvez m'aider, me mettre sur la piste, ça serait géniale car ça me bloque vraiment ! Merci
A voir également:
  • L'index se trouve en dehors des limites du tableau.
  • Vb cable - Télécharger - Audio & Musique
  • Vb - Télécharger - Langages
  • Vb editor - Télécharger - Langages
  • Vb runtime - Télécharger - Divers Utilitaires
  • Vb 2008 - Télécharger - Langages

8 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 11/04/2010 à 14:34
Bonjour,

Peux-tu nous indiquer sur quelle ligne se produit l'erreur.

Merci également de mettre en forme le code en utilisant les balises (4ème icônes en haut du pavé [<>]), c'est illisible comme ça.

Quant au bug du logiciel, j'y crois pas trop.
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
1
moi non plus j'ai bien cherché mais je ne trouve pas d'erreur je pense que c'est le logiciel qui bug
0
Utilisateur anonyme
11 avril 2010 à 16:24
bonjour,
je suis sûre que ton debuggeur était plus généreux que toi.
puisque tu n'indique pas la ligne d'erreur je peux te répondre que t'as quelque part un tableau dont l'index depasse les limites=la longueur du tableau.
0
J'ai remis l'annonce en forme avec le lieu de l'erreur et le message que j'ai.
J'ai essayer de modifier certains paramètres mais je ne trouve pas :/
0

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

Posez votre question
bonjour,
ton code, vrai manque beaucoup d'organisation mais il est corrêct, le problème est peut être dans ce que t'as prévu, verrifie bien que les lignes lus sont pas vides avant de les utilisater justement là:

LigneLue = Sr.ReadLine()      
'premiere instruction de lecture dans la methode traitement()


et puisque tu utilise traux de tableaux comme c'est le cas ici:

Ligne(0) = LigneSplittee(0)        
Ligne(1) = LigneSplittee(1)        
'toujours dans traitement()


celà signifie que tu as au moins un separateur tab dans ton fichier sinon l'index sera out.
derniere chose quand en utilise les fichier il est trés recommendé de tujours verrifier leurs état est ce qu'ils sont en cours d'utilisation ou pas. mais dans ce cas t'auras un autre type d'exception....


I Have a dream that One day every One makes his Operating System and tell Microsoft to get the hell
God bless Martin Luther King.
0
Est ce que je peux pas faire plus simple comme code ?
C'est la 1ere fois que j'utilise les datagridview et j'avoue ne pas m'en sortir :/

Ce que je veux obtenir à terme, c'est une form, où seront lues mes données générés dans Excel, en choisissant les colonnes à lire.
Pouvez vous me donner quelques idées à explorer ?

J'essaye de m'aider de l'aide en ligne mais je bloque complètement...
0
entre excel et tes projets tu peux faire importation exportation des données facilement et te passer de lecture des streams.
je te conseille de cherecher les methodes des classes suivantes:
Excel.Application 'Application Excel 
Excel.Workbook 'Classeur Excel 
Excel.Worksheet 'Feuille Excel

qui te permetront de gérer tes fichiers excel
jete un oeil par là https://drq.developpez.com/vb/tutoriels/Excel/ ca va t'aider
I Have a dream that One day every One makes his Operating System and tell Microsoft to get the hell
God bless Martin Luther King.
0
Utilisateur anonyme
15 avril 2010 à 20:31
une autre idée qui peut t'interresser c'est d'utiliser ado.net et travailler sur tes fichier comme sur des bases de données.
0
comment supprimer ce message d'erreur qui apparaît en permanence avec WINDOWS 7 : "une exception non gérée s'est produite dans un composant de votre application. Si vous cliquez sur continuer votre application va ignorer cette erreur et essayer de continuer.
L'index se trouve en dehors des limites du tableau."
merci beaucoup à celui ou celle qui me renseignera.
0