Moteur de recherche via VBA

Bonjour, nous venons juste de remarquer un problème étrange. Dans la base de données, il y a le film X-men, et c'est le seul mit commençant par X. Mais quand on cherche "x", tous les films dand l'ordre de la base de données sont affichés dans la ListBox. Pouvez-vous nous aider s'il vous plaît?

Re,

Avec le code que j'utilise (voir plus bas), quand je tape X ou x, je n'ai que le film "X-Men Day of Futur Past" d'affiché (postez le fichier que vous utilisés pour voir le code car il n'est pas normal que tous les films soient retournés) mais par contre je viens de faire une correction sur le code ci-dessous car j'ai oublié de prendre en compte le décalage dû au fait que la plage commence à la ligne 2. La correction est faite sur la ligne suivante :

.AddItem Plage(Cel.Row - 1, 1).Value 'nom du film en colonne A

Voici le code de recherche avec la définition de la plage à partir de A2 :

Private Sub CmdRechercher_Click()

    Dim Plage As Range
    Dim Cel As Range
    Dim I As Long
    Dim J As Long
    Dim TblNomsVides
    Dim Chaine As String
    Dim TblChaine
    Dim Trouver As Boolean
    Dim Adr As String

    'mot à éviter
    TblNomsVides = Array("et", "ou", "la", "le", "les", "car", "de", "du") 'etc...

    'vide au préalable...
    ListBox1.Clear

    'evite de récupérer tous les films si le TextBox est vide
    If TextBox1.Text = "" Then Exit Sub

    Set Plage = DefPlage(Worksheets("Feuil1"))

    'supprime les éventuels espaces parasites
    Chaine = Replace(TextBox1.Text, "   ", " ") 'triple (là c'est Parkinson)
    Chaine = Replace(Chaine, "  ", " ") 'double
    Chaine = Trim(Chaine) 'de début et/ou de fin

    'splite la chaine dans un tableau pour le bouclage
    TblChaine = Split(Chaine, " ")

    'vide pour la suite
    Chaine = ""

    'épure la chaine des mots inutiles (les noms vides)
    For I = 0 To UBound(TblChaine)

        For J = 0 To UBound(TblNomsVides)

            If TblChaine(I) = TblNomsVides(J) Then

                Trouver = True
                Exit For

            End If

        Next J

        If Trouver = False Then Chaine = Chaine & TblChaine(I) & "-"

        Trouver = False

    Next I

    I = 0 'pour la suite

    'supprime le tiret de fin
    Chaine = Left(Chaine, Len(Chaine) - 1)

    'splite à nouveau pour la recherche de chaque mot
    TblChaine = Split(Chaine, "-")

    'boucle sur la plage
    For Each Cel In Plage

        'puis sur le tableau afin de rechercher chaque mot
       For J = 0 To UBound(TblChaine)

            If Cel.Value Like "*" & TblChaine(J) & "*" Then

                'évite d'ajouter à nouveau le nom du film si une autre correspondance est trouvée sur la même ligne
               If Cel.Row <> I Then

                    With ListBox1

                        'ici moins - à Cel.Row car la plage est définie à partir de A2 (la 1ère ligne étant les entêtes de colonnes)
                        .AddItem Plage(Cel.Row - 1, 1).Value 'nom du film en colonne A
                       .Column(1, .ListCount - 1) = Cel.Row 'mémorise le numéro de ligne

                        Select Case Cel.Column

                            'entre parenthèses, le numéro de colonne où a été trouvé le mot
                            Case 1, 3: .Column(2, .ListCount - 1) = "4 (" & Cel.Column & ")" 'pour le nom du film et la colonne des mots clé
                            Case Else: .Column(2, .ListCount - 1) = "1 (" & Cel.Column & ")" 'ailleurs que dans le nom du film ou la colonne des mots clés

                        End Select

                    End With

                End If

                I = Cel.Row 'mémorise le numéro de ligne

            End If

        Next J

    Next Cel

    TextBox2.Text = ListBox1.ListCount

End Sub

Function DefPlage(Fe As Worksheet) As Range

    With Fe

        Set DefPlage = .Range(.Cells(2, 1), _
                              .Cells(.Cells.Find("*", _
                              .Cells(1, 1), -4123, , 1, 2).Row, _
                              .Cells.Find("*", _
                              .Cells(2, 1), -4123, , 2, 2).Column))

    End With

End Function

Merci ça fonctionne Mais la colonne mots-clés n'est pas prise en compte, elle se situe en colonne K ^^'

Rechercher des sujets similaires à "moteur recherche via vba"