[VISUAL BASIC] [GÉNÉRAL] COMMENT REDIMENSIONNER UN TABLEAU EN VB ?

Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
- - Dernière réponse : nord666
Messages postés
21
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
29 juin 2008
- 13 déc. 2007 à 16:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/faq/3-visual-basic-general-comment-redimensionner-un-tableau-en-vb

Afficher la suite 
MaximHom
Messages postés
15
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
2 septembre 2005
-
Bonjour d'après-midi,

J'ai fait quelques essais, et j'ai trouvé quelque chose qui fonctionne.
Au cas où cela intéresserait d'autres personnes, voici le code :

Option Explicit
Dim MonTableau() As String 'string ou autre...
'Attention :
'Il ne faut surtout pas renseigner le nombre entre parenthèses !
'ça génèrerait une erreur par la suite
Dim NombreElements As Integer 'Nombre d'éléments dans le fichier
Dim NombreCases As Integer ' Nombre de cases de MonTableau

Private Sub Form_Load()
'On va lire le fichier qui contient les éléments
'et compter combien il y a d'éléments
'Pour l'exemple, on va dire qu'il y a 5 éléments soit :
Dim Var1, Var2, Var3, Var4, Var5 As String
'On va dire :
Var1 = "a"
Var2 = "b"
Var3 = "c"
Var4 = "d"
Var5 = "e"
'Donc :
NombreElements = 5
'On va remplir le tableau, mais en se gardant une marge de sécurité
'Par exemple, 5, donc :
NombreCases = NombreElements + 5 ' donc 10 !
'ensuite on va redéfinir le tableau
ReDim Preserve MonTableau(NombreCases)
'on peut alors remplir le tableau
MonTableau(1) = Var1
MonTableau(2) = Var2
MonTableau(3) = Var3
MonTableau(4) = Var4
MonTableau(5) = Var5
Label2.Caption = NombreCases 'voir ci-dessous
End Sub

Private Sub Text1_Change()
Dim Valeur As Integer
Valeur = Val(Text1.Text)
'Pour l'essai concret, on peut mettre sur la feuille une textbox
'qui servira à entrer le numéro de la case
'ensuite un label(lbel1)qui affichera le contenu de la case
'Pour l'exemple, on peut mettre un second label (lbel2) qui indiquera
'le nombre de cases du tableau,remplies ou non
'Si l'utilisateur entre un nombre > NombreCases,
'il faudra redimensionner le tableau
If Valeur > NombreCases Then
NombreCases = Valeur + 5 'marge de sécurité
ReDim Preserve MonTableau(NombreCases)
Label2.Caption = NombreCases 'la valeur a changé
End If
Label1.Caption = MonTableau(Valeur)

End Sub

Voilà, ça fonctionne comme tel.

Merci à US_30 de m'avoir mis sur la bonne voie !
Bonne journée !
us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7 -
Bonsoir,

Okay MaximHom. Pas trop vieux tout de même... -:);

Peut-être un complèment sur la syntaxe qui n'apparait pas dans les quelques lignes du Tuto, suite à ta remarque dans le listing :

=

Dim MonTableau() As String 'string ou autre...
'Attention :
'Il ne faut surtout pas renseigner le nombre entre parenthèses !
'ça génèrerait une erreur par la suite

=

IL y a deux façon de déclarer un Tableau, aussi valable l'une que l'autre. La différence se situe uniquement sur la présentation et l'organisation du code... Voici ces 2 façons commentées dans le code :

=

Sub Premierefacon()

'Déclaration générale pour définir le type
'On dit à VB que MonTableau est un tableau à indice
'ET on dit aussi que MonTableau contiendra une donnée alphanumérique (textes & nombres)
Dim MonTableau() As String

'On dimensionne le nombre d'élément
ReDim MonTableau(50)

'Puis on redimensionne à 100 éléments en gardant les anciennes
ReDim Preserve MonTableau(100)

End Sub

=

Sub Deuxiemefacon()

'Si on veut dimensionner directement 50 éléments
ReDim MonTableau(50) As String

'Puis on redimensionne à 100 éléments en gardant les anciennes
ReDim Preserve MonTableau(100)

End Sub

=

Je pense que la première façon est préférable, car elle permet une relecture d'un ancien code beaucoup plus facilement... Il y a aussi d'autres petites raisons pratiques, mais bon...

En espèrant que ces précisions seront utiles...

Amicalement,
Us.
MaximHom
Messages postés
15
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
2 septembre 2005
-
OK et vu, merci encore !
Fin du sujet-------------------
blinix123
Messages postés
307
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
21 mai 2008
-
tableau dynamique... :x
nord666
Messages postés
21
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
29 juin 2008
-
Bonjour,

Voici une autre façon:

Array.Resize(montableau, nouvelleDimension)
cette méthode préserve les valeurs mais ne fonctionne que pour un tableau à une dimension.
Commenter la réponse de us_30