[VBA] Problème pour effectuer une recherche depuis une textbox
Bonjour à tous,
J'essaie de mettre en place un petit outils de recherche afin d'éviter de devoir faire une Control+F dans la feuille concerné.
J'ai donc deux choses :
- Une feuille BDD_SAGE dans laquelle j'ai un tableau structuré
- Une feuille PREP_LETTRAGE qui contient plusieurs chose, mais ce qui nous intéresse ici est un textbox et une listbox
Ce que je souhaite faire :
Taper un mot dans mon textbox, puis si ce mot est trouvé dans une des lignes de la colonne H de mon tableau (qui est dans la feuille BDD_SAGE) alors il affiche le contenu dans la listebox.
Voici le code que j'ai utilisé :
Private Sub TextBox1_Change()
Dim ligne As Integer
Dim nbLigne As Integer
Application.ScreenUpdating = False
ListBox1.Clear
'On calcul le nombre de lignes du tableau
nbLigne = WorksheetFunction.CountA(ActiveWorkbook.Sheets("BDD_SAGE").Range("E:E"))
If TextBox1 <> "" Then
'On demarre la recherche à la ligne 2 car la premiere contient uniquement les entêtes
For ligne = 2 To nbLigne
'Si le contenu de ma textbox est trouvé dans une ligne de mon tableau (uniquement dans la colonne H)
If Worksheets("BDD_SAGE").Range("H" & ligne) Like "*" & TextBox1 & "*" Then
ListBox1.AddItem ActiveWorkbook.Sheets("BDD_SAGE").Cells(ligne, 5)
ListBox1.AddItem ActiveWorkbook.Sheets("BDD_SAGE").Cells(ligne, 8)
End If
Next ligne
End If
Application.ScreenUpdating = True
End SubJe vous joins également le fichier.
Merci d'avance pour votre aide, mes bases VBA sont encore très fragiles.
Sanka
Petite rectification, je viens de m'apercevoir que cela fonctionne mais je n'avais pas fait attention qu'il fallait respecter la casse.
Du coup, existe t-il une solution pour ignorer la sensibilité à la casse ?
Edit : j'ai trouvé en ajoutant
Option Compare TextDsl de vous avoir dérangé pour rien.
Bonne journée :)
Edit.
Pas de soucis. c'était la solution
Bonjour Amir,
Cela fonctionne également, je vais étudier votre solution et vous remercie pour votre contribution.
Re Amir, Sanka,
Cela fonctionne également, je vais étudier votre solution
Non cela ne fonctionne pas.
Il faudrait amender le code sur la ligne de recherche et savoir si c'est sur la colonne E la recherche ou la colonne H ?
Déclarer les variables aussi
J'aurais aussi évité d'utiliser le même nom BDD_SAGE pour déclarer une variable que le nom de l'onglet concerné
Par contre le fait de mettre deux colonnes sur la listbox est mieux
Cordialement
Salut Dan
Non cela ne fonctionne pas.
tu peux dire : Non cela fonctionne partiellement .
J'aurais aussi évité d'utiliser le même nom BDD_SAGE pour déclarer une variable que le nom de l'onglet concerné
ok , et surtout qu’il travail directement sur les contrôles de feuils et pas les contrôles des userform.
pour les reste je ne comprend pas que tu veux dire par :
Il faudrait amender le code sur la ligne de recherche et savoir si c'est sur la colonne E la recherche ou la colonne H ?
Déclarer les variables aussi
Cordialement
@Amir
pour les reste je ne comprend pas que tu veux dire..
- Dans la boucle i, la recherche se fait sur la colonne E (num de tél) tandis que Sanka le fait sur la colonne H
- Les variables BDD_Sage, i et drlng, schr ne sont pas déclarées. En gros excel prend tout en type Variant
Mais bon s'il dit que cela fonctionne, ça va mais pour moi cela ne donne pas le même résultat
Salut Dan
- Les variables BDD_Sage, i et drlng, schr ne sont pas déclarées.
Bien, c’est une bonne habitude de déclarer les variable surtout si leur nombre est augmente, voir impossible de travailler sans les déclarer mais pers je ne fait pas ça s’il s’agit seulement de deux ou trois variables
En gros Excel prend tout en type Variant
c’est vrai pourquoi plus de mémoire, mais tu sais tu ne peux pas dire tous aux demandeur !
Dans la boucle i, la recherche se fait sur la colonne E (num de tél) tandis que Sanka le fait sur la colonne H
Pers je veux laisser les gens réfléchir un peut tous seuls quand je sens qu’ils sont capables de le faire (changer une référence simple comme une colonne ce n’est pas un grand-chose, et surtout qu’ils des fois te disent Stp j’ai changé la colonne de recherche peux tu m’aider à l’adapter sur mon fichier !).
Mais bon s'il dit que cela fonctionne, ça va mais pour moi cela ne donne pas le même résultat
mais que tu peux faire ,je ne sais pas pourquoi ils ne te donnes pas une bonne explication une fois pour toute , mais ils te disent ah j ai oubliez ... ah j'etait pas clair ...ah mais pourtant j ai envoyé fichier ....
Cordialement
Dan : Mais bon s'il dit que cela fonctionne, ça va mais pour moi cela ne donne pas le même résultat
C'est jusque que je me suis occupé de faire la correction en faisant la recherche sur la bonne colonne. Donc il est vrai que ça ne fonctionnait pas, mais c'était juste une petite correction à adapter à ma situation.
Du coup je rejoins Amir, ça fait réfléchir et c'est pas plus mal. ^^
Après pour le reste je prends vos remarques et m'en servirait pour mes prochains travaux.
Encore merci à vous deux.
Sanka : C'est jusque que je me suis occupé de faire la correction en faisant la recherche sur la bonne colonne. Donc il est vrai que ça ne fonctionnait pas, mais c'était juste une petite correction à adapter à ma situation
Du coup je rejoins Amir, ça fait réfléchir et c'est pas plus mal.
Mais pas soucis pour moi chacun fait comme il l'entend.
Sinon voici un peu votre code modifié avec un mixte de ce qu'Amir a proposé au niveau Listbox1 et de mes quelques modifications perso notamment puisque vous avez formaté votre feuille BDD SAGE en tableau structuré.
Private Sub TextBox1_Change()
Dim ligne As Integer, nbLigne As Integer
Dim BDDSAGE As Worksheet
Application.ScreenUpdating = False
Set BDDSAGE = Worksheets("BDD_SAGE")
With ListBox1
.Clear
.ColumnCount = 2
End With
'On calcul le nombre de lignes du tableau
nbLigne = BDDSAGE.ListObjects("tab_SAGE").DataBodyRange.Rows.Count
If TextBox1 <> "" Then
'On demarre la recherche à la ligne 2 car la premiere contient uniquement les entêtes
For ligne = 1 To nbLigne
'Si le contenu de ma textbox est trouvé dans une ligne de mon tableau (uniquement dans la colonne H)
With BDDSAGE.ListObjects("tab_SAGE").DataBodyRange
If .Item(ligne, 8) Like "*" & TextBox1 & "*" Then
ListBox1.AddItem
ListBox1.List(ListBox1.ListCount - 1, 0) = .Item(ligne, 5)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Item(ligne, 8)
End If
End With
Next ligne
End If
Application.ScreenUpdating = True
End SubAmir : c’est vrai pourquoi plus de mémoire, mais tu sais tu ne peux pas dire tous aux demandeur !
Je ne partage par ton avis dans le sens où si le demandeur ouvre un fil et demande de l'aide (la base d'un forum même si ce n'est pas toujours le cas) c'est aussi pour lui donner une solution simple complète et correcte. A celui qui répond d'expliquer au demandeur s'il exprime le besoin comprendre ce qui est proposé. In fine c'est comme à l'école, si on n'a compris et que l'on ne demande pas d'explications pour comprendre...
Par contre où je te rejoins, c'est lorsque tu mentionnes surtout qu’ils des fois te disent Stp j’ai changé la colonne de recherche peux tu m’aider à l’adapter sur mon fichier ! ... je ne sais pas pourquoi ils ne te donnes pas une bonne explication une fois pour toute ). Des fois c'est pénible on a jamais le bon fichier.
A+ sur d'autres fils...
Cordialement