Tout sur les tableaux dynamiques

Soyez le premier à donner votre avis sur cette source.

Snippet vu 57 403 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

Commenter la réponse de couriousous

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.