Supprimer un élément d'un tableau

Soyez le premier à donner votre avis sur cette source.

Snippet vu 44 039 fois - Téléchargée 81 fois

Contenu du snippet

Lorsque vous créez des tableaux dynamiques en VB, vous serez peut-être ammenés à avoir besoin de supprimer un élement qui ne se trouve pas forcément être le dernier. Je ne sais pas comment créér une fonction adéquate (les passages de tableaux dans les fonctions marchent mal en VB) mais le code d'une telle suppression est suffisament court pour être écrit à chaque emploi. On constate deux cas : les tableaux de variables et les tableaux d'objets (aussi appelés les tableaux de pointeurs).

Source / Exemple :


'Xsupp représente l'index de la case à supprimer
'Tabl représente le tableau qui contient la case à supprimer

'Cas des tableaux de variables

For X = Xsupp + 1 To Ubound(Tabl)
 Tabl(X - 1) = Tabl(X)
Next

Redim Preserve Tabl(Ubound(Tabl) - 1)

'Cas des tableaux de pointeurs

For X = Xsupp + 1 To Ubound(Tabl)
 Set Tabl(X - 1) = Tabl(X)
Next

Redim Preserve Tabl(Ubound(Tabl) - 1)

Conclusion :


Faites cepandant attention, l'utilisation de cet algorithme décale d'un cran vers la gauche tous les éléments du tableau situé après l'élément supprimé.

A voir également

Ajouter un commentaire Commentaires
Messages postés
103
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
20 octobre 2012

Exit if, ça existe?
OUI IL FONCTIONNE -_-
Messages postés
103
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
20 octobre 2012

Mieux qu'andalo!est-ce possible?
Plaisanterie mise à part,a tu testé ton code djkarim?
Je me suis arrêté a vb6, mais même si c'est du .net, je ne pense pas que ça fonctionne.
Il y a mieux que ANDALO je pense .. on peut faire encore plus rapide (efficace), les itérations de sa première boucle à partir de l'indice de la valeur à supprimer jusqu'à la fin du tableau sont totalement inutiles, on peut remplacer la boucle pour par Tantque :

dim i as integer
dim j as integer
b as boolean

b:=false;
i:=1;
while (b=false) do
If Tableau(i) = LaValeurASupprimmer Then
For j = i To UBound(Tableau()-1)
Tableau(j) = Tableau(j + 1)
b:=true;
Next j
exit for
exit if
next i
Exit while
ReDim Preserve Tableau(UBound(Tableau()) - 1)
end.
Messages postés
14
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
22 novembre 2008

On peut faire encore plus lent ?
Afficher les 13 commentaires

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.