XL 2013 Filtrage automatique des résultats de recherche

chaelie2015

XLDnaute Accro
Bonjour Forum
Je cherche à mettre en place une fonction dans Excel où les résultats de recherche saisis dans la cellule E3 s'affichent automatiquement dans la colonne F en fonction des lettres tapées. Par exemple, si je saisis la première lettre "A" dans la cellule E3, je souhaite que la colonne F affiche tous les mots qui commencent par "A". Ensuite, si je continue à saisir "Ac", la colonne F devrait automatiquement se mettre à jour pour n'afficher que les mots commençant par "Ac", et ainsi de suite, jusqu'à ce que je valide la cellule E3.
Ci-joint le fichier que j'ai préparé. Je n'ai pas réussi à automatiser le processus lors de la saisie.
Merci par avance
 

Pièces jointes

  • Charlie Moteur de recherche DIC.xlsm
    42.4 KB · Affichages: 8

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Généralement pour cela on utilise une TextBox sur la feuille, que tu peux éventuellement lier à la cellule E3.


[edit]
Je cherche à mettre en place une fonction dans Excel où les résultats de recherche saisis dans la cellule E3 s'affichent automatiquement dans la colonne F en fonction des lettres tapées.
Au temps pour moi, j'ai lu trop vite et pas "vu" que tu voulais mettre en place une fonction.
[/edit]
 

chaelie2015

XLDnaute Accro
Bonjour chaelie2015, TooFatBoy, le forum,

Ce problème n'a tout simplement aucun sens :

- en mode édition (lors de la frappe en E3) aucun calcul ne peut s'effectuer

- la plage où doit se faire la recherche n'est pas indiquée.

A+
Bonjour Job75, TooFatBoy, et les membres du forum,

Merci pour vos retours.
  1. Pour le 1 point, je te remercie pour l'information. C'est justement pour cela que j'avais posé la question, est ce possible ?
  2. Concernant le 2 point, la plage de recherche se situe dans la colonne D, qui était effectivement masquée.
Merci encore pour votre réponse.
 

klin89

XLDnaute Accro
Bonjour à tous, :)

A défaut d'une formule, essaie ceci :
VB:
Sub test()
     Dim x, Prefix As String, Arr
     With Sheets("Liste")
          Prefix = .[e3]
          x = Filter(.Evaluate("transpose(if(left(d3:d685," & Len(Prefix) & _
                               ")=""" & Prefix & """,row(1:1)))"), False, 0)
          If UBound(x) = -1 Then Exit Sub
          Arr = Application.Index(.Range("d3:d685").Value, Application.Transpose(x), [transpose(row(1:1))])
          If UBound(x) = 0 Then
               .[f3].Resize(, UBound(Arr)) = Arr
          Else
               .[f3].Resize(UBound(Arr), UBound(Arr, 2)) = Arr
          End If
     End With
End Sub

Mais bon, avec une formule je sais que c'est possible 🙃
klin89
 

TooFatBoy

XLDnaute Barbatruc
Mais bon, avec une formule je sais que c'est possible 🙃
En es-tu vraiment sûr ?

La formule ne peut s'actualiser, si je ne me trompe, qu'après validation de la saisie. Nan ? 🤔
C'est d'ailleurs pour ça qu'habituellement on ne fait pas la saisie dans une cellule mais dans une TextBox qui permet d'interception facilement chaque caractère saisi.

Mais ici Charlie a un besoin spécifique.
Besoin qui jusqu'ici reste bien mystérieux puisqu'il ne nous en dit rien. 😉
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour klin89,

Bah chaelie2015 a bien dit :
les résultats de recherche saisis dans la cellule E3 s'affichent automatiquement dans la colonne F en fonction des lettres tapées.
Ensuite, si je continue à saisir "Ac", la colonne F devrait automatiquement se mettre à jour pour n'afficher que les mots commençant par "Ac", et ainsi de suite, jusqu'à ce que je valide la cellule E3.
Mais s'il s'agit de restituer le filtrage de la colonne D c'est simple et rapide avec des tableaux VBA :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim critere$, tablo, rest(), i&, n&
critere = [E3] & "*"
tablo = Range("D3:E" & Cells.SpecialCells(xlCellTypeLastCell).Row) 'matrice, plus rapide, au moins 2 éléments
ReDim rest(1 To UBound(tablo), 1 To 1)
If critere <> "*" Then
    For i = 1 To UBound(tablo)
        If tablo(i, 1) Like critere Then n = n + 1: rest(n, 1) = tablo(i, 1)
    Next
End If
Application.EnableEvents = False: [F3].Resize(UBound(rest)) = rest: Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Charlie Moteur de recherche DIC.xlsm
    33.3 KB · Affichages: 4

klin89

XLDnaute Accro
Re à tous, :)

En effet, la demande de chaelie2015 n'est réalisable que par l'intermédiaire d'une zone de texte permettant la capture de caractères, je voulais simplement relancer la discussion qui me semblait un peu bloquée sur le coup 🙃
Sinon pour continuer, j'ai vu quelque part qu'il était possible d'obtenir le même résultat que les deux macros proposées en utilisant les fonctions DECALER, PETITE.VALEUR et TROUVE.

klin89
 

TooFatBoy

XLDnaute Barbatruc
Je sais que ça ne correspond pas à ta demande sur au moins deux points : ce n'est pas une fonction et ça utilise une TextBox, mais je te donne tout de même en pièce jointe une proposition librement adaptée de la macro de job75 en #10.
 

Pièces jointes

  • Charlie Moteur de recherche DIC.xlsm
    53.1 KB · Affichages: 0

Discussions similaires

Statistiques des forums

Discussions
313 865
Messages
2 103 078
Membres
108 521
dernier inscrit
manouba