Macro pour Listbox Multiselection

Bonsoir à vous

Après plusieurs essais sans succès, je reviens vers vous pour une aide concernant une macro pour une LISTBOX MULTISELECT de mise à jour.

Tous les détails explicatifs sont sur le fichier ci-attaché.

Je vous remercie d'avance du temps que vous apportez à mon aide.

Bonne soirée

24modele-02.xlsm (29.30 Ko)

Bonsoir,

ci-jointe une proposition avec :"

1- conversion de votre tableau en un objet tableau nommé "Tableau1"

2- rationalisation du code associé

3- modification d'un dossier via les boutons "modifier" + "valider"

4- addition d' un bouton "ajouter" pour ajouter un nouveau dossier.

18modele-03.xlsm (34.30 Ko)

Bonjour le fil, bonjour le forum,

Moins poussé que Thev !... Juste ce que tu demandais :

Le code :

Dim f As Worksheet
Dim BD  As Variant
Dim NL As Long
Dim NC As Byte

Private Sub UserForm_Initialize()
Dim D As Object
Dim I As Long

Set f = Sheets("Dossiers")
Set D = CreateObject("Scripting.Dictionary")
BD = f.Range("A3:F" & f.[A65000].End(xlUp).Row).Value
NL = UBound(BD, 1)
NC = UBound(BD, 2)
For I = 1 To NL
    D(BD(I, 3)) = ""
Next I
Me.ListBox1.List = BD
Me.ComboBox1.List = D.keys
Me.ComboBox2.List = Array("En Instance", "En cours", "Cloturé", "Annulé", "Autre")
End Sub

Private Sub ComboBox1_click()
Dim I As Long
Dim K As Long
Dim Tbl()

K = 1
For I = 1 To NL
    If BD(I, 3) = Me.ComboBox1.Value Then
        ReDim Preserve Tbl(1 To NC + 1, 1 To K)
        For J = 1 To NC
            Tbl(J, K) = BD(I, J)
        Next J
        Tbl(NC + 1, K) = I + 2 'le numéro de ligne est stocké dans une colonne masquée de la ListBox1
        K = K + 1
    End If
Next I
Me.ListBox1.Column = Tbl
End Sub

Private Sub BValider_Click()
Dim I As Integer
Dim D As Long

'pour éviter l'inversion jours/mois on utilise un numéro de série de date en entier long
D = DateSerial(Year(Me.TextBox1.Value), Month(Me.TextBox1.Value), Day(Me.TextBox1.Value))
With Me.ListBox1 'prend en compte la ListBox1
    For I = 0 To .ListCount - 1 'boucle sur tous ses éléemnts
        If .Selected(I) = True Then 'condition : si l'élément est sélectionné
            Li = .Column(6, I) 'récupère le numéro de ligne de l'élément sélectionné
            f.Cells(Li, 5) = Me.ComboBox2.Value 'renvoie l'état (sinon je ne comprends pas l'intérêt de la ComboBox2 ?!...)
            f.Cells(Li, 6) = D 'renvoie la date
            f.Cells(Li, 6).NumberFormat = "dd/mm/yy" 'formate la date
            f.Cells(Li, 7) = Me.TextBox2.Value 'renvoie le classement
            f.Cells(Li, 8) = Me.TextBox3.Value 'renvoie l'observation
        End If 'fin de la condition
    Next I 'prochain élément de la boucle
End With 'fin de la prise en compte de la ListBox1
Unload Me
End Sub

Private Sub BFermer_Click()
Unload Me
End Sub

Le fichier :

35noura-v01.xlsm (29.02 Ko)

Bonjour Thev / Bonjour ThauThème / Le Forum

Bien parfait.

Un vif merci pour le temps que vous avez consacré à mon aide

Je suis bien reconnaissante

Je vous souhaite bonne continuation, bon début de semaine et bonne journée à vous.

Rechercher des sujets similaires à "macro listbox multiselection"