Tout sur les tableaux dynamiques

Soyez le premier à donner votre avis sur cette source.

Snippet vu 58 367 fois - Téléchargée 50 fois

Contenu du snippet

Ceci est mon premier tutorial, j'espère qu'il vous sera utile...

Les tableaux dynamiques sont appelés ainsi car ils peuvent changer de taille : cela peut être utile si l'on veut établir par exemple une petite base de données, en tout les cas une liste succeptible de changer de dimension(s). Le but de ce tuturial est de montrer les quelques fonctions qui ne sont pas présentées dans l'aide de VBasic.

Pour créer un tableau dynamique, il suffit de lui affecter une taille vide :
Dim liste() as Integer

Ensuite, on peut le redimensionner à l'aide de la fonction redim, en indiquant la nouvelle taille entre parenthèses :
Redim liste(5)

L'inconvénient... C'est que toutes les données du tableau sont effacées ! Il faut donc y rajouter le mot-clef Preserve :
Redim preserve liste(5)

Vous pouvez bien sûr également créer des tableaux dynamiques à "taille personnalisée" :
Redim liste(5 to 25)

Ceci dit, il est impossible de redimensionner un tableau à taille "normale" pour lui donner une taille "personnalisée" en utilisant preserve ! Par exemple, ce script provoquera une erreur:
Dim liste() as Integer
Redim liste(5)
Redim preserve liste(1 to 5)

...Mais celui-ci, non !
Dim liste() as Integer
Redim liste(5)
Redim liste(1 to 5)

De même, il est possible de changer le nombre de dimensions d'un tableau dynamique... Mais sans utiliser preserve ! Par exemple, ce script est tout à fait valide :
Dim liste() As Integer
ReDim liste(2, 5)
ReDim liste(1, 3, 4)

Maintenant que nous avons vu les bases, voici quelques petits trucs...

J'ai longtemps redimensionné mes tableaux en gardant leurs tailles dans des variables séparées... Ce qui ne manquait pas de causer nombre d'erreurs ! :) Heureusement, il existe l'instruction UBound(), qui retourne la taille maximale du tableau...
Exemple :
Dim liste() as Integer
ReDim liste(25) as Integer
MsgBox UBound(liste) 'affiche 25 !

Il existe également son inverse : LBound(), qui retourne la taille minimale du tableau, dans le cas d'un tableau "personnalisé".
Exemple :
Dim liste() as Integer
ReDim liste(6 to 82)
For i = LBound(liste) to UBound(liste)
MsgBox liste(i) 'affiche chaque valeur du tableau, soit de 6 à 82
Next i

Pour finir, voici une petite fonction sympathique :

Public Sub Delete(ByRef tableau As Variant, element As Variant)
Dim i As Integer
For i = element To UBound(tableau) - 1
tableau(i) = tableau(i + 1)
Next
ReDim Preserve tableau(UBound(tableau) - 1)
End Sub

Elle vous permettra de supprimer n'importe quel élément d'un tableau dynamique et de décaler les autres éléments, de façon à ce qu'il n'ait pas de "trou".... Voici un exemple d'utilisation :
Dim liste() as String
Redim liste(4)
liste(0) = "je suis bon !"
liste(1) = "je suis bon !"
liste(2) = "je suis mauvais !"
liste(3) = "je suis bon !"
liste(4) = "je suis bon !"
Delete liste, 2 'On supprime l'élément 2

Le tableau liste ne comprend donc plus que des "je suis bon !" et est redimensionné à 3...

Bref, vous l'avez compris : les tableaux dynamiques sont des outils vraiment puissants qui peuvent beaucoup faciliter la programmation.

A voir également

Ajouter un commentaire

Commentaires

nowhere_man
Messages postés
5
Date d'inscription
mardi 27 juin 2006
Statut
Membre
Dernière intervention
19 juillet 2012

Super simple et utile, merci.
zakariaz35
Messages postés
9
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
27 avril 2013

voila un exemple qui marche a vous de le tester

http://www.youtube.com/watch?v=XGs8gsrbF78
patatedu65
Messages postés
12
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
21 février 2008

Allez j'ai trouvé va ;) pas pensé à regarder la MSDN

C'est tout con :

Dim unNombre As Integer
Dim monTableau() As String
Redim monTableau(unNombre)

Vraiment hein...je pause jamais de question sur ces forums de prog mais là j'ai fait mon guignol ^^
++ les gens
patatedu65
Messages postés
12
Date d'inscription
mardi 27 janvier 2004
Statut
Membre
Dernière intervention
21 février 2008

Salut à tous,
tuto intéressant j'avoue :)
Par contre je découvre le VB, langage pas très compliqué mais quand on connait pas ça s'invente pas.
En fait j'aimerais dim et redim mes tableaux grâce à une variable et non pas avec une constante. D'après ce que je comprend avec le débugeur on utilise que des constantes en VB. Donc y a t-il moyen de "caster" ma variable pour qu'elle passe pour une constante quand je la passe en paramètre pour dim mon tableau?
Je trouve pas super que l'on ne puisse pas utiliser de variable dans ce langage, et ça me parait bizarre doit bien y avoir une solus...
cs_mabrouklepoux
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008

dans ce cas:

Dim parent je pense
j'ai un prog qui fait des tgableauxc de tableaux et trop d'alcool dabs le sang pour le chercher là, mis si besoin demande, je te retrouverais ca

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.