Sélection multiple dans une listbox1 et suppression de la sélection
Bonjour,
J'avais déjà posé une question sans réponse, je retente donc avec quelque chose de plus concret. Je suis en train de construire un petit "logiciel" de gestion de stock, mais j'ai un niveau de débutante et ne comprend pas tout.
Je viens aujourd'hui avec une question précise, mais serait ravie d'échanger avec des personnes prêtent à aider sur le projet global.
J'ai créé un formulaire pour ajouter des articles en stock en partant d'une base de donnée. Dans mon formulaire j'ai mis 2 listbox: ListBox1 affiche ma base article et y permet une sélection multiple; ListBox2 doit récupérer les articles sélectionnés en ListBox1.
J'ai 2 bouton: B_Prend2 qui prend les articles sélectionnés en ListBox1 pour les mettre en ListBox2 et en les supprimant de la ListBox1 et B_Enlève qui remet dans la ListBox1 les articles sélectionnés en ListBox2 (par exemple si on a fait une erreur dans la sélection des articles).
J'ai trouvé des codes intéressants sur le site de boisgontierjacques. Mais ça ne semble pas fonctionner.
Pour L'instant, je peux sélectionner plusieurs articles de la ListBox1 et les passer en ListBox2. Par contre les articles sélectionnés ne se suppriment pas le la ListBox1 et se copient en ListBox2 autant de fois que j'appuie sur le bouton (Il faudrait qu'il n'apparaissent qu'une seule fois). De plus quand je sélectionne un article en ListBox2 pour le remettre en ListBox1 et le supprimer de la ListBox2, aucune de ces deux actions ne fonctionnent.
J'ai ce code la, pouvez vous m'aider à trouver ce qui ne va pas?
Private Sub B_Prend2_Click()
' bouton qui permet de coller les articles sélectionner en ListBox1 dans la ListBox2 (Attention doublon)
If UserForm2.ListBox1.ListIndex <> -1 And UserForm2.ListBox1.ListCount > 0 Then
For i = 0 To UserForm2.ListBox1.ListCount - 1
If UserForm2.ListBox1.Selected(i) = True Then
'UserForm2.TextBox1.Text = i
UserForm2.ListBox2.AddItem UserForm2.ListBox1.List(i)
'UserForm2.ListBox2.AddItem i
pos = Me.ListBox2.ListCount - 1
For k = 0 To 10
Me.ListBox2.List(pos, k) = Me.ListBox1.List(i, k)
Next k
End If
Next i
For i = UserForm2.ListBox1.ListCount - 1 To 0 Step -1
If UserForm2.ListBox1.Selected(i) = True Then
UserForm2.TextBox1.Text = i
'UserForm2.ListBox1.RemoveItem i
'UserForm2.ListBox1.RemoveItem UserForm2.ListBox1.Selected(i)
'UserForm2.ListBox1.RemoveItem UserForm2.ListBox1.ListIndex
End If
Next i
UserForm2.TextBoxNBArticles = UserForm2.ListBox2.ListCount - 1
End If
End SubPrivate Sub B_Enlève_Click()
'Bouton qui retire les articles sélectionner en Listbox2
If UserForm2.ListBox2.ListCount > 0 And UserForm2.ListBox2.ListIndex <> -1 Then
UserForm2.ListBox1.AddItem UserForm2.ListBox2
pos = UserForm2.ListBox1.ListCount - 1
For k = 0 To 10
UserForm2.ListBox1.List(pos, k) = UserForm2.ListBox2.Column(k)
Next k
'UserForm2.ListBox2.RemoveItem UserForm2.ListBox2.ListIndex
End If
End SubJ'ai un problème avec le RemoveItem . J'ai essayé plusieurs formulations, avec ou sans (), mais rien ne fonctionne. C'est la seule partie du code qui semble ne pas fonctionner(du coup je l'ai laissé en commentaire).
Merci d'avance
Bonjour,
sans fichier beaucoup d'entre nous passent sur un autre sujet, modifier un code sans vraiment savoir son utilité et sans pouvoir le tester n'est pas vraiment agréable, je tente une proposition pour le premier bloc de code mais je n'irai pas plus loin sans plus de matière pour avancer:
Private Sub B_Prend2_Click()
' bouton qui permet de coller les articles sélectionner en ListBox1 dans la ListBox2 (Attention doublon)
If UserForm2.ListBox1.ListIndex <> -1 And UserForm2.ListBox1.ListCount > 0 Then
For i = UserForm2.ListBox1.ListCount - 1 To 0 Step -1
If UserForm2.ListBox1.Selected(i) = True Then
'UserForm2.TextBox1.Text = i
UserForm2.ListBox2.AddItem UserForm2.ListBox1.List(i)
UserForm2.ListBox1.RemoveItem i
'UserForm2.ListBox2.AddItem i
pos = Me.ListBox2.ListCount - 1
For k = 0 To 10
Me.ListBox2.List(pos, k) = Me.ListBox1.List(i, k)
Next k
End If
Next i
For i = UserForm2.ListBox1.ListCount - 1 To 0 Step -1
If UserForm2.ListBox1.Selected(i) = True Then
UserForm2.TextBox1.Text = i
'UserForm2.ListBox1.RemoveItem i
'UserForm2.ListBox1.RemoveItem UserForm2.ListBox1.Selected(i)
'UserForm2.ListBox1.RemoveItem UserForm2.ListBox1.ListIndex
End If
Next i
UserForm2.TextBoxNBArticles = UserForm2.ListBox2.ListCount - 1
End If
End SubDésolé d'avance si ça ne marche toujours pas, sans pouvoir tester c'est compliqué de modifier un code...
Merci de votre réponse, je regarde ça
J'avais prévu de le mettre, et j'ai zappé au moment de l'envoie
Rebonjour,
Il y a déjà plusieurs problèmes, je ne peux même pas lancer le formulaire car plusieurs problèmes apparaissent dans son initialisation:
Set BA = Sheets("Base articles")Le nom ici n'était pas bon, je l'ai remplacé par ça.
.RowSource = BA.Range("B5:L1825").AddressIci tu avais mis .Value et non .Address ce qui créait une incompatibilité, d'ailleurs cette ligne pose un autre problème, elle est en doublon, j'ai revu l'initialisation de la Listbox.
Le souci derrière c'est qu'on ne peut pas enlever un élément d'une Listbox initialisée avec RowSource, ça génère automatiquement une erreur, la solution serait de passer par autre chose, mais ça demanderait d'afficher les en-têtes autrement... Je joins le fichier actuel, au moins le formulaire se lance maintenant.