Problème avec tableau dynamique à deux dimensions - VB/VBA/VBS - Programmation
Marsh Posté le 20-02-2007 à 14:15:09
Essaye sans donner de type à ta première déclaration ? (et aussi évite les noms tels que "tab" je sais pas si ce n'est pas un nom réservé)
Code :
|
*edit*
Essaye aussi une déclaration directement en deux dimensions :
Code :
|
(c'est un peu loin le VB je ne sais plus si ce type de décla existe)
Marsh Posté le 20-02-2007 à 14:41:59
ZeBix a écrit : Essaye sans donner de type à ta première déclaration ? (et aussi évite les noms tels que "tab" je sais pas si ce n'est pas un nom réservé)
|
il n'accepte pas montab()()... j'ai essayé de leur donner une dimension du genre montab(1,1) et de faire un redim montab(i,i) mais il me dit que mon tableau est déjà dimensioné.
PS: mes tableaux ne s'appellent pas tab() .
Marsh Posté le 20-02-2007 à 14:50:42
Oki tâtonnons donc un peu plus (où sont les experts VB du forum ? )
Code :
|
(c'est une déclaration .NET dont je ne suis pas sûr de la syntaxe exacte et ne sais pas si elle marche en VBS/VBA/VB6 )
Marsh Posté le 20-02-2007 à 15:50:31
« Dim tab() As Variant » est une déclaration tout à fait valable et si tu n'as aucune valeur dans ton tableau, c'est que ton remplissage est mauvais ou que ton ReDim est, soit mal placé (après le remplissage), soit mal utilisé.
Un Redim doit être suivi du mot-clé « Preserve » pour pouvoir redéfinir la taille de la dernière dimension du tableau en gardant le contenu actuel :
Dim tab() as Variant ' on connait pas les dimensions
Redim tab(12, 5) as Variant ' on connait les dimensions de base
...
Redim Preserve tab(12, 14) as Variant ' on augmente la dernière dimension
On ne peut pas augmenter les dimensions autres que la dernière.
Marsh Posté le 20-02-2007 à 16:12:21
Bon, merci pour vos réponses mais j'ai toujours mon problème.
Alors, je doisa voir des tableaux de la forme suivante montableau(1,x). Si j'ai bien compris, ça veut dire que j'ai 2 colonnes et x lignes dans ce cas? J'ai un doute là.
Pour l'instant, je déclarais mes tableaux en mettant 100,100 et ma macro les remplissaient correctement, même si 100,100 sont exagerés. Voilà comment se présenterais les tableaux que je dois gérer:
Titi Toto Tata etc..
1 0 4 etc...
Bref, montab(,) ne fonctionne pas et je fait les Redim avant d'insérer des données.
Marsh Posté le 20-02-2007 à 16:34:49
Sans le code (du moins une partie éclairante) il est difficile de voir quel est ton problème.
Je rencontre tellement de programmeurs qui me disent qu'ils font telle ou telle chose et dont le code n'a rien à voir avec ce qu'ils me disent que je préfère rester prudent. Rien de personnel
Tu n'as déjà pas précisé si tu travailles en VB6 ou en VBA (Word, Excel ?)
Pour ce qui est de savoir si c'est des lignes ou des colonnes, ça n'a aucune importance à moins de jouer dans Excel, auquel cas on respecte le plus souvent le « sens » Excel.
Marsh Posté le 20-02-2007 à 16:57:53
En fait j'avais pas fait attention mais je devais partir de 0 et pas de 1 to x... Maintenant ça fonctionne
Par contre, j'ai eu un drôle de bug. Mes tableaux sont déclarés de façon globale à la macro (tout en haut dans le code, arf oui je suis pas bon en vba donc c'est peut etre pas comme cela qu'on dit). J'ai donc une fonction qui fait les redim et qui remplit les tableaux. Certaines fois, cette fonction en apelle une autre qui les remplit à nouveau (les mêmes). J'ai eu de nouveau des problèmes d'indices comme si les tableaux n'était plus à deux dimensions.
J'ai donc fait de nouveau un redim (sans preserve, je voulais au contraire que çà efface tout) et ça marche. Dois-je en déduire que les redim n'ont une porté que sur la fonction ? (entre sub et end sub je sais plus comment ça s'apelle).
Merci quand même pour l'aide apportée plus haut
nb : je travaille sous excel 2003.
Marsh Posté le 21-02-2007 à 11:14:17
Si tu as bien déclaré ton tableau dans la partie « (Déclarations) » de ton module alors ton tableau est valable pour toutes les procédures et fonctions du module.
Le Redim ne doit rien y changer.
Option Explicit |
Tu dois avoir un autre problème.
Marsh Posté le 24-07-2007 à 08:35:59
On ne peut pas redimenssionner un tableau a deux dimension en VB. Mais j'ai une solution ^^
public type tablo
tab() as integer
end type
dim tabl() as tablo
Tu redimenssione les deux dimension de façon séparée, mais tu a un tableau à deux dimension dynamique
Marsh Posté le 20-02-2007 à 09:47:13
Bonjour,
J'ai un soucis avec des tableaux dynamique à deux dimensions. Je les ait déclarer comme suit dans mon programmes :
Dim tab() As Variant
puis dans mon algo, je récupère un entier et je fait : Redim tab(int,int). J'ai vérifié que mon entier avait bien une valeur différente de null et de 0.
Le reste de mon algo alimente ce tableau. Malheureusement, il semble qu'aucunne données ne soit inscrite dans le tableau. Si je mets des tailles fixes : Dim tab(100,100) par exemple, mon programme fonctionne correctement.
J'ai également vérifié que je rentrais pas plus de valeur que le tableau était grand (pas de débordement, si mon entier vaut 30, je ne peux pas rentrer plus de 30 valeurs).
Je précise que le Redim se fait en début de programme quand le tableau ne contient aucune valeur (pas d'écrasement donc).
Quelqu'un peut-il m'aider?