Amélioration recherche instantanée

Bonjour,

je souhaiterais faire quelques modification dans mon code

Dim L As Integer
Application.ScreenUpdating = False
For L = 17 To 30

ActiveSheet.Range("E" & L).EntireRow.Hidden = False
  If ActiveSheet.TextBox1.Value <> "" Then
    If ActiveSheet.Cells(L, 5).Value Like ActiveSheet.TextBox1.Value & "*" Then 
    ActiveSheet.Range("E" & L).EntireRow.Hidden = False

  Else

    ActiveSheet.Range("E" & L).EntireRow.Hidden = True

    End If
  End If
Next L
Application.ScreenUpdating = True

Je cherche à remplacer la recherche sur ma boucle for pour indiquer mon tableau

j'avais donc fait ceci :

dim tabe as String
With ActiveSheet
tabe = .Range("TABentree")
For L = LBound(tabe) To Ubound(tabe)

Mais j'ai une erreur sur la ligne For

Ensuite, je voudrais que la recherche se fassent sur plusieurs colonnes et pas que sur "E". Comment indiquer une 2ème voire une 3ème colonne ? Avec For each ?

Merci d'avance !

Bonjour Thrrybo,

Quel est le message d'erreur ? C'est important de toujours le préciser même si j'imagine qu'il s'agit d'une incompatibilité de type.

Déjà, je dirais qu'il faut prendre l'habitude de toujours déclarer les variables attendant des nombres entiers avec le type long et pas integer. Ensuite, la variable tabe (cause de l'erreur) doit être de type variant et pas de type string.

Ensuite, que cherches-tu à faire exactement ? Au lieu de masquer les lignes, il vaudrait mieux chercher à appliquer des filtres sur ton tableau.

Cdlt,

Bonjour 3GB,

Alors, ça fonctionne donc plus d'erreur mais pas du tout comme je veux puisque quand j'écris une donnée dans ma recherche ma feuille se "décale" si je peux dire ainsi car j'ai mes 16 premières lignes qui sont figées comme volet roulant. Du coup ça fait déconner l'affichage.

Et je masque les lignes car après plusieurs recherches, beaucoup faisait comme cela mais j'admets que ce n'est pas très fluide pour le coup.

L'idéal comme tu dis serait un filtre, comme ceux des tableaux structurés et qui pourrait s'appliquer su plusieurs colonnes mais je sais pas comment m'y prendre du tout..

En pj, un exemple de ce à quoi ressemble mon tableau et au bon emplacement. Et en sachant que l'en-tête est intégré au volet fixe.

Merci

4classeur1.xlsx (13.80 Ko)

Bonsoir Thrrybo,

Je suis désolé, je ne pourrais pas ouvrir le fichier... Donc je ne comprends pas bien cette histoire de volets figés (dont j'ai tendance à me passer de plus en plus).

Mais j'avais déjà rencontré un problème similaire ici :

https://forum.excel-pratique.com/excel/filtrer-tableau-excel-a-partir-d-un-textbox-154376#p955633

Peut-être que ça pourra te servir.

Cdlt,

Bonjour 3GB

Dans l'autre sujet, tu proposes d'avoir les valeurs filtrées ailleurs que dans la tableau de base ? Y a t-il une raison à cela ?

J'ai tenté d'adapter ton code de l'autre sujet pour mon tableau, il filtre bien certaines lignes mais peu importe ce que je mets, il filtre toujours les mêmes. Même quand ma recherche est complète.

Private Sub TextBox1_Change()
If Me.TextBox1 <> "" Then
    Mots = Split(Me.TextBox1.Value, " ")
    Filtrer Mots
Else
    Range("TABentree").AutoFilter
End If
End Sub

Sub Filtrer(Mots)

Application.ScreenUpdating = False
With Range("TABentree")
    ReDim tID(1 To .Rows.Count)
    For i = 1 To .Rows.Count
        For j = LBound(Mots) To UBound(Mots)
            If Application.CountIf(.Rows(i), "*" & Mots(j) & "*") = 0 Then GoTo suiv
        Next j
        n = n + 1
        tID(n) = CStr(.Cells(i, 1).Value)
suiv:
    Next i
    .AutoFilter 1, tID, xlFilterValues
End With
Application.ScreenUpdating = True

End Sub

J'ai trouvé ce code également

Private Sub TextBox1_Change()
Dim i, t As String
Dim WS As Worksheet
Dim Rg As Range
    On Error GoTo Err01
    Application.ScreenUpdating = False
    t = "TABentree"
    i = TextBox1.Text
    Set WS = ActiveSheet
    Set Rg = WS.ListObjects(t).Range
    If i <> "" Then
        Rg.AutoFilter field:=1, Criteria1:="*" & i & "*", Operator:=xlFilterValues
    Else
        Rg.AutoFilter field:=1, Operator:=xlFilterValues
    End If
Err01:
Application.ScreenUpdating = True
End Sub

Mais sur celui-ci dès que j'entre un caractère dans la barre tout le tableau est filtré.

J'ai changé dans field:= mais ça ne fonctionne pas comme je veux.

Tu as une solution ?

Merci

Bon, le dernier code fonctionne mais je suis toujours limité qu'à une seule colonne de recherche. Je voudrais en assigner d'autres et même dans le meilleurs des cas que ça puisse cumuler les critères.

Salut Thrrybo,

Sur l'autre sujet, je suggère de restituer les données du filtre ailleurs car c'est plus simple et plus rapide. En fait, la mise à jour de l'affichage prend un peu de temps et ce n'est pas forcément joli. Mais bien sûr, tout dépend du besoin...

As-tu essayé le fichier que j'avais posté ?

De mémoire, il permet de filtrer les lignes en fonction de mots clés (séparés par un espace lors de la saisie sur la textbox) et portent sur toutes les colonnes, indifféremment.

La seule particularité, c'est que le fonctionnement repose sur une colonne ID avec des valeurs uniques pour faciliter le filtre et le code. Donc, si ça ne t'embarrasse pas, tu peux ajouter en toute première colonne cette fameuse colonne ID et lui affecter la formule :

=LIGNE()-LIGNE(TABentree)+1

Cdlt,

Salut,

J'avais fait le test hier soir chez moi sur une ancienne version de mon fichier et ça fonctionnait très bien. Aujourd'hui je le fais donc sur le bon fichier et là, petit problème.

Déjà Excel refusait que j'insère une colonne à gauche de mon tableau mais une fois ce problème résolu, il met une erreur sur la formule " #EPARS! " et indique que la propagation est impossible dans un tableau.

Et mon tableau est identique à celui chez moi. La seule différence est que la je suis sur 365 et chez moi sur la version 2019.

Salut,

Je ne sais pas pourquoi tu as ce message d'erreur que je ne connais pas.

L'idée est d'avoir des valeurs uniques dans la colonne. Ca aurait été mieux d'avoir des valeurs allant de 1 au nombre de lignes du tableau mais sinon, ce n'est pas dramatique.

Peux-tu réessayer avec une des formules suivantes :

=LIGNE()-LIGNE(TABentree[#En-têtes])
=LIGNE()-LIGNE($A$1)

sachant que :

- TABentree[#En-têtes] est la référence qui s'obtient en sélectionnant la ligne d'en-têtes du tableau lors de la saisie de la formule.

- A1 est un exemple pour remplacer la cellule contenant l'entête de la première colonne du tableau (celle que tu viens d'ajouter).

Si ça bloque toujours :

=LIGNE()

Sinon, tu peux toujours saisir les valeurs en dur pour les essais en attendant de trouver la formule qui aille.

Top ça fonctionne avec la 1ère.

Un grand merci à toi !

Nickel, Ca me fait plaisir !

Bon courage pour la suite et à bientôt sur un fil peut-être.

Rechercher des sujets similaires à "amelioration recherche instantanee"