Gestion de listbox 2 colonnes
Bonjour,
Je cale sur la gestion des listbox
J'aimerai pour ajouter, supprimer des items mais je cale sur la gestion de deux colonnes.
L'idée est d'avoir la date d'un férié et la dénomination du férié l'une à coté de l'autre. Mais je n'y parviens pas.
J'ai une première listbox avec des checkbox. Lorsque je sélectionne les fériés que je veux, ceux-ci alimentent la second listebox. Je parviens à faire pour la première colonne mais pas pour les deux...
Puis avec cette second listebox, j'aimerai pour supprimer les fériés qui ne me conviennent plus. Je parviens seulement à les supprimer si la date est en bas de la liste?
J'ai aussi deux textbox pour ajouter des fériés à la liste principale. J'aimerai que la date du férié et le commentaire soient ajouté à la liste que je peux sélectionner par les checkbox.
En espérant être clair dans ma demande.
Leakim
Edit 20:00: Je me suis occupé du code pour les deux textbox. Merci
Salut,
J'avais codé quelques fonctions autour des listbox.
Public Sub ListBox_AjoTous_Lst1ALst2(objListBox1 As MSForms.ListBox, objListBox2 As MSForms.ListBox)
' Copier la sélection de la liste
Dim intCptLig As Integer
Dim intCptCol As Integer
' Parcourir les lignes
For intCptLig = objListBox1.ListCount - 1 To 0 Step -1
With objListBox2
.AddItem
' Parcourir les colonnes
For intCptCol = 0 To objListBox1.ColumnCount - 1
.List(.ListCount - 1, intCptCol) = objListBox1.List(intCptLig, intCptCol)
Next intCptCol
End With
' Supprimer la ligne de la 1ère liste
objListBox1.RemoveItem (intCptLig)
Next intCptLig
End Sub
Public Sub ListBox_AjoSel_Lst1ALst2(objListBox1 As MSForms.ListBox, objListBox2 As MSForms.ListBox)
' Copier la sélection de la liste
Dim intCptLig As Integer
Dim intCptCol As Integer
' Parcourir les lignes
For intCptLig = objListBox1.ListCount - 1 To 0 Step -1
' Ligne sélectionnée
If objListBox1.Selected(intCptLig) = True Then
With objListBox2
.AddItem
' Parcourir les colonnes
For intCptCol = 0 To objListBox1.ColumnCount - 1
.List(.ListCount - 1, intCptCol) = objListBox1.List(intCptLig, intCptCol)
Next intCptCol
End With
' Supprimer la ligne de la 1ère liste
objListBox1.RemoveItem (intCptLig)
End If
Next intCptLig
End Sub
Public Sub ListBox_Copier_Lst1DansLst2(objListBox1 As MSForms.ListBox, objListBox2 As MSForms.ListBox)
objListBox2.Clear
objListBox2.List = objListBox1.List
objListBox2.ColumnWidths = objListBox1.ColumnWidths
End Sub
Public Sub ListBox_SupDoublons_Lst1ALst2(objListBox1 As MSForms.ListBox, objListBox2 As MSForms.ListBox)
' Copier la sélection de la liste
Dim intLstBox1CptLig As Integer
Dim intLstBox2CptLig As Integer
Dim intCptCol As Integer
' Parcourir les lignes
For intLstBox1CptLig = objListBox1.ListCount - 1 To 0 Step -1
' Parcourir les lignes
For intLstBox2CptLig = 0 To objListBox2.ListCount - 1
' Lignes identiques
If objListBox1.List(intLstBox1CptLig, 0) = objListBox2.List(intLstBox2CptLig, 0) _
And objListBox1.List(intLstBox1CptLig, 1) = objListBox2.List(intLstBox2CptLig, 1) Then
' Supprimer la ligne de la 1ère liste
objListBox1.RemoveItem (intLstBox1CptLig)
Exit For
End If
Next intLstBox2CptLig
Next intLstBox1CptLig
End Sub
Public Sub ListBox_SupTous(objListBox As MSForms.ListBox)
' Effacer la liste
objListBox.Clear
End Sub
Public Sub ListBox_SupUn(objListBox As MSForms.ListBox)
' Effacer la sélection de la liste
Dim icpt As Integer
For icpt = objListBox.ListCount - 1 To 0 Step -1
If objListBox.Selected(icpt) = True Then
objListBox.RemoveItem (icpt)
End If
Next icpt
End Sub
Public Sub ListBox_Monter(objListBox As MSForms.ListBox)
Dim Prec() As String
ReDim Prec(0 To objListBox.ColumnCount - 1)
With objListBox
If .ListCount = 0 Or .ListIndex = -1 Or .ListIndex = 0 Then Exit Sub
For i = 0 To UBound(Prec)
Prec(i) = .List(.ListIndex - 1, i)
.List(.ListIndex - 1, i) = .List(.ListIndex, i)
.List(.ListIndex, i) = Prec(i)
Next
' Resélection de l'élément déplacé
.ListIndex = .ListIndex - 1
End With
End Sub
Public Sub ListBox_Descendre(objListBox As MSForms.ListBox)
Dim Suiv() As String
ReDim Suiv(0 To objListBox.ColumnCount - 1)
With objListBox
If .ListCount = 0 Or .ListIndex = -1 Or .ListIndex = .ListCount - 1 Then Exit Sub
For i = 0 To UBound(Suiv)
Suiv(i) = .List(.ListIndex + 1, i)
.List(.ListIndex + 1, i) = .List(.ListIndex, i)
.List(.ListIndex, i) = Suiv(i)
Next
' Resélection de l'élément déplacé
.ListIndex = .ListIndex + 1
.Selected(.ListIndex) = True
End With
End Sub
Exemple d'utilisation:
Call ListBox_AjoSel_Lst1ALst2(Me.ListBox_Ferselectionnable, Me.ListBox_ferselect)
J'ai aussi des fonctions qui permettent d'enregistrer les données d'une listbox dans un tableau et inversement de charger des données d'un tableau dans une listbox...
Gdal29
Salut Gdal29,
C'est pseudo qui sent bon la Bretagne
Je vais voir ce que je peux faire avec tes codes. J'espère que je vais savoir les adapter à mes besoins.
Merci pour tes propositions.
Si quelqu'un d'autre à des compléments
Leakim
Re,
J'ai un bug de déclaration de variable lorsque je vais
Call ListBox_AjoSel_Lst1ALst2(Me.ListBox_Ferselectionnable, Me.ListBox_ferselect)
Voilà ce que j'ai fait dans mon fichier.
J'ai copier coller chacun de tes codes dans un module que j'ai nommé Mod_Gdal29
et j'ai mis comme tu me le proposais Call.
Cela ne fonctionne pas...
J'ai bien peur de ne pas avoir le niveau pour faire les adaptations nécessaires...
Je fais continuer à étudier la VBA
Leakim
Bonjour,
Private Sub B_ajout_Click()
Me.ListBox1.AddItem
pos = Me.ListBox1.ListCount - 1
Me.ListBox1.List(pos, 0) = Me.TextBox2
Me.ListBox1.List(pos, 1) = Me.TextBox3
End Sub
Ceuzin
Salut,
Peux-tu poster le fichier ou tu as ton code, stp.
Gdal29 (Bzh
Salut Gdal29,
Le fichier est sur le premier post.
Cordialement,
Leakim
Salut Ceuzin,
Merci pour ta réponse.
C'est une solution pour alimenter ma liste qui fonctionne bien. C'est un point de réglé, merci. Reste à gérer la suppression de la ligne de l'item choisi
Ce qui pèche c'est le reste vider une listbox multichoix deux colonne dans une seconde listbox dans laquelle s'affiche la sélection de la première.
Cordialement,
Leakim
Exemple de transfert 2 colonnes
Private Sub UserForm_Initialize()
Me.Source.List = [A2:B7].Value
End Sub
Private Sub B_enlève_Click()
If Me.Dest.ListCount > 0 And Me.Dest.ListIndex <> -1 Then
Me.Source.AddItem Me.Dest
pos = Me.Source.ListCount - 1
Me.Source.List(pos, 1) = Me.Dest.Column(1)
Me.Dest.RemoveItem Me.Dest.ListIndex
End If
End Sub
Private Sub b_prend_Click()
If Me.Source.ListIndex <> -1 And Me.Source.ListCount > 0 Then
Me.Dest.AddItem Me.Source
pos = Me.Dest.ListCount - 1
Me.Dest.List(pos, 1) = Me.Source.Column(1)
Me.Source.RemoveItem Me.Source.ListIndex
End If
End Sub
Ceuzin
Salut Ceuzin,
Encore une fois merci.
J'avais pas envisagé de faire comme cela mais bon, pourquoi pas?
Moi, j'aimerai sélectionner avec les chekbox et transférer l'ensemble en une fois.
Je vais regarder ce que je peux faire avec cette exemple.
Leakim
Multi sélection
Pour le style Checbox, il suffit de changer la propriété ListStyle.
Ceuzin
Re,
J'ai pourtant souvent visité le site de boisgonthier?
J'aurai du y penser cette fois encore, manifestement.
Ok c'est vraiment une bonne avancé.
La suite c'est comment alimenter le tableau dans la feuil excel ? est ce que je dois clear les colonnes et les re-remplir ou est ce qu'il y un code pour trouver les éléments dans le tableau et qui les supprime un à un ?
Merci de ton intérêt.
Cordialement,
Leakim
Salut Ceuzin,
Merci pour ton fichier cela ressemble exactement à ma requête.
J'organise tout cela dans mon fichier et je te redis.
Avec tout mes remerciements
Merci aussi à Gdal29
Leakim
Salut,
En pièce jointe, ton fichier avec les codes. J'ai simplement copié les codes et saisie la ligne que je t'ai donnée.
Pour charger les listbox, tu peux utiliser la fonctions ChargerParam_TblExcel_LstBox
'Charger la listebox
Call ChargerParam_TblExcel_LstBox(Me.ListBox_Ferselectionnable, "TblJrsFeries")
Call ChargerParam_TblExcel_LstBox(Me.ListBox_ferselect, "TblJrsFeriesSelection")
Pour enregistrer les sélections de l'utilisateur, utilises SauverParam_LstBox_TblExcel
Call SauverParam_LstBox_TblExcel(Me.ListBox_ferselect, "TblJrsFeriesSelection")
Pour utiliser ces 2 fonctions, il faut créer un tableau dans Excel: Accueil / Styles / Mise en forme de tableau et le nommer (exemple: TblJrsFeriesSelection). Dans le module, il y a une variable global (je n'ai pas eu le temps modifié), que tu dois renseigner par le nom de la feuille contenant le tableau précédemment créé:
Public Const GV_STR_TBLPARAM_WS As String = "JFer"
Bonne soirée,
Gdal29
Salut Gdal29,
N'en jeté plus,
Je regarde tout çà dans mon fichier final et je vous redis.
Cordialement,
Leakim