Supprimer un élément d'un tableau

Soyez le premier à donner votre avis sur cette source.

Snippet vu 41 965 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

cs_Worst
Messages postés
19
Date d'inscription
vendredi 22 février 2002
Statut
Membre
Dernière intervention
13 décembre 2006
-
Bonjour,

Je voulais juste dire que je ne suis pas tout à fait d'accord avec la solution proposée. Cette méthode nécessite 2 parcours du tableau.

En effet, la méthode 'Redim Preserve' crée un nouveau tableau et recopie dedans les éléments de l'ancien. En aucun cas il agrandit le tableau existant...

Tiré de MSDN :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vblr7/html/vastmredim.asp
"Si vous incluez le mot clé Preserve, Visual Basic copie les éléments à partir du tableau existant dans le nouveau tableau."


Je pense qu'il est donc plus efficace de recréer un nouveau tableau en écrivant dedans juste les éléments qui nous intéressent.
sanyohan13
Messages postés
7
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
23 mars 2009
-
salut
je débute et je voudrais savoir comment faire pour écrire seulement "1234567890ABCDEF" et que les autres caractères ne s'écrivent pas m^me si on appuie dessus...
merci
floppeur
Messages postés
6
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
16 avril 2007
-
Bonjour,

Je trouve que même si la source de simboy n'est pas optimiser (comme dit Worst), elle fait appel a une structure de donnée orienté objet que je trouve très intéressante. Comme par exemple pour la gestion d'un panier de produits...

Alors Merci bien..

Sanyohan13: Tu es dans la mauvais rubrique, mais pour ton probléme block avec maxlength...
peug
Messages postés
234
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012
-
Worst, je suis un peu d'accord mais dans ton idée il faut bien renvoyé le tableau sans l'item. Comment vois-tu la chose ?

zieut ca :
Dim i As Integer
Dim k As Integer

'Creation du tableau temporaire
Dim tbTemp() As String 'doit être idem que tb :(
ReDim tbTemp(UBound(Tabl))

For i = 0 To UBound(Tabl)
If i <> item Then
'on copie dans le nouveau tableau sauf l'item a effacer
tbTemp(k) = Tabl(i)
k = k + 1
End If
Next

'on refait le tableau de base
ReDim Tabl(UBound(tbTemp))
For i = 0 To UBound(tbTemp)
Tabl(i) = tbTemp(i)
Next
peug
Messages postés
234
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012
-
Oups... et donc je code de Simboy n'est pas si mauvais que ça. Mais je peux me tromper..

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.