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 Sub
Private 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 Sub

J'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 Sub

Dé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").Address

Ici 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.

Rechercher des sujets similaires à "selection multiple listbox1 suppression"