(userform) Afficher résultats recherche multiple dans listbox

Bonjour à tous !

Du fait de mon emploi je ne peux pas joindre de fichier mais mon problème est simple à expliquer :

Je n'arrive pas à organiser mon userform... tous les codes que j'ai essayé me posent problème. Avant j'avais un code qui me donnait les résultats de ma recherche dans un label... mais que 2 colonnes affichées, c'était moche. Now, je doit basculer dans une listbox, mon tableau a légèrement changé.... et je suis bloqué

J'ai un userform avec une textbox et une listbox.

Je recherche dans ma colonne de A2:A la valeur de la textbox 1

En résultat Private sub TextBox1_Change() je souhaite afficher dans ma listbox tous les résultats correspondants au critère sélectionné, et les colonnes B, D et G de la même ligne...

Pouvez vous m'aider svp?

Merciiiiiii

(Si vous passez par là, Bonjour à Banzai, ThauTheme, Yvouille et Galopin ^^)

Avant mon code en listbox c'était ça :

Dim Cel As Range, Depart As String, Msg As String

  Me.Label2.Caption = ""
  With Sheets("Arrestations et Perquisitions")
    Set Cel = .Columns("C").Find(what:=Me.TextBox1, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Depart = Cel.Address
      Do
        Msg = Msg & vbLf & Cel.Offset(0, -2) & " " & Cel.Offset(0, -1) & " " & Cel
        Set Cel = .Columns("C").FindNext(Cel)
      Loop While Depart <> Cel.Address
    End If
    If Len(Msg) > 0 Then
      Me.Label2.Caption = Mid(Msg, 2)
    Else
      Me.Label1.Caption = "Perquisition  introuvable"
    End If
  End With

Bonjour,

une solution possible:

Private Sub TextBox1_Change()
Dim T, Ttemp, i As Long, j As Integer

Me.Label2.Caption = ""   'à conserver ??
ListBox1.ColumnCount = 4
ListBox1.ColumnWidths = "50;50;50;50"    ' à adapter
With Sheets("Arrestations et Perquisitions")
 T = .Range("A2:G" & .Range("A" & Rows.Count).End(xlUp).Row)  'tableau reprenant toutes les données
 ReDim Ttemp(1 To 4, 1 To 1)  'tableau pour récupérer les données

 For i = LBound(T, 1) To UBound(T, 1)  'on balaie toutes les données
    If UCase(T(i, 3)) = UCase(TextBox1.Value) Then 'si colonne C = textbox   les 2 en majuscules
        j = j + 1
        ReDim Preserve Ttemp(1 To 4, 1 To j)
        Ttemp(1, j) = T(i, 1)      'colonne A
        Ttemp(2, j) = T(i, 2)      'colonne B
        Ttemp(3, j) = T(i, 4)      'colonne D
        Ttemp(4, j) = T(i, 7)      'colonne G
    End If
 Next
End With
ListBox1.Column = Ttemp
End Sub

adapter éventuellement le nom de la listbox, la largeur des colonnes de la listbox

A+

Bonjour,

(Si vous passez par là, Bonjour à Banzai, ThauTheme, Yvouille et Galopin ^^)

Je ne suis ni les uns ni les autres, désolé !

Sheets("Arrestations et Perquisitions")

Déjà là, ça fait flipper, j'espère ne pas finir en zonzon avec la réponse que je vais te donner !

Tu dis :

Je recherche dans ma colonne de A2:A la valeur de la textbox 1

mais dans ton code, la recherche est faite sur la colonne C :

Set Cel = .Columns("C").Find(what:=Me.TextBox1, LookIn:=xlValues, lookat:=xlWhole)

donc !

En résultat Private sub TextBox1_Change() je souhaite afficher dans ma listbox tous les résultats correspondants au critère sélectionné, et les colonnes B, D et G de la même ligne...

Tu utilises la procédure événementielle Change() du TextBox donc, à chaque saisie d'un caractère (ou même suppression) la procédure est exécutée mais avec l'argument "LookAt" à xlWhole, tu demandes une recherche exacte donc, t'en que tu n'as pas le mot exact, tu n'auras pas de proposition. Je pense que tu devrais utiliser, pour l'argument "LookAt", la valeur xlPart pour avoir au fur et à mesure les propositions correspondantes aux saisies que tu effectues !

donc au lieu de :

Set Cel = .Columns("C").Find(what:=Me.TextBox1, LookIn:=xlValues, lookat:=xlWhole)

plutôt :

Set Cel = .Columns("C").Find(what:=Me.TextBox1, LookIn:=xlValues, lookat:=xlPart)

Attention de vider la ListBox avant chaque remplissage !

Voici un code qui effectue une recherche partielle sur la colonne A et affiche sur 4 colonnes les résultats correspondants :

Private Sub UserForm_Initialize()

    Me.ListBox1.ColumnCount = 4 '4 colonnes A, B, D et G

End Sub

Private Sub TextBox1_Change()

    Dim Plage As Range
    Dim Cel As Range
    Dim Depart As String
    Dim Msg As String
    Dim I As Integer

'    Me.Label2.Caption = ""

    'défini la plage sur la colonne A de la feuille "Arrestations et Perquisitions" à partir de A2
    With Worksheets("Arrestations et Perquisitions"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    Set Cel = Plage.Find(Me.TextBox1, , xlValues, xlPart)

    If Not Cel Is Nothing Then

        With ListBox1

            .Clear 'vide d'abords la liste !

            Depart = Cel.Address

            Do

                .AddItem Cel.Value 'colonne A
                .Column(1, I) = Cel.Offset(, 1).Value 'colonne B
                .Column(2, I) = Cel.Offset(, 3).Value  'colonne D
                .Column(3, I) = Cel.Offset(, 6).Value  'colonne G
                I = I + 1

'                Msg = Msg & vbLf & Cel.Offset(0, -2) & " " & Cel.Offset(0, -1) & " " & Cel

                Set Cel = Plage.FindNext(Cel)

            Loop While Depart <> Cel.Address

        End With

    End If

'        If Len(Msg) > 0 Then
'            Me.Label2.Caption = Mid(Msg, 2)
'        Else
'            Me.Label1.Caption = "Perquisition  introuvable"
'        End If

End Sub

Messieurs erci pour vos réponses. Je regarde ça lundi matin à l'embauche.

@Theze

- je cite c'est 4 membres parce que je leur ai déjà posé des sujets assez casse tête, et avant ça sur un ancien compte également. Mais c'est un plaisir de te voir également ^^

- le code ne correspond mais comme dit juste avant de le balancer c'était pour montrer un bout de code sur un fichier légèrement différent juste avant sa refonte. C'est plus montrer comment je code... Que déjà si vous voyez des erreurs là dessus vous vous rendiez compte de l'ampleur du travail d'apprentissage

- à priori ta solution semble pas mal du tout je te tiens au courant

Merci à vous deux

Bonjour,

- à priori ta solution semble pas mal du tout je te tiens au courant

Pas de problème

J'ai modifié un poil. Il y a un bug aléatoire qui se place dans la listbox mais j'ai fais quelques lignes pour sécuriser les résultats par derrière. Merci pour ton code c'est celui qui me plaît le mieux

J'ai modifié un poil. Il y a un bug aléatoire qui se place dans la listbox mais j'ai fais quelques lignes pour sécuriser les résultats par derrière. Merci pour ton code c'est celui qui me plaît le mieux

En fait, si je fais une recherche par date avec ce code j'ai un emplacement vide alors que si je fais avec d'autres items ça fonctionne parfaitement

Rechercher des sujets similaires à "userform afficher resultats recherche multiple listbox"