Déclaration Tableau

[Résolu]
Signaler
Messages postés
64
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
24 octobre 2007
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Salut, je tente actuellement de créé un petit OCX qui va aller lire des données dans un fichier Text et me les séparés dans un Tableau. Cependant, j'obtien un message d'erreur "Subscript out of range" et je sais pas comment sa.
Voici l'endoit ou l'erreur ce fait :

Do While Not EOF(bytFile)
        Row = Row + 1
        Line Input #bytFile, strTempData        If Col_Init 0 Then Col_Init Round(Len(strTempData) / Col_width, 0)
->    ReDim Preserve strData(Row, Col_Init)
        Dim i As Integer
        For i = 1 To Round(Len(strTempData) / Col_width, 0)
        strData(Row, i) = Mid(strTempData, i * Col_width, Col_width)
        Next i
        DoEvents
Loop

l'erreur se produit quand Row = 2, et je ne comprends pas pourquoi :'( si quelqu'un pouvais m'éclairé

Dii-Player

5 réponses

Messages postés
10
Date d'inscription
vendredi 26 septembre 2003
Statut
Membre
Dernière intervention
15 juin 2006

ReDim Preserve strData(Row, Col_Init)

C'est là ton erreur, tu essayes de redimensionner un tableau multidimensionnel, en faisant varier la 1ère dimension. En VB dans un tableau multidimensionnel, seul la dernière dimension peut être redimensionnée par un Redim Preserve.

En effet, si tu regardes dans l'aide du mot-clef "ReDim" tu trouveras cette phrase :

"Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que
la dernière dimension du tableau."

D'après moi tu pourrais résoudre rapidement ton problème en inversant les dimensions du tableau. Mais j'aime pas trop les tableaux multidimensionnels en VB, personnellement je te conseille plutôt d'utiliser des tableaux de types (tu crées un type personnalisé et tu fais un tableau monodimensionnel de ce type)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
comment as tu déclaré ton tableau ?

tu peux également faire :

If Col_Init 0 Then Col_Init Len(strTempData) \ Col_width


et pour ta boucle :


For i = 1 To Col_Init


à noter que tu ne récupère pas dans ton tableau la première colonne de données

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu peux par exemple dimensionner ton tableau (en ligne) dès le départ, en comptant préalablement les lignes de ton fichier.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
64
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
24 octobre 2007

Il y aurait-il une manière de compté le nombre de ligne ou dois-je procédé avec une boucle?

Dii-Player
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
une autre solution peut etre de lire (s'il n'est pas trop gros) tout ton fichier
et de jouer avec Split pour séparer tes lignes.

Renfield
Admin CodeS-SourceS- MVP Visual Basic