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
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 SubPour ne pas tenir compte des majuscules/minuscules, colles cette ligne en tête du module de l'UserForm :
Option Compare TextMaintenant, 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 SubMerci pour l'aide précieuse. Après essai, c'est évidemment un succès