Problème redimensionnement tableau VBA ??

Bonjour tout le monde,

J'ai un problème concernant la dimensionnement et le redimensionnement d'un tableau et je ne sais pas trop pourquoi ça plante. Si quelqu'un à une idée de mon problème voici le bout de code que j'utilise et qui plante (ci-dessous).

Le résultat souhaité serait d'avoir un tableau qui contient le meme nombre de ligne que i (voir le code) et avec deux colonnes.

Je n'arrive pas à dimensionner le tableau de façon dynamique et de ce fait je lui ai donné ces dimensions Tabella(righe,1) avec righe déclaré comme constant.

Quand j'essaye de redimensionner le tableau après le loop avec un Redim Preserve Tabella(0 to i,0 to 1), il me dit qu'il y a une erreur et je ne comprend pas pourquoi.

Merci d'avance.

Option Explicit

Public i&
Public Const righe = 10000000

sub test()
Dim Tabella(righe, 1) As String
Dim val1 As String, val2 As String
Dim msg1

    Do While Not EOF(2)
        Line Input #2, msg1
        val1 = CStr(Left(msg1, InStr(1, msg1, " ") - 1))
        val2 = CStr(Mid(msg1, InStr(1, msg1, " ") + 1, Len(msg1)))
        i = i + 1
        Tabella(i, 0) = val1
        Input #2, Tabella(i, 0)
        Tabella(i, 1) = val2
        Input #2, Tabella(i, 1)
    Loop
end sub

Bonjour,

Dans un tableau dynamique, seule la dernière dimension est redimensionnable.

Cordialement.

Merci pour la réponse.

Par contre, je ne sais pas pourquoi mais sa plante si je fais

Option Explicit

Public i&
'Public Const righe = 10000000

sub test()
Dim Tabella() as String
'Dim Tabella(righe, 1) As String
Dim val1 As String, val2 As String
Dim msg1

    Do While Not EOF(2)
        Line Input #2, msg1
        val1 = CStr(Left(msg1, InStr(1, msg1, " ") - 1))
        val2 = CStr(Mid(msg1, InStr(1, msg1, " ") + 1, Len(msg1)))
        i = i + 1
        Tabella(i, 0) = val1
        Input #2, Tabella(i, 0)
        Tabella(i, 1) = val2
        Input #2, Tabella(i, 1)
    Loop
Redime Preserve Tabella(0 to i,0 to 1)
end sub

Comment se fait il?

L'erreur ne vient pas de Redime* (une petite coquille en écrivant vite)

Redim et non Redime...

et voir mon post précédent.

edit : houlà ! et le redimensionnement se fait avant d'affecter chaque élément !

Il faut revoir la méthode !

Je suis désolé mais je n'y arrive pas...

Je n'arrive pas à définir un tableau à i ligne et 2 colonnes. J'arrive à i ligne et une colonne mais ce n'est pas ce que je recherche.

Quelqu'un pourrait m'aider svp?

Si tu définis un tableau dynamique, à redimensionner donc au fur et à mesure, et que tes lignes sont variables et tes colonnes fixes, tu ne peux faire un tableau(lignes, colonnes) mais tu dois faire un tableau(colonnes, lignes) dans lequel tu pourras redimensionner les lignes.

Est-ce que ça tu le comprends ?

Donc, sous réserve de la validité de la lecture du fichier texte :

    Do While Not EOF(2)
        Line Input #2, msg1
        val1 = CStr(Left(msg1, InStr(1, msg1, " ") - 1))
        val2 = CStr(Mid(msg1, InStr(1, msg1, " ") + 1, Len(msg1)))
        ReDim Preserve Tabella(1, i)
        Tabella(0, i) = val1
        Tabella(1, i) = val2
        i = i + 1
    Loop

Cordialement.

Merci pour l'explication et le bout de code. Toutefois, le problème subsiste est se trouve toujours lors de la Redim.

    Do While Not EOF(2)
        Line Input #2, msg1
        val1 = CStr(Left(msg1, InStr(1, msg1, " ") - 1))
        val2 = CStr(Mid(msg1, InStr(1, msg1, " ") + 1, Len(msg1)))
        ReDim Preserve Tabella(1, i)
        Tabella(0, i) = val1
        Tabella(1, i) = val2
        Input #2, Tabella(0, i)
        Input #2, Tabella(1, i)
        i = i + 1
    Loop

Lorsque la macro arrive à Redim Preserve Tabella(1,i) la macro me fait sortr du sub =/ je ne comprends pas pourquoi

bonjour

salut au passage MFerrand

je ne comprends pas trop la nécessité de redimensionner un tableau

Excel le fait tout seul si on a fait menu Accueil "mettre sous forme de tableau" ou bien menu Données "Liste" (selon les versions d'Excel)

amitiés

Pas possible : c'est la première fois que Tabella apparaît dans le code après la déclaration...

Quel est ton code ? (copié à partir du module et collé).

@jmd: on n'est pas sur une feuille Excel ! On parle de tableau VBA, qui n'existe qu'en mémoire, et doit être alimenté à partir d'un fichier texte pour lequel je n'ai d'ailleurs pas vu de commande d'ouverture.

salut MFerrand

oui certes

mais ne vaut-il pas mieux travailler sur une table Excel ?

note : pour une table en mémoire il vaut mieux Python.

Je suppose que tous les outils de programmation permettent de travailler avec des tableaux. VBA pour sa part y excelle.

Au cas particulier, ce que j'en perçois, c'est qu'il s'agit d'une opération en marge d'Excel... Pour disposer d'outils de programmation, il faut s'en équiper, VBA on en dispose automatiquement avec Office, il est donc facile de l'utiliser à des fins diverses, et de surcroît on dispose de l'application pour rendre le résultat visible...

Bonne journée.

Pas possible : c'est la première fois que Tabella apparaît dans le code après la déclaration...

Quel est ton code ? (copié à partir du module et collé).

Voici le bout de mon code :

Dim msg1, msg2, msg3
Dim spazio1 As Integer, spazio2 As Integer, spazio3 As Integer
Dim spazio11 As Integer, spazio22 As Integer, spazio33 As Integer
Dim p As Integer

Dim n As Integer
Dim ciclo&
Dim Tabella() As String
Dim val1 As String, val2 As String, val3 As String
Dim coppia As Double

n = 0
ciclo = 2

If k = 2 Then
    i = -1
    Do While Not EOF(2)
        Line Input #2, msg1
        spazio1 = InStr(1, msg1, " ")
        spazio2 = InStr(spazio1 + 1, msg1, " ")
        val1 = CStr(Left(msg1, InStr(1, msg1, " ") - 1))
        val2 = CStr(Mid(msg1, spazio1 + 1, spazio2 - spazio1))
        val3 = CStr(Mid(msg1, spazio2 + 1, Len(msg1)))
        ReDim Preserve Tabella(i, 2)
        Tabella(0, i) = val1
        Input #2, Tabella(0, i)
        Tabella(1, i) = val2
        Input #2, Tabella(1, i)
        Tabella(2, i) = val3
        Input #2, Tabella(2, i)
        i = i + 1
    Loop
End If

Je ne comprend pas non plus pourquoi je sors subitement du sub

Je suppose que tous les outils de programmation permettent de travailler avec des tableaux. VBA pour sa part y excelle.

Au cas particulier, ce que j'en perçois, c'est qu'il s'agit d'une opération en marge d'Excel... Pour disposer d'outils de programmation, il faut s'en équiper, VBA on en dispose automatiquement avec Office, il est donc facile de l'utiliser à des fins diverses, et de surcroît on dispose de l'application pour rendre le résultat visible...

Bonne journée.

re

oui mais vu la difficulté, pourquoi ne pas travailler dans Excel tout simplement ?

avec peu ou pas de VBA.

Bonjour,

        ReDim Preserve Tabella(i, 2)

On ne peut pas redimensionner ainsi ! Il faut te le dire combien de fois !

        Input #2, Tabella(0, i)

Syntaxe incorrecte ! En outre Input est une fonction, et on ne voit pas ce ça vient faire ici (puisque le résultat n'est pas récupéré ni utilisé et que cela fait un peu double emploi avec Line Input).

Le fichier n'est pas ouvert dans la procédure (??), et pourquoi #2 ?

Cela fait déjà beaucoup de sources d'erreurs !

@jmd: Pour l'instant on a affaire à une manipulation de fichier. Je ne sais pas ce qu'il y a dans ce fichier je ne me prononce donc pas sur une méthode alternative pour en extraire un mot (compris entre 2 espaces) sur chaque ligne du fichier.

Cordialement.

Donc, sous réserve de la validité de la lecture du fichier texte :

    Do While Not EOF(2)
        Line Input #2, msg1
        val1 = CStr(Left(msg1, InStr(1, msg1, " ") - 1))
        val2 = CStr(Mid(msg1, InStr(1, msg1, " ") + 1, Len(msg1)))
        ReDim Preserve Tabella(1, i)
        Tabella(0, i) = val1
        Tabella(1, i) = val2
        i = i + 1
    Loop

Cordialement.

Certainement, que l'on redimensionne pas comme celà. Néanmoins, lorsque je le fais avec le code que tu m'as envoyé, cela ne fonctionne pas non plus ...

Concernants, les Inputs, ils me servent à faire un QuickSort par la suite dans le fichier .txt, et il se trouve que mon fichier Texte est ouvert dans ma Macro générale.

Le #2 car j'ouvre mon second fichier texte, le premier s'appelant #1

Donc je reviens à mon problème initial, je ne sais pas pourquoi arrivé sur ReDim Preserve Tabella(1, i) ou ReDim Preserve Tabella(2, i) ou peu importe, ... je sors de la macro suite à une erreur.

Bonjour,

quel message d'erreur reçois-tu ? Sur quelle ligne ? Peux-tu mettre un fichier dans lequel on peut reproduire l'erreur ?

Rechercher des sujets similaires à "probleme redimensionnement tableau vba"