Listbox qui ne se rempli pas ????

Menibelus

XLDnaute Nouveau
Bonjour,

J'essai de mettre en place une listbox en place avec un combox de recherche et j'aurai besoin de votre aide car je suis un peu perdu, ma list box ne se rempli pas et je ne trouve pas pourquoi ?
Je souhaite que ma listbox1 soit rempli avec les valeurs de mon tableau C1:I400 de la feuille Cfg
Ci-dessous mon code ou plutôt celui que j'ai adapté d'une exemple trouvé sur le web.

VB:
Private O As Worksheet 'déclare la variable O (Onglet)
Private TC As Variant 'déclare la variable TC (Tableau de Cellules)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable J (incrément)
Dim T As Variant 'déclare la variable T (Tableau)

Me.ListBox1.ColumnCount = 5 'définit le nombre de colonnes de la ListBox1
Me.ListBox1.ColumnWidths = "0;60;50;40;30;" 'définit la largeur des tois premières colonne de la ListBox1 (zéro signifie que la première sera cachée)
Set O = Sheets(DATASOURCEFEUIL) 'définit l'onglet O
TC = O.Range("C1").CurrentRegion 'définit la tableau de cellule TC
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau TC (en partant de la 2ème ligne)
    If TC(I, 1) <> "" Then D(TC(I, 1)) = "" 'si la valeur ligne I colonne 7 de TC n'est pas nulle, alimente le dictionnaire D
Next I 'prochaine ligne de la boucle
T = D.keys 'récupère dans le tableau D les éléments du dictionaire D sans doublon
Call tri(T, LBound(T), UBound(T)) 'lance la procédure de tri alphabétique du tableau D
Me.Cmd_search.List = T 'alimente la ComboBox1 d'une liste triée et sans doublon
End Sub

Private Sub Cmd_search_Change() 'au changement dans la ComboBox1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

With Me.ListBox1 'prend en compte la ListBox1
    .Clear 'efface le contenu
    For I = 1 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes du tableau TC (en partant de la 1ère ligne)
        If TC(I, 1) = Me.Cmd_search.Value Then 'condition : si la valeur ligne I colonne 1 de TC est égale à la valeur de la ComboBox1
            .AddItem I 'ajoute le numéro de ligne dans la colonne 0 cachée
            For J = 1 To 9 'boucle 2 : sur les 9 autres colonnes de la ListBox
                .Column(J, .ListCount - 1) = TC(I, J) 'ajoute les données du tableau
            Next J 'prochaine colonne de la boucle 2
        End If 'fin de la conditon
    Next I 'prochaine ligne de la boucle 1
    If .ListCount = 1 Then 'condition : si la ListBox1 ne contient qu'un seul élément
        Me.TextBox_name.Value = .Column(1, 0) 'affiche le modèle dans la Textbox1
        Me.ComboBox_fonct.Value = .Column(2, 0) 'affiche l'année dans la TextBox2
    Else 'sinom
        Me.TextBox_name.Value = "" 'efface la Textbox1
        Me.ComboBox_fonct.Value = "" 'efface la Textbox2
    End If 'fin de la condition
End With 'fin de la prise en compte de la ListBox1
End Sub

Private Sub TextBox_name_Click() 'au clic dans la ListBox1
With Me.ListBox1 'prend en compte la ListBox1
    Me.TextBox_name.Value = .Column(1, .ListIndex) 'affiche le modèle de l'élément sélectionné dans la Textbox1
    Me.ComboBox_fonct.Value = .Column(2, .ListIndex) 'affiche le modèle de l'élément sélectionné dans la Textbox2
End With 'fin de la prise en compte de la ListBox1
'si tu dois sélectionner ou récupérer une donnée le numéro de ligne de l'élément sélectionné est stocké dans la ligne 0 de lá ListBox1
'tu peux, par exemple, utiliser une variable LI : Li = Me.ListBox1(0, Me.ListBox.ListIndex)
End Sub

Sub tri(a, gauc, droi) ' Quick sort, tiré du site de Jacques BOISGONTIER : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm
ref = a((gauc + droi) \ 2)
g = gauc: D = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(D): D = D - 1: Loop
    If g <= D Then
        temp = a(g): a(g) = a(D): a(D) = temp
        g = g + 1: D = D - 1
  End If
Loop While g <= D
If g < droi Then Call tri(a, g, droi)
If gauc < D Then Call tri(a, gauc, D)
End Sub

Private Sub CommandButton_enregister_Click()
    If TextBox_name.Value = "" And ComboBox_fonct = "" And TextBox_d_deb = "" Then
        Dd = MsgBox("Merci de renseigner" & Chr(10) & Chr(10) & "- Nom," & Chr(10) & "- Prénom," & Chr(10) & "- Fonction", 48, "Erreur")
    Else 'Si Ok
        ligne_insertion = Sheets(DATASOURCEFEUIL).Range("D65000").End(xlUp).Row + 1
        Sheets(DATASOURCEFEUIL).Cells(ligne_insertion, 4) = TextBox_name.Value
        Sheets(DATASOURCEFEUIL).Cells(ligne_insertion, 5) = ComboBox_fonct.Value
        Sheets(DATASOURCEFEUIL).Cells(ligne_insertion, 6) = CDate(TextBox_d_deb.Value)

        MsgBox "votre agent à bien été ajouté", vbOKOnly + vbInformation, "CONFIRMATION"

    End If
End Sub



Private Sub Cmd_Recherche_Click()
   
    If Not Cmd_search.Value = "" Then
        Dim no_ligne As Integer
        no_ligne = Cmd_search.ListIndex + 2
        ComboBox_fonct.Value = Cells(no_ligne, 5)
        TextBox_name.Value = Cells(no_ligne, 4)
        TextBox_d_deb = Cells(no_ligne, 6)
        Else
    End If
    CommandButton_enregister.Enabled = False
End Sub

Private Sub Cmd_change_Click()
    If Not Cmd_search.Value = "" Then
    Sheets("Cfg").Select
    modif = Cmd_search.ListIndex + 2
    Cells(modif, 5) = ComboBox_fonct.Value
    Cells(modif, 4) = TextBox_name.Value
    Cells(modif, 6) = TextBox_d_deb
   
    MsgBox ("Modification effectuée")

    Else

    MsgBox ("Veuillez sélectionner le Nom & Prénom de la personne à modifier")

    End If

    Unload Usf_Pers
    Usf_Pers.Show
End Sub

Private Sub CommandButton_annuler_Click()
    Unload Me
End Sub
 

Pièces jointes

  • Musar_FRA8C_Pre_NAP.xlsm
    816 KB · Affichages: 23
Dernière édition:

Paf

XLDnaute Barbatruc
Bonjour,

dans Private Sub Cmd_search_Change() , pour ajouter une ligne dans la listbox, on compare TC(I, 1) (qui contient du numérique) et Me.Cmd_search.Value (qui contient une chaine de caractère) . N'étant pas du même type, ils ne seront jamais égaux, raisons pour laquelle il n'y a rien dans la listbox. il faut convertir l'un ou l'autre pour que les deux soient du même type.(voir Fonction CStr ou CInt)

A+
 

Discussions similaires

Réponses
4
Affichages
165