Multiselect listbox répartir dans différentes colonnes

Bonjour à tous,

Je suis nouveau sur ce forum et novice en VBA.

J'ai un problème que je n'arrive pas à résoudre, est-ce que l'un d'entre vous saurait m'aider, s'il vous plait ?

J'ai un fichier excel avec une listbox multiselection avec une limite de 10 item sélectionnable (si plus de 10 items sélectionnées, un message d'erreur apparaît). Sachant que ma listbox apparaît lorsque je clique sur les cellules comprise entre B2:K3000 (Voir fichier ci-joint)

J'aimerais faire en sorte de répartir mes items sélectionnées dans des colonnes différentes.

  • -> Si j'ouvre ma listbox en cliquant sur la ligne 2, faire en sorte que mon item 1 se retrouve dans la cellule B2, mon item 2 dans la colonne C2,...
  • -> Si j'ouvre ma listbox en cliquant sur la ligne 3, faire en sorte que mon item 1 se retrouve dans la cellule B3, mon item 2 dans la colonne C3,...

L'un d'entre vous saurait-il m'aider, s'il vous plait ?

Par avance, merci de votre aide.

Cordialement,

Loïs

32alphabet.xlsm (15.49 Ko)

Bonjour,

Règle 1 - Indenter son code...

Règle 2 - Déclarer ses variables, toutes, toujours, en tête de procédure...

Les autres attendront un peu !

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("B2:K3000")) Is Nothing Then
        Cancel = True
        With UserForm1
            .lgn = Target.Row
            .Show
        End With
     End If
 End Sub

Ce que j'ai supprimé n'avait pas d'utilité (même sans déclencher d'erreur). Ce que j'ai ajouté est nécessaire.

Public lgn As Integer

Private Sub CommandButton1_Click()
    Dim a, i%
    With Me.ListBox1
        For i = 0 To .ListCount - 1
            If .Selected(i) Then a = a & "|" & .List(i)
        Next i
        a = Split(a, "|")
        If UBound(a) > 10 Then
            MsgBox "Vous ne pouvez pas sélectionner plus de 10 phrases de risque", vbInformation, _
             "Sélections trop nombreuses"
            Exit Sub
        End If
    End With
    With ActiveSheet
        For i = 1 To UBound(a)
            .Cells(lgn, i + 1) = a(i)
        Next i
    End With
    Unload Me
End Sub

Cordialement.

46lois-alphabet.xlsm (19.12 Ko)

Bonjour MFerrand,

Désolé de ne réagir que maintenant (Pas de connexion internet chez mon grand père)

Merci beaucoup pour la rapidité de ta réponse, cela me semble correspondre parfaitement à mon besoin.

Juste une dernière petite question, saurais tu m'indiquer sur quel paramètre de ton code influer pour que les données s'affichent dans d'autres colonnes ?

J'ai besoin de créer plusieurs listbox du même type pour renseigner différentes colonnes de mon tableau.

Imaginons que je souhaites renseigner en plus les colonnes de Q2:Z3000. Dans ton code, je n'arrive pas à trouver à quoi toucher.

En tout cas, merci encore pour ton aide inestimable.

Bonne journée et bonne fêtes de fin d'année.

Cordialement,

Loïs

Rebonjour MFerrand,

C'est bon j'ai trouvé la solution à ma question. A la fin de ton code, il suffit de jouer sur le chiffre du ".Cells(lgn, i + 1) = a(i)"

Ex : Pour que ces données se retrouvent dans la cellule Q, il suffit d'indiquer ".Cells(lgn, i + 16) = a(i)"

En tout cas, merci encore pour ton aide.

Cordialement,

Loïs

Bonjour,

Une commande d'affectation à Excel implique toujours une expression du type : plage = ...

Si tu as d'autres éléments à affecter, il faut sans doute revoir l'ensemble de la procédure.

Cordialement.

Rechercher des sujets similaires à "multiselect listbox repartir differentes colonnes"