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
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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.
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 SubLe fichier :
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.