Faire apparaitre plusieurs lignes dans userform
Bonjour à tous
j'ai créée un tableau avec 3 colonnes (année, nom, numero ) grâce à userform je peux rechercher tous ce qu'il se trouve dans le tableau
sauf que le résultat dans la ListBox est juste ma recherche .
ce que j'aimerais faire c'est en cherchant un nom, une année ou un numéro, la ligne correspondante s'affiche c'est à dire l'année le nom et le numéro
voir plusieurs lignes si plusieurs résultats
et là je sèche
je vous poste mon fichier pour mieux visualiser ma requête
Pourriez-vous m'aiguiller dans la procédure s'il vous plait
par avance merci
Bonjour,
A voir ton code, j'en déduis que tu as fais des amalgames de codes trouvés par ci par là
Voici un code (qui doit remplacer tout le tien) qui rempli la liste en fonction de ce qui est entré dans le TextBox au fur et à mesure :
Private Sub UserForm_Initialize()
'3 colonnes pour la liste
Me.ListBox1.ColumnCount = 3
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
'la liste est remplie à chaque saisie dans le TextBox
Private Sub TextBox1_Change()
Dim Cel As Range
Dim Depart As String
ListBox1.Clear
If Trim(Me.TextBox1) = "" Then Exit Sub
'défini la plage sur la colonne B
With Worksheets("Feuil1"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(xlUp)): End With
For Each Cel In Plage
'certaines valeurs sont précédées d'un espace que je pense parasite, d'ou l'utilisation de Trim()
If Trim(UCase(Cel.Value)) Like UCase(TextBox1.Text) & "*" Then
Select Case Cel.Column
Case 1
ListBox1.AddItem Cel.Value
ListBox1.Column(1, ListBox1.ListCount - 1) = Cel.Offset(, 1).Value
ListBox1.Column(2, ListBox1.ListCount - 1) = Cel.Offset(, 2).Value
Case 2
ListBox1.AddItem Cel.Offset(, -1).Value
ListBox1.Column(1, ListBox1.ListCount - 1) = Cel.Value
ListBox1.Column(2, ListBox1.ListCount - 1) = Cel.Offset(, 1).Value
Case 3
ListBox1.AddItem Cel.Offset(, -2).Value
ListBox1.Column(1, ListBox1.ListCount - 1) = Cel.Offset(, -1).Value
ListBox1.Column(2, ListBox1.ListCount - 1) = Cel.Value
End Select
End If
Next Cel
End SubBonjour
Voici le fichier modifié
La saisie n'a pas besoin d'être faite en majuscules , c'est automatique (évènement change du textbox)
Bonne continuation
Chers Patty et Theze,
merci beaucoup pour votre aide
effectivement j'ai pioche par ci et là des bouts de codes que j'ai essayé d'adapter à mon USF
je suis impressionné par la rapidité de votre réponse
merci
maintenant je poursuis ma quête de connaissance
à très bientôt sur le fofo
Bonjour,
Correction de mon code, comme la recherche porte sur les trois colonnes et que des valeurs commencent par exemple par "1" dans deux colonnes il y aura forcément des doublons donc utilisation d'un dictionnaire pour filtrer et ensuite, inscription du numéro de la ligne dans une colonne cachée afin de pouvoir éventuellement modifier ces valeurs :
Private Sub UserForm_Initialize()
'3 colonnes pour la liste
ListBox1.ColumnCount = 4
ListBox1.ColumnWidths = "80;80;70;0"
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
'la liste est remplie à chaque saisie dans le TextBox
Private Sub TextBox1_Change()
Dim Fe As Worksheet
Dim Dico As Object
Dim Cel As Range
Dim Depart As String
ListBox1.Clear
If Trim(Me.TextBox1) = "" Then Exit Sub
Set Fe = Worksheets("Feuil1")
'défini la plage sur la colonne B
With Fe: Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(xlUp)): End With
Set Dico = CreateObject("Scripting.Dictionary")
For Each Cel In Plage
'certaines valeurs sont précédées d'un espace que je pense parasite, d'ou l'utilisation de Trim()
If Trim(UCase(Cel.Value)) Like UCase(TextBox1.Text) & "*" Then
If Dico.exists(Fe.Cells(Cel.Row, 1).Value & "," & Fe.Cells(Cel.Row, 2).Value & "," & Fe.Cells(Cel.Row, 3).Value) = False Then
Dico.Add Fe.Cells(Cel.Row, 1).Value & "," & Fe.Cells(Cel.Row, 2).Value & "," & Fe.Cells(Cel.Row, 3).Value, ""
ListBox1.AddItem Fe.Cells(Cel.Row, 1).Value
ListBox1.Column(1, ListBox1.ListCount - 1) = Fe.Cells(Cel.Row, 2).Value
ListBox1.Column(2, ListBox1.ListCount - 1) = Fe.Cells(Cel.Row, 3).Value
ListBox1.Column(3, ListBox1.ListCount - 1) = Cel.Row
End If
End If
Next Cel
End Sub
Private Sub ListBox1_Click()
With ListBox1
MsgBox "Année : " & .Column(0, .ListIndex) & _
vbCrLf & _
"Nom : " & .Column(1, .ListIndex) & _
vbCrLf & _
"Code : " & .Column(2, .ListIndex) & _
vbCrLf & _
"Numéro de ligne : " & .Column(3, .ListIndex)
End With
End SubMerci, c'est de plus en plus précis
bravo