[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é :

20rendu-test.xlsm (67.24 Ko)
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 Sub

Je 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 Text

Dsl de vous avoir dérangé pour rien.

Bonne journée :)

Edit.

Pas de soucis. c'était la solution

Salut Dan

je travail sur depuis un moment ,donc je vais poster comme même :

21test.xlsm (59.22 Ko)

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 Sub

Amir : 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

Rechercher des sujets similaires à "vba probleme effectuer recherche textbox"