Redimensionner un array bidimensionnel

laurent45

XLDnaute Occasionnel
Bonsoir le Forum,

J'ai une ListBox que je rempli avec un Array qui récupère les données sur une Feuille.
Quand on démarre, un tableau est toujours vide ! ;)
Et je ne sais jamais à l'avance combien de colonne il aura en fin d'utilisation.
Donc, au fur et à mesure que les colonnes augmentent, la taille du Array augmente.

Ce Array est de type Variant, et à 2 dimensions.
Array (0 To nb colonnes, 0 to 1).

Au début il est déclaré Dim Array().

Quand je fais des ReDim Preserve, ça beug ! Vu qui est vide :
ReDim Preserve Array(0 To UBound(Array,1)+1, 0 To 1)
UBound me dit que l'indice n'appartient pas à la sélection

Qu'est-ce que j'ai déconné ?

Merci à vous

Laurent
 

Hervé

XLDnaute Barbatruc
Bonsoir laurent, le forum

ton bug du preserve, ne vient pas du fait que ton tableau est vide, mais que tu ne peux pas changer la premiere dimension d'un tableau avec preserve.

tu crée ton tableau :

dim tablo() as integer

tu le dimensionne à vide :

ReDim tablo(1 To 10, 1 To 5)

si ensuite tu veux modifié sa taille tu ne pourra pas joué sur la premiere dimension (1 to 10)

donc : ReDim Preserve tablo(1 To 20, 1 To 5) 'BUG

tandis que :
ReDim Preserve tablo(1 To 10, 1 To 50) 'ne bug pas

Je sais c'est pénible mais on s'y fait :)

je te conseille aussi la lecture de l'aide d'excel à preserve, très instructif.

salut
 

laurent45

XLDnaute Occasionnel
Re Hervé, le Forum,

J'ai trouvé la parade :

En fait je travaille avec 2 tableau qui paraisse identique au départ.
Lors du remplissage Tabl1 est redimensionné à la valeur minimum nécessaire
ReDim Tabl1(0 To RangeNécessaire, 0 To 1).
Le Tabl2 est déjà aux dimensions maximum au niveau Module
Dim Tabl2(0 To 51,0 To 1) as Variant
.
Le remplissage des 2 tableaux se fait sur la base de Tabl1.

Lors des mis à jour, j'ajoute les données une à une. Une TextBox sert de masque de saisie. La nouvelle données va dans Tabl2. :
Tabl2(ListBox.ListCount - 1,0)=TextBox.Value
Je remplie la ListBox (où j'avais déjà rentré Tabl1 pour le démarrage), avec Tabl2 à chaque fois que j'ai une nouvelle données.
Si j'ai une erreur de saisie, je vide la ListBox, et je la remplie avec Tabl1 et je réinitialise en même temps Tabl2.

Et ainsi de suite. :whistle:

Vous avez suivi ?

@+

Laurent
 

Discussions similaires

Réponses
2
Affichages
303

Statistiques des forums

Discussions
312 493
Messages
2 088 958
Membres
103 990
dernier inscrit
lamiadebz