USF: slection d'une ligne dans Listbox pour suppression

J

Jean P.

Guest
Bonjour à tous

Grâce à l'aide des gens du forum j'ai appris plusieurs choses mais j'ai encore une fois besoin de votre aide.


Situation:
A) J'utilise Windows XP Professionnel
B) J'utilise Excel 2003 SP1
C) J'ai un classeur qui contient 5 feuilles.
D) J'ai fais un USF avec un ListBox qui me permet de visualiser les données d'un tableau (Feuille 5)

Question:
Est-il possible de sélectionner une ligne dans le ListBox pour la supprimer (et ce faisant la supprimer aussi dans le tableau de la feuille 5) ?

Voici ce que j'avais trouvé comme code:

Private Sub CommandButton2_Click()
If ListBox1.ListCount >= 1 Then
If ListBox1.ListIndex = -1 Then
ListBox1.ListIndex = ListBox1.ListCount - 1
End If
ListBox1.RemoveItem (ListBox1.ListIndex)
End If
End Sub

Mais cela ne fonctionne pas ...

Je vous remercie pour votre aide et vos commentaires.


Jean P.
 
M

michel

Guest
bonsoir Jean P

la macro ci-dessous permet de supprimer la ligne sélectionnée dans la ListBox


Private Sub CommandButton2_Click()
If ListBox1.ListIndex <> -1 Then ListBox1.RemoveItem ListBox1.ListIndex
End Sub


pour ce qui est de la suppression des données dans la feuille 5 , il faudrait que tu donnes plus d'informations pour t'aider
par exemple si les données sont dans la colonne A (de A1 à Ax ) cela pourrait donner :

Sheets("Feuil5").Cells(ListBox1.ListIndex + 1, 1).Delete Shift:=xlUp

pour info , lors de la selection de la premiere ligne d'une ListBox , ListBox1.ListIndex=0
s'il n'y a aucune selection dans la ListBox , ListBox1.ListIndex= -1


bonne soirée
MichelXld
 
J

Jean P.

Guest
Re-bonjour Michel et aux lecteurs du forum

J'ai regardé ton code pour bien le comprendre.

Le résultat fonctionne bien sauf dans un seul cas (dommage).

Lorsque je choisi un item de la liste et que je clique sur le bouton 2, l'item est supprimé de la ListBox1 et aussi de la Feuille5.

Problème:
Sauf que je lorsque je choisi le dernier item de la liste et que je clique sur le bouton 2, l'item est supprimé de la ListBox1 mais c'est l'item précédent qui est supprimé de la Feuille5.

Code:
Private Sub UserForm_Initialize()
CommandButton1.Caption = "Add Item"
CommandButton2.Caption = "Remove Item"
End Sub

Private Sub CommandButton1_Click()
Dim EntryCount As Single
EntryCount = 0
Dim L As Integer
L = Worksheets("Feuil5").Range("A65536").End(xlUp).Row
For L = 1 To L
EntryCount = EntryCount + 1
ListBox1.AddItem (EntryCount & Range("a" & L))
Next L
End Sub

Private Sub CommandButton2_Click()
Dim L As Integer
Dim EntryCount As Single
EntryCount = 0
If ListBox1.ListIndex <> -1 Then ListBox1.RemoveItem ListBox1.ListIndex
Worksheets("Feuil5").Cells(ListBox1.ListIndex + 1, 1).Delete Shift:=xlUp
ListBox1.Clear
L = Worksheets("Feuil5").Range("A65536").End(xlUp).Row
For L = 1 To L
EntryCount = EntryCount + 1
ListBox1.AddItem (EntryCount & Range("a" & L))
Next L
End Sub


Je vous remercie pour vos commentaires et votre aide.


Jean P.
 
J

Jean P.

Guest
Oups ... désolé

J'ai fais une petite erreur dans la description de mon problème.

Problème:
Sauf que je lorsque je choisi le dernier item de la liste et que je clique sur le bouton 2, c'est l'item précédent (le choix précédent dans la liste) qui est supprimé de la ListBox1 et de la Feuille5.


Désolé ...

Jean P.
 
M

michel

Guest
bonjour Jean P.

tu peux tester cette adaptation


Private Sub CommandButton2_Click()
Dim L As Integer
Dim EntryCount As Integer
Dim NumLigne As Integer

EntryCount = 0
NumLigne = ListBox1.ListIndex
If NumLigne <> -1 Then
ListBox1.RemoveItem NumLigne
Worksheets("Feuil1").Cells(NumLigne + 1, 1).Delete Shift:=xlUp

ListBox1.Clear
L = Worksheets("Feuil5").Range("A65536").End(xlUp).Row

For L = 1 To L
EntryCount = EntryCount + 1
ListBox1.AddItem (EntryCount & Range("a" & L))
Next L

End If

End Sub


bon apres midi
MichelXld
 
J

Jean P.

Guest
Bonjour Michel

C'est parfait, le problème me semble bel et bien règlé.

Si j'ai bien compris tu as ajouté une variable (NumLigne) pour remplacer la valeur de ListBox1.ListIndex.

Mais je ne comprends pas pourquoi cela fonctionne maintenant !!!

Pourquoi le fait remplacer la valeur de ListBox1.ListIndex par la variable NumLigne règle le problème ???

J'aimerais bien comprendre.


Encore une fois merci pour ton aide.


Jean P.
 
J

Jean P.

Guest
Re-bonjour Michel

Encore une question, est-ce possible d'adapter le code pour faire afficher plusieurs colones dans la ListBox tout en conservant la possibilité de supprimer une ligne dans la ListBox et aussi dans la Feuille5.

Je te remercie encore mille fois pour tes commentaires.


Jean P.
 
M

michel

Guest
Rebonjour Jean P.

effectivement j'ai été un peu trop succint dans ma réponse

la ligne dans la ListBox etait supprimée en premier (ListBox1.RemoveItem ListBox1.ListIndex).
comme la reference de la cellule(Cells(ListBox1.ListIndex + 1, 1)) était défini par l'index de la ListBox qui venait de perdre une unité , il y avait un décalage au moment de la suppression .

le fait d'ajouter une variable en début de macro "NumLigne = ListBox1.ListIndex" , permet de "figer" la valeur avant d'effectuer les suppressions


sinon pour ta derniere question :

'initialisation de l'USF en alimentant une listbox milticolonne
Private Sub UserForm_Initialize()
Dim Tableau As Variant

Tableau = Worksheets("Feuil5").Range("A1:D10") 'plage de cellules à inserer
ListBox1.ColumnCount = 4 'nb de colonnes dans la ListBox
ListBox1.List() = Tableau 'insertion dans la ListBox
End Sub

Private Sub CommandButton2_Click()
Dim NumLigne As Integer

NumLigne = ListBox1.ListIndex
If NumLigne <> -1 Then
ListBox1.RemoveItem NumLigne
Worksheets("Feuil5").Range(Cells(NumLigne + 1, 1), Cells(NumLigne + 1, 4)).Delete Shift:=xlUp
'Worksheets("Feuil5").Rows(NumLigne + 1).Delete 'pour supprimer la ligne complete
End If

End Sub



j'espere que j'ai répondu à ta question

bonne soirée
MichelXld
 

Discussions similaires

Réponses
17
Affichages
1 K
Réponses
10
Affichages
649

Statistiques des forums

Discussions
314 168
Messages
2 106 708
Membres
109 669
dernier inscrit
e.lequenven