Bonjour à tous,
Après de nombreuses heures de recherches un peu partout sur le net, je me décide à poster sur ce forum pour demander de l'aide.
J'ai trouvé beaucoup de discussions sur le sujet mais impossible pour moi d'adapter les réponses données à mon problème, je me suis donc fais une raison, je n'y arriverai pas tout seul.
Alors voila :
J'ai une base de donnée d'évènements présente sur une feuille nommée "clients" constituée comme ceci :
Date | Atelier| .... | Heures non productives
De la colonne A à L et sur un nombre de lignes non limité
J'ai une textbox nommée "Texbox8" dans laquelle je rentre un terme à rechercher.
Je veux que cette recherche s'effectue sur toutes les cellules de ma base de données.
Lorsqu'un résultat est trouvé, je souhaite que toutes les lignes contenant la cellule où le terme a été trouvé s'affiche les unes après les autres dans ma listbox.
Je souhaite également que cette recherche soit "dynamique", c'est à dire qu'elle s'effectue à chaque fois qu'un caractère est rentré dans ma textbox8.
Voila ce que j'ai commencé à écrire :
Private Sub TextBox8_Change()
ListBox1.RowSource = ""
Dim x As Range, l As Integer
Set x = Cells.Find(TextBox8.Text, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
l = x.row
ListBox1.List(l, 1) = Cells(l, 1)
ListBox1.List(l, 1) = Cells(l, 2)
ListBox1.List(l, 2) = Cells(l, 3)
ListBox1.List(l, 3) = Cells(l, 4)
ListBox1.List(l, 4) = Cells(l, 5)
ListBox1.List(l, 5) = Cells(l, 6)
ListBox1.List(l, 6) = Cells(l, 7)
ListBox1.List(l, 7) = Cells(l, 8)
ListBox1.List(l, 8) = Cells(l, 9)
ListBox1.List(l, 9) = Cells(l, 10)
ListBox1.List(l, 10) = Cells(l, 11)
ListBox1.List(l, 11) = Cells(l, 12)
End If
End Sub
Comme vous devez vous en douter, cela ne fonctionne pas, j'ai toujours une erreur d'exécution 381 : impossible de définir la propriété list.index etc...
Je précise également que lorsqu'un terme est écrit dans ma zone de recherche, ma listbox contient déjà l'ensemble des données présentes dans ma base de donnée.
D'où le "ListBox1.RowSource = """ en début de programme.
Je sollicite donc votre aide précieuse pour m'aider à résoudre ce problème!
Cordialement,
Guillaume.
Ps : je viens d'y penser, mais ne serait-il pas plus simple de procéder à une suppression des lignes ne contenant pas le terme recherché dans ma listbox?
Après de nombreuses heures de recherches un peu partout sur le net, je me décide à poster sur ce forum pour demander de l'aide.
J'ai trouvé beaucoup de discussions sur le sujet mais impossible pour moi d'adapter les réponses données à mon problème, je me suis donc fais une raison, je n'y arriverai pas tout seul.
Alors voila :
J'ai une base de donnée d'évènements présente sur une feuille nommée "clients" constituée comme ceci :
Date | Atelier| .... | Heures non productives
De la colonne A à L et sur un nombre de lignes non limité
J'ai une textbox nommée "Texbox8" dans laquelle je rentre un terme à rechercher.
Je veux que cette recherche s'effectue sur toutes les cellules de ma base de données.
Lorsqu'un résultat est trouvé, je souhaite que toutes les lignes contenant la cellule où le terme a été trouvé s'affiche les unes après les autres dans ma listbox.
Je souhaite également que cette recherche soit "dynamique", c'est à dire qu'elle s'effectue à chaque fois qu'un caractère est rentré dans ma textbox8.
Voila ce que j'ai commencé à écrire :
Private Sub TextBox8_Change()
ListBox1.RowSource = ""
Dim x As Range, l As Integer
Set x = Cells.Find(TextBox8.Text, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
l = x.row
ListBox1.List(l, 1) = Cells(l, 1)
ListBox1.List(l, 1) = Cells(l, 2)
ListBox1.List(l, 2) = Cells(l, 3)
ListBox1.List(l, 3) = Cells(l, 4)
ListBox1.List(l, 4) = Cells(l, 5)
ListBox1.List(l, 5) = Cells(l, 6)
ListBox1.List(l, 6) = Cells(l, 7)
ListBox1.List(l, 7) = Cells(l, 8)
ListBox1.List(l, 8) = Cells(l, 9)
ListBox1.List(l, 9) = Cells(l, 10)
ListBox1.List(l, 10) = Cells(l, 11)
ListBox1.List(l, 11) = Cells(l, 12)
End If
End Sub
Comme vous devez vous en douter, cela ne fonctionne pas, j'ai toujours une erreur d'exécution 381 : impossible de définir la propriété list.index etc...
Je précise également que lorsqu'un terme est écrit dans ma zone de recherche, ma listbox contient déjà l'ensemble des données présentes dans ma base de donnée.
D'où le "ListBox1.RowSource = """ en début de programme.
Je sollicite donc votre aide précieuse pour m'aider à résoudre ce problème!
Cordialement,
Guillaume.
Ps : je viens d'y penser, mais ne serait-il pas plus simple de procéder à une suppression des lignes ne contenant pas le terme recherché dans ma listbox?
Dernière édition: