[Résolu] [vba] aide à la syntaxe pour la dimension d'un tableau

aide à la syntaxe pour la dimension d'un tableau [Résolu] [vba] - VB/VBA/VBS - Programmation

Marsh Posté le 17-08-2009 à 13:50:24    

Bonjour à vous,
 
J'aimerais avoir un petit renseignement de votre part à propos de la définition des tableau sous VBA.
 
Voilà, j'aimerai créer un tableau dont les dimensions varient en fonction des données d'entrée... et donc j'ai écrit:
 
 
Dim i as integer
Dim Camion() as string
 
For i=1 to n    'où n est un paramètre entier  
  Camion(i)= "......."  'A la place des ..... on a une phrase qui est chargée avec la procédure
  ....
Next
 
Mon problème vient de la syntaxe: en écrivant de cette manière, à chaque incrémentation de i, la dimension de Camion() change et est égale à i. Or ce que je souhaite faire c'est incrémenter les lignes du tableau camion. Et à la fin je dois en ressortir un tableau récapitulatif des phrase entrées dans le tableau camion.
 
Exemple:
Camion 1 = phrase 1
Camion 2 = phrase 2
Camion 3 = phrase 3
Camion 4 = phrase 4
....
Camion n = phrase n
 
Donc quel syntaxe doit-on utiliser pour aboutir au résultat de l'exemple?  
 
Merci de vos réponse


Message édité par komaxi le 18-08-2009 à 09:17:40
Reply

Marsh Posté le 17-08-2009 à 13:50:24   

Reply

Marsh Posté le 17-08-2009 à 14:07:03    

ReDim Preserve Camion(i)
pour le faire à chaque fois mais si tu connais n tu peux faire
ReDim Camion(n)
au départ.

 

http://msdn.microsoft.com/fr-fr/li [...] 80%29.aspx


Message édité par Deamon le 17-08-2009 à 14:07:41
Reply

Marsh Posté le 17-08-2009 à 14:15:21    

Merci pour ta réponse, mais n je ne le connais pas au départ...
je vais tout de suite voir le lien que tu m'as donné

Reply

Marsh Posté le 17-08-2009 à 14:17:49    

Tu utilises la 1ere solution avec ReDim Preserve Camion(UBound(Camion)+1) je crois que ça doit marcher.

Reply

Marsh Posté le 17-08-2009 à 14:23:19    

merci,
j'ai réécrit ce que tu as marqué mais vb me souligne camion (celui après ubound) et me dit: " une valeur de type string ne peut pas etre convertie en 'Système.Array' "

Reply

Marsh Posté le 17-08-2009 à 14:24:31    

nan...oubli ce que je viens de dire lol

Reply

Marsh Posté le 17-08-2009 à 14:30:51    

Parcontre là il me souligne toute la ligne "Camion(UBound(Camion)+1)"
et il me dit que "la valeur ne peut etre null. Nom du paramètre 'Array' a la valeur Nothing"
 
je n'arrive pas a voir d'où ça vient

Reply

Marsh Posté le 17-08-2009 à 14:41:27    

Fais un ReDim Camion(1) au départ pour qu'il ne soit pas nul à cause du UBound. Du coup ça décale la taille à mettre à chaque fois.

Reply

Marsh Posté le 17-08-2009 à 14:56:16    

pour ce qui est du Redim camion(1) ça fonctionne, mais le problème de départ ne change pas car je continu à écrire:
 
pour i =1 à n
camion(i) = "phrase i"
fin
 
et quand i change, c'est la dimension de camion() qui change.

Reply

Marsh Posté le 17-08-2009 à 14:59:04    

désolé encore, j'ai encore omis un argument..; ça fonctionne
merci Deamon

Reply

Marsh Posté le 17-08-2009 à 14:59:04   

Reply

Marsh Posté le 17-08-2009 à 15:03:30    

en fait ce problème persiste pour i=3
 
Normalement le ReDIm je le rapel à chaque début de Sub où je réutilise le tableau camion, pas à chaque fois que je l'incrémente??

Reply

Marsh Posté le 17-08-2009 à 15:14:29    

ReDim c'est pour augmenter la taille de ton tableau. Donc tu l'appelles dès que t'as besoin d'une case supplémentaire.
Si t'as fait un Redim de 2 t'auras 2 cases, si tu veux écrire en camion(3) faudra faire un Redim de 3.


Message édité par Deamon le 17-08-2009 à 15:15:29
Reply

Marsh Posté le 17-08-2009 à 15:23:29    

Merci de ton aide,
J'ai un autre problème maintenant, je viens de me rendre compte en mettant des msgBox que dès que j'incrément camion() et que je fait un nouveau Redim, il supprime la valeur précédente de camion() pour ne garder en mémoire seulement la dernière valeur entrée
 
Aurais-tu une petite idée?

Reply

Marsh Posté le 17-08-2009 à 15:39:07    

Cf ma 1ere réponse et l'aide Microsoft : ReDim Preserve Camion(i)

Reply

Marsh Posté le 17-08-2009 à 15:58:06    

Merci encore pour ton aide très efficace et très rapide

Reply

Sujets relatifs:

Leave a Replay

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