Retirer des élément d'une listbox en VB ??

Résolu/Fermé
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 - 15 juin 2010 à 09:51
 sky - 3 nov. 2015 à 08:54
Bonjour à tous ,

j'ai un Select qui m'affiche les resultats dans une listbox et je voudrais pouvoir retirer des éléments dans cette listbox .

je voudrais cliquer sur un nom dans ma liste et cliquer sur un bouton "retirer"

Avez-vous quelques idées de code ??

Merci d'avance .

A voir également:

13 réponses

nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 09:59
ah mais en faite je veux pas le retirer de ma base , je voudrais juste l'enlever de ma liste .
t'aurai une idée comment faire ?
parce que je commence le vb , jsuis un peu dans le flou :s
1
Sur ton bouton retirer, tu peux faire une suppression de l'enregistrement dans ta base avec une requête sql du genre:
"DELETE * FROM TaTable WHERE TaTable.Nom = ""& Me.ListBox.Text &"";"
0
trop con
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 10:09
Bonjour,
il faut que tu récupères l'index des éléments à enlever (index i par exemple).

Ensuite, tu peux faire :
ListBox1.Items.RemoveAt(i)
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 10:25
jai fais sa

Dim ItemObject(9) As System.Object
Dim i As Integer
For i = 0 To 9
ItemObject(i) = "Item" & i
Next i
LB_ListeMachines.Items.RemoveAt(i)

mais quand je lance mon application et que je clique sur le bouton sa me surligne en jaune la ligne que j'ai souligné
0
Je ne suis pas très imaginatif ce matin mais tu pourrais créer un seconde table semblable à la première dans laquelle tu ferais une copie de ta table source. Pour retirer des éléments, tu le supprimerais comme je te l'ai proposé plus haut.
C'est une solution très sale, je te l'accorde et tu dois certainement pour voir trouver mieux.
Tu peux aussi envisager de stocker ceux que tu souhaite garder dans une autre table, au lieu de supprimer ce que tu ne veux plus, mais ce n'est guère mieux.
Quel usage envisage tu de ta liste épurée au juste ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 10:16
bha enfaite j'ai une base de données avec une liste de machine
et je vais devoir envoyer un fichier sur certaines machines
donc j'affiche les machines (présent dans ma base) dans une listbox
et je voudrais en retirer dans la listbox pour envoyer mon fichier que a celle que je souhaite envoyer .
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 10:20
Chrij , jai fais sa

Dim ItemObject(9) As System.Object
Dim i As Integer
For i = 0 To 9
ItemObject(i) = "Item" & i
Next i
LB_ListeMachines.Items.RemoveAt(i)

mais quand je lance mon application et que je clique sur le bouton sa me surligne en jaune la ligne que j'ai souligné
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 10:39
il te met quoi comme erreur ?

Avec ce que tu viens d'écrire, tu vas enlever l'objet dont l'index est 9 dans ta liste (le dernier i = 9).

D'après ce que tu as écris au début, tu veux retirer ce que tu sélectionnes dans la liste. Si c'est bien ça, tu peux faire :
For Each item In ListBox1.SelectedItems
            ListBox1.Items.Remove(item)
        Next
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 10:52
J'ai mi ce que tu viens de me donner :

For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next

et y me surligne en jaune toujours la ligne que jté souligné et y me dis sa :

Impossible de modifier la collection d'éléments lorsque la propriété DataSource est définie.
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 10:54
tente de fermer ton DataSource avant la suppression :

ObjetDataSet.Clear()
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 11:01
Dim ObjetDataSet As DataSet
ObjetDataSet.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next

j'ai fais sa mais sa souligne en vert ce que j'ai souligné et sa me dit :
"La variable 'ObjetDataSet' est utilisée avant qu'une valeur ne lui ait été assignée. Une exception de référence null peut se produire au moment de l'exécution."
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 11:22
Normal pour l'erreur.
Il ne faut pas que tu créer l'objet dataset.
Tu dois avoir quelque part un "Data qq chose" qui est ouvert (c'est ce que disait l'erreur "Impossible de modifier la collection d'éléments lorsque la propriété DataSource est définie" Tu dois le fermer pour modifier les éléments de la Listbox.
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 11:38
en faite sa marche pas ,

Dim DT As New DataTable
DT.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next

voila j'ai fait ce que tu ma dis pour mon datasource mais sa me surligne tjrs la meme chose et me dit la meme erreur
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 11:38
Je viens de faire un test rapide qui a l'air de fonctionner :
Dim liste As ListBox.SelectedIndexCollection
        liste = ListBox1.SelectedIndices
        For Each item In liste
            ListBox1.Items.RemoveAt(item)
        Next


Normalement ça n'efface que les items sélectionnés
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 11:45
bha sa me retire tjr toute ma liste
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 11:48
Dim liste As ListBox.SelectedIndexCollection
liste = LB_ListeMachines.SelectedIndices
For Each item In liste
LB_ListeMachines.Items.RemoveAt(item)
Next

j'ai mi sa ..
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 12:31
tu l'as mis dans une fonction ?
tu n'as rien d'autre qui sélectionne les éléments de ta liste ?

Quand j'ai fait mon test, je sélectionnais les éléments avec la souris, puis je supprimais l'item sélectionné.

As-tu bien 1 seul élément de sélectionné à chaque fois ?
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 13:25
bha jai un bouton "afficher" pour mettre dans la liste box tout les nom qui sont dans ma base
apres dans ma base chaque machine possede un secteur , yen a 2 dans mon cas
donc jai un check box qui m'affiche les machine d'un des 2 secteur et un autre qui fait la chose inverse .
dc rien qui selectionne mes éléments
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 13:32
est ce que j'ai du code a mettre dans la fonction de ma listbox ?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 juin 2010 à 13:47
Bonjour,
Apparemment tu est en VB.Net, je ne connaît pas la syntaxe mais en VB6 j'écrirais...
    For i = ListBox1.Count - 1 To 0 Step -1
        If ListBox1.Selected(i) Then
            ListBox1.RemoveItem (i)
            i = i - 1
        End If
    Next i

A toi de transcrire en .net
A=
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 13:48
ok
jvais essayer de retranscrire tout sa
merci
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 juin 2010 à 13:55
En relisant ton poste principal, tu pourrais directement enlever la ligne dans l'évènement clic de la listBox
    ListBox1.RemoveItem (ListBox1.ListIndex)
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 14:19
Bon, ce qui est bien c'est que l'on bosse avec la même version de vb.
Ce qui est moins c'est que moi je n'ai pas de souci.

Peux-tu me montrer la fonction qui remplie ta listbox ?
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 14:22
Private Sub B_Afficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Afficher.Click

Dim DT As New DataTable
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\...\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine", oleDbConnex)

Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
TA.Fill(DT)
With LB_ListeMachines
.ValueMember = "NomMachine"
.DisplayMember = "NomMachine"
.DataSource = DT
End With
Catch ex As Exception
MessageBox.Show("Impossible d'établir la connexion à la base !! " & ex.Message)
End Try

For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next

End Sub
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 juin 2010 à 14:32
Puisque c'est bien... je vois pas ce que la façon de remplir la listbox a à voir avec la question ??
Et puisque t'aa pas de souci, essaye de traduire la fonction que je montre plus haut en .net. :D
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 14:41
bha je les fait mais sa me supprime aussi tte ma liste :/

voila comment j'ai traduit :

For i = LB_ListeMachines.Items.Count - 1 To 0 Step -1
If LB_ListeMachines.SelectedItems(i) Then
LB_ListeMachines.Items.RemoveAt(i)
i = i - 1
End If
Next i
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 14:43
voilà la fonction de lermite 222 en vb2008 :
For i = ListBox1.Items.Count - 1 To 0 Step -1
            If ListBox1.GetSelected(i) Then
                ListBox1.Items.RemoveAt(i)
                i = i - 1
            End If
        Next i
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 14:46
je les mis , sa supprime toujours touttt :'(
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 16:05
J'ai trouvé un lien qui propose une solution pour remplir une listbox à partir d'une base de donnée.
https://codes-sources.commentcamarche.net/

En gros, il faudrait mettre :
TA.Fill(DT)
oleDbConnex.Close()
for i=0 to DT.Rows.Count -1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomColonne").toString)
Next


J'ai pas de base de donnée sous la main pour tester...
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 16:08
bha je les rempli ma listbox
cest bon jai tout qui saffiche quand je clique
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 16:25
oui mais s'il t'indique
ListBox1.Items.Count = 0 cela signifie qu'il y a un souci.

J'ai du mal à comprendre pourquoi..
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
15 juin 2010 à 16:28
oué javoue cest bisard
cest ptet a cause du DT.clear ? vu quil est placé dans la fonction du bouton retirer et juste avant la suppression ?
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
15 juin 2010 à 16:37
essaye de l'enlever et de voir si tu as une liste avec un count un peu plus grand ;-)
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
16 juin 2010 à 08:09
Uai mais si je lenleve sa me remet lerreur d'avant , sa me surligne la ligne en jaune et sa me dit : " Impossible de modifier la collection d'éléments lorsque la propriété DataSource est définie. "
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
17 juin 2010 à 09:36
Salut,
j'ai regardé un peu depuis hier.
Le souci, c'est que tu lie ta source de donnée à ta liste : tu ne peux donc pas modifier ta liste directement (risque de modifier la bdd) et tu ne peux pas non plus fermer ta connexion (cela vide la liste).

Il faut trouver un moyen de remplir autrement ta listbox pour qu'elle utilise les données sans être lié à la base.
La solution que j'avais mise plus haut est peut être un moyen d'arriver à cela.
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
17 juin 2010 à 09:41
ah uai je vois ce que tu veux dire
tu parle de quel solution ?
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
17 juin 2010 à 09:43
TA.Fill(DT)
oleDbConnex.Close()
for i=0 to DT.Rows.Count -1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomColonne").toString)
Next

Logiquement (mais l'informatique, est-ce une question de logique ?? ;-)), cela récupère les données et les ajoute aux éléments de la listbox (sans la lier)
A toi de me dire si ça change quelque chose.
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
17 juin 2010 à 09:51
ce code la , il faudrait que je le mette dans mon bouton de remplissage cest bien sa ??
0
chrij Messages postés 115 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 20 mai 2011 49
17 juin 2010 à 09:55
oui
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
17 juin 2010 à 09:59
ok ok
bha je vais essayer sa ;)
0
nico8002 Messages postés 60 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 3 décembre 2012 1
17 juin 2010 à 11:43
Voila je met le code pour le prochain qui sera dans la meme galere que moi Lol

Le code de la fonction de remplissage de la listbox


Private Sub CKB_ChoixToutesMachines_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\..\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine ORDER BY NomMachine", oleDbConnex)
Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
LB_ListeMachines.Items.Clear()
TA.Fill(DT)
oleDbConnex.Close()
For i = 0 To DT.Rows.Count - 1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomMachine").ToString)
Next
Catch ex As Exception
MessageBox.Show("Impossible d'établir la connexion à la base !! " & ex.Message)
End Try
For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next
End Sub


le code de la fonction pour retirer un element de la listebox

Private Sub B_Retirer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Retirer.Click
DT.Clear()
For i = LB_ListeMachines.Items.Count - 1 To 0 Step -1
If LB_ListeMachines.GetSelected(i) Then
LB_ListeMachines.Items.RemoveAt(i)
i = i - 1
End If
Next i
End Sub
0