[VB6] Tableau multidimensionnel en variable globale en VB6 [Résolu]

cs_Gegeleblond 41 Messages postés lundi 31 mars 2008Date d'inscription 2 août 2010 Dernière intervention - 3 avril 2008 à 21:17 - Dernière réponse : cs_Gegeleblond 41 Messages postés lundi 31 mars 2008Date d'inscription 2 août 2010 Dernière intervention
- 4 avril 2008 à 19:33
Bonjour,

Je souhaiterais declarer un tableau multidimensionnel en tant que variable globale.
J ai vu sur le site que pour declarer un tableau multidimensionnel, il fallait faire comme ci-dessous
Dim Table() As Double
ReDim Table(25,40) par exemple

Mais si je veux le declarer en tant que variable globale, je pensais ecrire dans (General) (Declaration):
Public Dim Table() As Double
ReDim Table(25,40)

Mais ca ne fonctionne pas, alors je suppose qu il doit y avoir un autre moyen de declarer un tableau multidimensionnel peut etre est ce possible d ecrire Dim Table(25,40) as Double directement et donc si je veux le mettre en variabe globale ecrire Public Table (25,40) as Double. Qu en pensez vous?

Autre probleme: au debut j avais ecrit Dim Table (a,b),  la dimension du tableau donc les valeurs de a et b devant etre fixees par l utilisateur APRES l' execution.  Or si on fait ca, un magnifique message d erreur apparait. "Constant expression required".

Existe  t il un moyen de creer un tableau multidiemensionnel dynamique lol?
Je commence a deseperer.

Merci d avance
Gegeleblond
Afficher la suite 

7 réponses

Répondre au sujet
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 3 avril 2008 à 23:20
+3
Utile
Tu dois déclarer ton tableau Public dans un module standard (.bas) pour pouvoir l'utiliser ailleurs dans le programme (comme toute autre variable). Rien ne t'empêche de le redimensionner ailleurs que dans ce module, puisqu'il sera reconnu...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 4 avril 2008 à 00:50
+3
Utile
Salut
Oui, en Public dans un module BAS
Déclarer sans dimension rend le tableau dynamique, oui, et permet de redimensionner plus tard.
Ton erreur est sur l'instruction "Redim" si tu l'as placée dans la partie déclaration.
Il faut la mettre dans (au choix) :
- Sub Main si tu utilises Main d'un module pour démarrer ton application
- Form_Load si tu n'utilises pas de Sub Main
Le but étant de l'initialiser en dimension avant de voiloir l'utiliser.
Tu pourras encore la redimensionner plus tard si besoin (voir option Preserve de Redim)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
pile_poil 682 Messages postés vendredi 6 avril 2007Date d'inscription 4 août 2012 Dernière intervention - 4 avril 2008 à 09:36
+3
Utile
bonjour
tu as écrit ceci:
ReDim Table(NbProj, 64)

tu risques d'avoir des problemes car visual basic n'autorise le redimensionnement que sur la derniere dimmension quand tu fais un redim preserve pour modifier la taille de ton tableau sans perdre les données qu'il contient
si tu n'a pas besoin de modifier cette taille en cours d'execution ce n'est pas la peine de faire un tableau dynamique :)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de pile_poil
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 4 avril 2008 à 13:42
+3
Utile
Bonjour,
En complément de l'explication de Pile_poil, les mots Public et dim ne doivent pas êtres employé conjointement.

Citation...
Mais si je veux le declarer en tant que variable globale, je pensais ecrire dans (General) (Declaration):
Public Dim Table() As Double
ReDim Table(25,40)

si tu met.. Dim Table() As Double / le tableau n'est visible que dans le module où la déclaration est faite.
Par contre si tu met... Public Table() As Double / il serra visible dans toute l'appli et pourra être redimentionné quand nécessaire.
Je ne comprend d'ailleur pas comment tu a pu écrire ce code, l'éditeur de VB6 ne l'accepte pas.
A+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_lermite222
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 3 avril 2008 à 22:03
0
Utile
"...peut etre est ce possible d ecrire Dim Table(25,40) as Double directement..."

Le plus simple moyen de le savoir est d'essayer te de constater que ça marche.

"...Existe  t il un moyen de creer un tableau multidiemensionnel dynamique lol?..."
Oui, selon les premières déclarations que tu indique et en utilisant l'instruction Redim

Mais attention sur de grands tableaux il se peut que VB6 ne compile pas. Tu peux avoir un message d'erreur à la compilation comme quoi la fonction est trop grande. Il n'en est rien mais c'est le redimentionnement du tableau dynamique qui prend toute la place.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
cs_Gegeleblond 41 Messages postés lundi 31 mars 2008Date d'inscription 2 août 2010 Dernière intervention - 3 avril 2008 à 22:37
0
Utile
Merci pour ces renseignements
J ai bien evidemment essayer ce que j ai ecrit et j ai finalement conclu (peut etre a tort) que ecrire public pour Table ne sert a rien , j ai tt simplement ecrit dans (General) (Declaration)
Dim Table() As Double 

et j ai redemensionne dans un autre module dans lequel je me sers de Table:
ReDim Table(NbProj, 64)
Et maintenant je n ai plus de message "Constant is required" mais je ne sais pas pourquoi.

Par ailleurs, ma variable Table n est toujours pas globale, ce qui m agace fortement car je sais que je vais forcement m en resservir dans un autre module. Saurais je un jour correctement declarer des variables?
Commenter la réponse de cs_Gegeleblond
cs_Gegeleblond 41 Messages postés lundi 31 mars 2008Date d'inscription 2 août 2010 Dernière intervention - 4 avril 2008 à 19:33
0
Utile
Merci a tous votre aide!

Je pense que mon probleme est resolu...

A bientot
Gegeleblond
Commenter la réponse de cs_Gegeleblond

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.