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...

capture

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 Mais là je cale sec !

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

Nouvelle version

Ceuzin

multicolmultisel

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, merci pour vos propositions à vous deux.

Je regarde tout çà dans mon fichier final et je vous redis.

Cordialement,

Leakim

Salut à vous,

Je vous confirme la validité de vos deux propositions, le forum n'a accepte qu'une, alors en voilà deux icon topic solved post icon topic solved post. Merci les gars !

Je vous remercie pour votre temps.

Leakim

Rechercher des sujets similaires à "gestion listbox colonnes"