Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2056 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème avec tableau dynamique à deux dimensions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec tableau dynamique à deux dimensions

n°1516778
skystef2
Posté le 20-02-2007 à 09:47:13  profilanswer
 

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?

mood
Publicité
Posté le 20-02-2007 à 09:47:13  profilanswer
 

n°1516998
ZeBix
edit > preview
Posté le 20-02-2007 à 14:15:09  profilanswer
 

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 :
  1. Dim montab()
  2. Dim i
  3. (...)
  4. i = 100
  5. MsgBox ("Valeur de i : " & i)
  6. Redim montab(i,i)
  7. ' stockage de tes valeurs ici et affichage du contenu

 

*edit*

 

Essaye aussi une déclaration directement en deux dimensions :

 
Code :
  1. Dim montab()()
 

(c'est un peu loin le VB je ne sais plus si ce type de décla existe)

Message cité 1 fois
Message édité par ZeBix le 20-02-2007 à 14:17:52
n°1517036
skystef2
Posté le 20-02-2007 à 14:41:59  profilanswer
 

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é)

Code :
  1. Dim montab()
  2. Dim i
  3. (...)
  4. i = 100
  5. MsgBox ("Valeur de i : " & i)
  6. Redim montab(i,i)
  7. ' stockage de tes valeurs ici et affichage du contenu

 
 
*edit*  
 
Essaye aussi une déclaration directement en deux dimensions :  
 

Code :
  1. Dim montab()()


 
(c'est un peu loin le VB je ne sais plus si ce type de décla existe)


 
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() .
 
 

n°1517046
ZeBix
edit > preview
Posté le 20-02-2007 à 14:50:42  profilanswer
 

Oki tâtonnons donc un peu plus (où sont les experts VB du forum ?  :cry: )
 

Code :
  1. Dim montab(,)


 
(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   :pt1cable:  )

n°1517112
tegu
Posté le 20-02-2007 à 15:50:31  profilanswer
 

« 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.
 
 

n°1517126
skystef2
Posté le 20-02-2007 à 16:12:21  profilanswer
 

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.

n°1517131
tegu
Posté le 20-02-2007 à 16:34:49  profilanswer
 

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.
 

n°1517148
skystef2
Posté le 20-02-2007 à 16:57:53  profilanswer
 

En fait j'avais pas fait attention mais je devais partir de 0 et pas de 1 to x... Maintenant ça fonctionne  :whistle:  
 
 
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 :jap:
 
nb : je travaille sous excel 2003.


Message édité par skystef2 le 20-02-2007 à 16:58:20
n°1517484
tegu
Posté le 21-02-2007 à 11:14:17  profilanswer
 

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
Dim t() As Variant
Sub test()
    ReDim t(4) As Variant
    ' ici, le tableau t() contient bien 5 éléments (indices 0 à 4)
    test2
    ' ici, le tableau t() contient bien 7 éléments (indices 0 à 6)
End Sub
Sub test2()
    ReDim t(6) As Variant
End Sub


Tu dois avoir un autre problème.

n°1590532
Drakeshin
Posté le 24-07-2007 à 08:35:59  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème avec tableau dynamique à deux dimensions

 

Sujets relatifs
Problème de privilèges UniversalXPConnectProbleme de SERVLET
[RESOLU] Probleme pour renommer les fichiers PHPPbleme parcours tableau + ajout dans variable
Problème CSS avec Mozilla[C++] Problème avec les fonctions virtuelles
probleme avec forum phpbbpopup créer fê^netre problème
[PHP]Problème if else if et connexion 
Plus de sujets relatifs à : Problème avec tableau dynamique à deux dimensions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR