Afficher les selections multiple d'une Listbox dans une seule cellule

Bonjour à tous,

Nouvellement en stage en entreprise afin de cloturer mon master en qualité des produits de santé, une nouvelle tâche des plus ardues (pour moi) m'a été confiée.

On m'a chargé de réaliser un formulaire afin de simplifier le listing d'arrêt de commercialisation.

Grâce à de multiples tutoriels j'ai réussi à réaliser mon formulaire avec des boutons commandes me permettant de créer une nouvelle fiche, d'éditer une existante et un autre pour de sortir de mon formulaire. De ce côté là tout fonctionne très bien !

Le problème qui se présente est le suivant : On me demande d'ajouter à mon tableau la liste des services concernés par cet arrêt de commercialisation. Pour se faire j'ai créée une Listbox à sélection multiple contenant les noms de mes différents services via RawSources. Je voudrais que les services sélectionnés apparaissent dans une seule et même cellule de la colonne H et que l'intéraction avec mes boutons Nouvelle produit (command button 1) et Editer (commande button 2) soit possible.

Jusqu'à présent je n'ai réussi qu'a faire apparaitre les selections multiples dans LES dernières cases vides de ma colonne H et je suis bloqué. J'ai commencé VBA hier et beaucoup de choses me dépassent. Je ne sais pas si j'ai été clair dans ma demande.

Je souhaite que tous les services selectionnés aparraissent dans la meme cellule de la colonne H pour chaque produit.

Option Explicit
Dim Ws As Worksheet

'Pour le formulaire
Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer

    Set Ws = Sheets("Produits") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("A" & J)
        Next J
    End With
    With Me.ComboBox2
        For J = 2 To Ws.Range("B" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("B" & J)
        Next J
    End With
    For I = 1 To 5
        Me.Controls("TextBox" & I).Visible = True
    Next I
End Sub

'Pour la liste d?roulante numéro d'arret de commercialisation
Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "B")
    For I = 1 To 5
        Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
    Next I
End Sub

'Pour le bouton Nouveau produit
Private Sub CommandButton1_Click()
    Dim L As Integer
    If MsgBox("Confirmez-vous l'insertion de ce nouveau produit?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
        L = Sheets("Produits").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
        Range("A" & L).Value = ComboBox1
        Range("B" & L).Value = ComboBox2
        Range("C" & L).Value = TextBox1
        Range("D" & L).Value = TextBox2
        Range("E" & L).Value = TextBox3
        Range("F" & L).Value = TextBox4
        Range("G" & L).Value = TextBox5

    End If
End Sub

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim I As Integer

    If MsgBox("Confirmez-vous la modification de ce produit ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        Ws.Cells(Ligne, "B") = ComboBox2
        For I = 1 To 5
            If Me.Controls("TextBox" & I).Visible = True Then
                Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
            End If
        Next I
    End If
End Sub

'Pour le bouton Quitter
Private Sub CommandButton3_Click()
    Unload Me
End Sub

Mon formulaire ressemble à ca pour le moment :

formulaire

Je dois vraisemblablement utiliser mon command button 4 "OK" pour réaliser l'opération souhaitée (enfin je crois) mais malgré mes différentes recherches sur les forums je n'ai pas trouvé de topic me permettant de résoudre mon problème avec le peu de connaissance en VBA dont je dispose. Je pense être passé plusieurs fois devant la solution mais ma compréhension limité du langage VBA m'a empêché d'adapter les exemples vus à mon problème.

Mon tableau se présente comme ceci et l'objectif et de faire apparaitre chaque services concernés par l'arret dans la colonne H de la ligne correspondant à chaque produit.

tableau exemple

Je vous remercie par avance de l'aide que vous pourrez m'apporter.

Cordialement,

Erwan.

Bonjour,

je ne vois pas dans le code la partie copie des sélections dans les cellules ?

Un exemple pour copier les sélections dans une seule cellule:

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i)  Then  machaine = machaine & ListBox1.List(i) & vbLf
Next
machaine = Left(machaine, Len(machaine) - 1) ' pour supprimer le dernier vblf
Range("D9") = machaine

A+

Bonjour,

Il faut aussi restituer lors de la lecture

Private Sub UserForm_Initialize()
    Dim J As Long
    Dim i As Integer
    Me.ListBox1.List = [tableau2].Value

    Set Ws = Sheets("Produits") 'Correspond au nom de votre onglet dans le fichier Excel
    With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("A" & J)
        Next J
    End With
    With Me.ComboBox2
        For J = 2 To Ws.Range("B" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("B" & J)
        Next J
    End With
    For i = 1 To 5
        Me.Controls("TextBox" & i).Visible = True
    Next i
End Sub

'Pour la liste d?roulante numéro d'arret de commercialisation
Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim i As Integer, temp

    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    ComboBox2 = Ws.Cells(Ligne, "B")
    For i = 1 To 5
        Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i + 2)
    Next i
    '---
     temp = Ws.Cells(Ligne, "h")
     a = Split(temp, ",")
     For i = 0 To Me.ListBox1.ListCount - 1: Me.ListBox1.Selected(i) = False: Next i
     If UBound(a) >= 0 Then
       For i = 0 To Me.ListBox1.ListCount - 1
        If Not IsError(Application.Match(Me.ListBox1.List(i), a, 0)) Then
            Me.ListBox1.Selected(i) = True
        Else
            Me.ListBox1.Selected(i) = False
        End If
       Next i
     End If
 End Sub

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
    Dim Ligne As Long
    Dim i As Integer
    Dim tmp

    If MsgBox("Confirmez-vous la modification de ce produit ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        Ws.Cells(Ligne, "B") = ComboBox2
        For i = 1 To 5
            If Me.Controls("TextBox" & i).Visible = True Then
                Ws.Cells(Ligne, i + 2) = Me.Controls("TextBox" & i)
            End If
        Next i
        '---
         tmp = ""
         For i = 0 To Me.ListBox1.ListCount - 1
           If Me.ListBox1.Selected(i) = True Then
             tmp = tmp & Me.ListBox1.List(i) & ","
           End If
         Next i
         Ws.Cells(Ligne, "h") = tmp
    End If
End Sub

Boisgontier

Bonjour,

Nouvelle version

Boisgontier

34bdclienttdyn.zip (49.21 Ko)

Merci beaucoup pour vos réponses ici aussi ! J'ai posté à plusieurs endroit et je n'avais pas activé les notifications par mail sur ce forum ! Ce soucis est résolu grâce à ta solution Jacques Boisgontier =D!

Rechercher des sujets similaires à "afficher selections multiple listbox seule"