Tri 1 colonne et recupération de plusieurs éléments sur ligne

Bonjour tout le monde,

Je suis nouveau et totalement débutant en VBA. Néanmoins, je m'y intéresse depuis peu...

Donc voilà ce que je souhaiterais faire:

Ci joint fichier ( j'ai supprimé quelques éléments pour des questions d'anonymat )

Je dispose d'une base nommée "RESIDENTS" sur Feuil1, un formulaire nommé " FORMULAIRE DE RECHERCHE " sur lequel sont disposés

en autre, un textBox (Saisir un Nom) et une ListBox. Je souhaiterais d'une part que par l'intermédiaire du TextBox, un tri alphabétique de ma colonne A1 s'inscrive dans ma ListBox et que suite au choix (au click en fait) sur la ListBox les données complémentaires figurant dans ma base s'affichent dans mes autres TextBox sur le même formulaire. Je vous avoue que là je cale grave...surtout pour la deuxième opération

Par ailleurs, j'ai un autre problème que je n'arrive pas à résoudre. Je voudrais que les DTPickerDate n'affichent AUCUNE date à l'initialisation du formulaire.

Merci par avance pour votre aide précieuse

12clients-mo.xlsm (121.75 Ko)

Bonjour,

Pour effectuer une recherche dans une colonne, tu peux utiliser la procédure événementielle "Change()" du Textbox afin que la liste soit remplie en fonction de la saisie avec ce code ci-dessous :

Private Sub TxtNom_Change()

    Dim Plage As Range
    Dim Cel As Range
    Dim I As Long

    With Worksheets("RESIDENTS"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    With LstClient

        .Clear

        For Each Cel In Plage

            If Cel Like TxtNom & "*" Then

                .AddItem Cel.Value 'nom de la personne en colonne 1
                .Column(1, .ListCount - 1) = Cel.Row 'numéro de la ligne où se trouve ce nom

            End If

        Next Cel

    End With

End Sub

Pour ne pas tenir compte des majuscules/minuscules, colles cette ligne en tête du module de l'UserForm :

Option Compare Text

Maintenant, une ListBox ne peut pas avoir plus de 10 colonnes remplies avec la méthode "AddItem", il faut passer par un tableau et utiliser la propriété "List" en lui affectant le tableau une fois rempli ou encore avec la propriété "RowSource".

Comme il ne sert à rien d'avoir toutes les infos dans la ListBox puisque tu les veux dans les différents TextBox au "Click()" sur un élément de cette dernière, il est préférable de définir la ListBox avec seulement 2 colonnes dont une est cachée (la seconde avec une largeur égale à 0) et qui comportera le numéro de la ligne où se trouve le nom et ensuite, le code pour récupérer les différentes valeurs correspondantes dans les différents TextBox :

Private Sub LstClient_Click()

    Dim Lig As Long

    With LstClient

        Lig = .Column(1, .ListIndex)

        TextBoxPrenom.Text = Worksheets("RESIDENTS").Cells(Lig, 2).Value
        TxtNiveau.Text = Worksheets("RESIDENTS").Cells(Lig, 3).Value
        TextBoxOrganisme.Text = Worksheets("RESIDENTS").Cells(Lig, 4).Value
        TextBoxTelephone.Text = Worksheets("RESIDENTS").Cells(Lig, 8).Value
        TextBoxAdresse.Text = Worksheets("RESIDENTS").Cells(Lig, 9).Value
        'etc...
        '...
        '...

    End With

End Sub

Merci pour l'aide précieuse. Après essai, c'est évidemment un succès

Rechercher des sujets similaires à "tri colonne recuperation elements ligne"