Déclaration Tableau

Résolu
diiplayer Messages postés 64 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 24 octobre 2007 - 19 mai 2006 à 04:41
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 19 mai 2006 à 14:52
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

cs_deuspi Messages postés 10 Date d'inscription vendredi 26 septembre 2003 Statut Membre Dernière intervention 15 juin 2006
19 mai 2006 à 11:36
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)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2006 à 07:59
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2006 à 11:54
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
0
diiplayer Messages postés 64 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 24 octobre 2007
19 mai 2006 à 13:23
Il y aurait-il une manière de compté le nombre de ligne ou dois-je procédé avec une boucle?

Dii-Player
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2006 à 14:52
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
0
Rejoignez-nous