TABLEAU DYNAMIQUE

TABLEAU DYNAMIQUE - VB/VBA/VBS - Programmation

Marsh Posté le 10-10-2002 à 10:05:42    

Dim Essai()
ReDim Essai(0 To 4, 0 To 2)
ReDim Preserve Essai(0 To 10, 0 To 2)
 
 
==> Indice hors plage (9)
 
Voila je suis en train de tester VB6 et en tant que novice
je rencontre des problèmes qq1 pourrait il m'aider ??
 
 

Reply

Marsh Posté le 10-10-2002 à 10:05:42   

Reply

Marsh Posté le 10-10-2002 à 10:19:11    

Essai est un tableau de quoi ??
Il serait peut etre bien d'indiquer son type !
 
Dim Essai(10) as Integer, par exemple, pour un tableau de 10 integer
 
Et vérifie la syntaxe de Redim !! Tu t'es loupé royalement !
 
http://msdn.microsoft.com/library/ [...] mReDim.asp

Reply

Marsh Posté le 10-10-2002 à 11:13:50    

Dans mes tests g declare le type de variable ... et a voir sur MSDN je voa pas ou g fe d'erreur ....... tout les test kil montre je lé ai testé ....

Reply

Marsh Posté le 10-10-2002 à 11:15:24    

D'ailleurs g oublie de preciser ke si je declarer le typez de Var il me met tableau deja redimmensionné !

Reply

Marsh Posté le 10-10-2002 à 11:23:37    

Il apparait que sa ne fonctionne pas lorsque g deux dimensions ou plus a mon tableau ...

Reply

Marsh Posté le 10-10-2002 à 15:27:31    

Je sais plus trop les nuances (je viens de regarder sous QBASIC de NT4 !) pour ça, mais on peut avoir plus d'une dimension.
Je me demande si la déclaration préalable est bonne, car elle sous entend (?) qu'il n'y a qu'une dim (??).
Par défaut, il me semble que BASIC autorise des tableaux "non déclarés" à 9 cases.
 
Pourquoi ne pas essayer
 
Dim Essai%(1 to 1, 1 to 1) (Dim Essai%(,) pas sûr que ça marche :D)
ReDim Essai%(0 To 4, 0 To 2)  
ReDim Preserve Essai%(0 To 10, 0 To 2)  
 
Sans garantie.
 
Quand on fait Dim Essai%(), on utilise ensuite un tableau mono_dimensionnel. Suis pas sur que ça gène :).
 
Question idiote : le Dim initial est fait juste avant ? En fait quelle est la PORTEE de la variable Essai%() ??
Si mal placée, ou mal définie (Global Essai%() as integer), VB croit peut-être que c'est un nouveau Essai%() local ?

Reply

Marsh Posté le 10-10-2002 à 15:51:00    

Argale a écrit a écrit :

Dim Essai()
ReDim Essai(0 To 4, 0 To 2)
ReDim Preserve Essai(0 To 10, 0 To 2)
 
 
==> Indice hors plage (9)
 
Voila je suis en train de tester VB6 et en tant que novice
je rencontre des problèmes qq1 pourrait il m'aider ??
 




 
skoa Preserve ?? ca te sert a koi
 
sinon si tu fais juste ca ca march :
 

Code :
  1. dim toto() 'declaration du tabeau
  2. redim toto (0 to 10 ,0 to 5)

Reply

Marsh Posté le 10-10-2002 à 16:31:21    

Preserve sert à préserver les données déja présentes dans le tableau quand il était plus petit.
 
Redim alloue nouvelle mémoire pour les données et les initialise, Préserve fait idem sauf qu'il les conserve (comme realloc() en C).

Reply

Marsh Posté le 10-10-2002 à 16:56:47    

Merci de vos reponses.. mais je n'y arrive pas ....
G essayer de declarer dans le DIM initial de preciser une taille a 2 dimension mais rien ......
Kan o preserve je suis oblige de le mettre ...
En fait je m'amuse a faire un analyser de LOG Q3 et donc vu que le nombre de joueur n'est pas forcement le meme je suis oblige de redimmensionner ....
 
Sauf si j'utiliser un SWAP mais bon sa me fe chier ... je voulé faire ce prg en VB histoire de tester et la je me retrouve bloquer pour un connerie...

Reply

Marsh Posté le 10-10-2002 à 20:38:34    

Je vais essayer tout à l'heure sous VB3 sous Windows 3.11 (16 bits).
Si ça marche ici, on essaiera de voir le "détail" du code voir si y a pas astuce. Ca tient des fois à quasi-rien.
Pb : VB, je m'y remet car passé au C.
 
La déclaration de Essai() se fait dans un fichier .BAS, .FRM ?
ReDim Essai(0 TO 4, 0 TO 2) dans le même BAS, FRM ?
ReDim Preserve dans le même FRM, BAS ?
 
Nb : je ne sais plus si sous VB on peut déclarer/utiliser (car la déclaration préalable n'est malheureusement pas obligatoire) des variables de même nom mais de nature différente (genre Essai%() Essai!(), Essai() en variant (beurk), Essai&(), etc..). Dans ce cas là, on peut des fois se tromper d'objet.  
Y a option "Explicit" qui permet à VB de rouspéter quand on utilise une varaible qui n'a pas de déclaration préalable qq part.
 
Y a pas d'ERASE Essai qq part (la fonction qui permet de libérer la mémoire en effaçant le tableau) ?

Reply

Marsh Posté le 10-10-2002 à 20:38:34   

Reply

Marsh Posté le 10-10-2002 à 21:43:49    

Le serveur cafouille ! Message perdu.
 
Pour pas tout retaper :
Ai essayé code sous VB3/Win3.11. Ca cafouille aussi.
On ne peut allonger/modifier QUE la DERNIERE dimension. (Preserve ou non)  
 
Redim Essai(0 to 2, 0 TO 10)
Redim Essai(0 to 2, 0 TO 100)  bon
Redim Essai(0 to 2, 0 TO 150)  bon
 
Redim Essai(0 to X, 0 TO 10) PAS BON
 
Je n'avais pas remarqué ou ai oublié.
 
Si seule une dim change, faut les inverser => ça marchera
Dim Essai()  
ReDim Essai(0 To 2, 0 To 4)  
ReDim Preserve Essai(0 To 2, 0 To 10)  TOUT BON
 
Sinon : lourd : faut sauver en copiant donnees dans tableau provisoire, recréer en l'agrandissant le tableau de travail, et recopier ce qu'il y avait avant et détruire le tableau provisoire...


Message édité par Carbon_14 le 10-10-2002 à 21:45:14
Reply

Marsh Posté le 11-10-2002 à 09:23:40    

Je teste tout ça et je te dis koi ...  
C tres pro de ta part de me repondre !!!

Reply

Marsh Posté le 11-10-2002 à 09:51:18    

ca ca marche :
 

Code :
  1. Dim toto()
  2. ReDim toto(1 To 10)
  3. ReDim Preserve toto(1 To 20)


 
mais avec un preserve tu ne peut modifier le nombre de dimension d'un tablo

Reply

Marsh Posté le 11-10-2002 à 11:00:57    

Effectivement maintenant sa fonctionne g fe qqc dy style :
ReDim Joueur(0 To 2, 0 To 0) As String
REdim Joueur(0 to 2, 0 to TAILLE)... etc...
 
faudra que je me penche sur le pb de l'utilisation du redim en declaration de var. mais pour l'instant sa fonctionne correctement ... donc on en pe ny changer la dimension d'un tableau et on ne peut ke modifier la derniere dimension de ce tableau ...  
 
Ence ki me concerne c tout bon g inverse les dimensions de mon tablo ke je redimmensionne comme je ve ... :bounce:  
 
Bientot mon pti soft sera pres une fois ke j'aure dechiffre  le games.log   :gun:

Reply

Marsh Posté le 11-10-2002 à 12:56:44    

C'est pas pro, ça me chagrinait que ça coince, et j'ai ainsi découvert que ReDim avait des limitations. Je l'ai signalé à un collègue qui fait du QBASIC pr ses manips :(.
 
Si on a plus d'une dimension, si on gère ça soi-même en C, faut bien aussi se discipliner. Si on veut augmenter chaque dimension, c'est pas direct, faut jongler pas mal en réallocation/copie/.. C'est un peu normal que ce soit comme ça...
 
Une solution "lourde" qu'on pouvait utiliser dasn les temps quand dynamique pas possible : prévoir plus que besoin (mais ça encombre mémoire), comme ça on est tranquille. Le pb est de savoir quel est le maxi.

Reply

Marsh Posté le 11-10-2002 à 15:04:12    

si j'avé sur j'auré fait un tableau de liste chainées mais le but ct de voir les fonctionnalités de VB ... voila ki est chose faite ...

Reply

Marsh Posté le 11-10-2002 à 15:38:12    

Ce qu'il faut est de savoir ce qu'on peut tirer des langages, et des besoins.
 
J'avais besoin de générer 500 feuilles html l'autre jour pour une "visionneuse" de photos. J'ai sauté sur QBASIC pour "torcher" ça (24 heures), vu que c'était simple à gérer, et que de gagner deux secondes ne méritait pas de le coder en C.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed