moteur de recherche dans cellule

cindy75015

XLDnaute Junior
bonjour
je recherche de l'aide pour créer un petit moteur de recherche dans une la cellule E9

l’idéal si c'est possible des la saisie d'un caractère ou plusieurs, la cellule E9 (ou autre)affiche les résultats(les résultats commence par le contenue de la cellule E9 et rechercher dans la feuille "bd")
si je sélectionne le résultat désiré alors il m'affiche les emplacements dans la colonne A(les autres élément seront remplie par une recherche v)
merci Cindy
 

Pièces jointes

  • test cindy recherche.xlsx
    29.8 KB · Affichages: 51

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Bonsoir Cindy75015, le Forum


Une approche par VBA avec une TextBox inserrée dans ta feuille qui seule réagit automatiquement à partir de trois caractères tappés...

Essaies avec "Cin" ...

Bonne Soirée
@+Thierry
 

Pièces jointes

  • test cindy recherche.xlsm
    40.1 KB · Affichages: 57

cindy75015

XLDnaute Junior
Re : moteur de recherche dans cellule

bonsoir Thierry
oui c'est pas mal comme solution
par contre je dois faire la recherche par référence et non par nom
de plus si je tape"cin"il affiche bien les emplacement ,mais si j'efface "cin" et que je le remet"cin" il me met les emplacement a la suite au lieu de remettre a zéro le document
l’idéal serait des que je tape par exemple "123" il m'affiche toute les références commençant par 123 ensuite je sélectionne une référence et la il m'indique les emplacements

est ce possible
merci de ton aide Cindy
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Re Bonsoir Cindy

Voilà la version V00 un peu plus blindée, et du coup tu n'as pas besoin de Formule VlookUp.

Dis moi si celà s'approche mieux de ce que tu souhaites faire ?

En fait le "moteur" cherche partout sur la feuille BD ... (cherche Cin à nouveau .. mais 123 fonctionne aussi ...)

Cordialement,
@+Thierry
 

Pièces jointes

  • test cindy recherche_Thierry_V00.xlsm
    41.2 KB · Affichages: 42

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Re Cindy, le Forum

Après quelques tests, voici une version un peu plus optimisée et qui évite un bug si la Table BD n'est pas totalement remplie.

Bonne nuit

@+Thierry
 

Pièces jointes

  • test cindy recherche_Thierry_V01.xlsm
    41.5 KB · Affichages: 45

cindy75015

XLDnaute Junior
Re : moteur de recherche dans cellule

re Thierry ,le fil
oui c'est nettement mieux comme version
il n'y a même plus besoin de mettre des recherches v partout
par contre j'ai encore le souci de recherche:
si je veux rechercher la ref 123456 Q01
quand je rentre 123
il me donne les emplacements des références 123456 Q01 et 123556 q07 et 123556 q05
il faudrait que je puisse sélectionner la bonne référence et ensuite qu'il indique les emplacements se serait le top ca
Cindy
est ce possible
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Re Re Cindy, le Forum

Et bien voici un version 02 qui maintenant permet de continuer d'affiner la rechercher en tapant plus que 3 caractères ...

123 = 4 Résultats
1234 = 3
123456 = 2
etc...

123456 q01 = 2

Est-ce ce que tu veux ?

Bonne Nuit
@+Thierry
 

Pièces jointes

  • test cindy recherche_Thierry_V02.xlsm
    41.4 KB · Affichages: 69

cindy75015

XLDnaute Junior
Re : moteur de recherche dans cellule

RE THIERRY
tout simplement magniphiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiique
c'est tout a fait ma demande
géniale
Cindy

connait tu un code moins long pour faire un tri par macro
tri de la plage A12:I500
1 er critère par n°client
2 eme critère par référence
3 eme critère par type
4 eme critère par début séquenciel croissant

voici le code que j'utilise il fonctione mais je pense qu'il y a mieux

ActiveWorkbook.Worksheets("Recherche").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Recherche").Sort.SortFields.Add Key:=Range( _
"B12:B500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Recherche").Sort.SortFields.Add Key:=Range( _
"D12:D500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Recherche").Sort.SortFields.Add Key:=Range( _
"E12:E500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Recherche").Sort.SortFields.Add Key:=Range( _
"G12:G500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Recherche").Sort
.SetRange Range("A11:I500")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B2:N4").Select
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Bonjour Cindy, le Forum,

Très content d'avoir pu faire progresser ton petit moteur de recherche !

Oui on peut toujours améliorer une macro enregistrée en essayant de la comprendre, et par conséquent de minimiser les répétitions des références aux objets avec des "With" et aussi de la rendre dynamique, car souvent une macro enregistrée reste "bêtement" figée aux paramètres du moment et donc elle n'est pas adaptée à couvrir des paramètres plus larges (ou plus courts).

J'en profite pour signaler que ce travail d'analyse d'interprétation et d'optimisation des macros enregistrées est la BASE d'apprentissage du VBA, et c'est ultra efficace en pressant la Touche F1 sur une Fonction ou un Objet pour avoir l'aide contextuelle, selon le cas il y aura même des exemples.


Enfin revenons à nos moutons.... Ta macro de tri ci-dessus donnerait ceci :

Code:
Option Explicit
Sub MySorting()
Dim MyWS As Worksheet
Set MyWS = Worksheets("Recherche")
'
     With MyWS
       With .Sort.SortFields
        .Clear
        .Add Key:=Range("B11"), SortOn:=xlSortOnValues, Order:=xlAscending
        .Add Key:=Range("D11"), SortOn:=xlSortOnValues, Order:=xlAscending
        .Add Key:=Range("E11"), SortOn:=xlSortOnValues, Order:=xlAscending
        .Add Key:=Range("G11"), SortOn:=xlSortOnValues, Order:=xlAscending
       End With
    
      With .Sort
        .SetRange Range("A11").CurrentRegion
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End With
End Sub

On notera que je ne précise que les Adresses des cellules d'entête dans les Add Key afin de rester dynamique sur la longueur de la plage à traîter, et ceci grace plus bas au : [SetRange Range("A11").CurrentRegion] et aussi je ne trie pas les entêtes puisque il est bien précisé : [Header = xlYes] D'autres options sont facultatives (Sort Méthod, Match Case), mais je les ai laissées au cas où ...



NB le code ci-dessus applicable à un Objet WorkSheet n'est valable qu'à partir d'Excel 2007, car dans les versions antérieures seulement trois critères de tri étaient disponibles pour l'Objet Range (pas WorkSheet) et se présente comme suit :

Code:
Sub MySorting_Up_To_Excel_2003()
Range("A11").CurrentRegion.Sort _
Key1:=Range("B11"), Order1:=xlDescending, _
Key2:=Range("D11"), Order2:=xlDescending, _
Key3:=Range("E11"), Order3:=xlDescending, _
Header:=xlYes
End Sub

Ce code XL 2000/2003 reste fonctionnel pour les nouvelles versions d'Excel aussi.

PS je ne te recommande pas de cummuler dans la même Procédure Evènementielle du Moteur de Recherche et le Tri, car il risque d'y avoir des effets de bord avec Excel qui peut planter, à mon avis il vaut mieux ajouter un Bouton de Tri sur ta Feuille.


Bien à toi, et bon apprentissage
@+Thierry
 

cindy75015

XLDnaute Junior
Re : moteur de recherche dans cellule

re Thierry
j'ai pris l'option du code pour office 2010 et j'ai ajouter 2 option de tri ça marche parfaitement
par contre chose que je ne comprend pas avant la recherche se faisait rapidement
maintenant ça lague ça affiche ligne par ligne alors qu'avant ça afficher tout le résultat quasiment en bloque
j'ai pourtant mis la macro de tri sur une autre feuille pour éviter les problèmes et activer par un bouton
aurait tu une idée


ps:pour l'impression de document sur l'autre fil le format conditionnel fonctionne et ne bloque pas la mise en page nickel

Cindy
 

Pièces jointes

  • testcindylague.xlsm
    54.7 KB · Affichages: 53

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Re re re Cindy :), le Forum

Pour la lenteur quand tu dis "j'ai pourtant mis la macro de tri sur une autre feuille pour éviter les problèmes et activer par un bouton" c'est quoi une autre feuille ? un Module ?

Parfois à force de travailler des heures à faire tourner la même macro quii plante parfois, il vaut mieux tout fermer et même parfois redémarrer Windows... C'est ca les "plus" de Windows !

Ta base de donnée fait combien de Lignes ?

Tu verras dans l'autre Fil pour les Format Conditionnels que je t'ai fait une version 4 au fait où finalement il n'y a pas besoin de MFC... Mais bon comme je dis en VBA tous les chemins mênent à Rome, c'est bien pour Pâques !

Cordialement
@+Thierry
 

Si...

XLDnaute Barbatruc
Re : moteur de recherche dans cellule

Salut

Où faut-il répondre ?

Pour aller un peu plus vite, mettre Application.ScreenUpdating à False (0)

Pour le tri, une macro qui reste simple même si tu rajoutes des cas :
Code:
Sub Macrotri()
  With Range("A12:I" & Cells(Rows.Count, 1).End(xlUp).Row)
    .Sort [B12], 2
    .Sort [D12], 2
    .Sort [E12], 2
    .Sort [G12], 2
  End With
End Sub

Pour la recherche, j’avais préparé une autre macro qui pouvait régler aussi des couleurs de lignes par copie des formats. Je la joins pour l’exemple

le bonjour à julie ;)


fichier supprimé désolé mais j'avais adapté ma première recherche à une plage plus grande sans penser à la durée:eek: !
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : moteur de recherche dans cellule

Re

Oui je ne crains que les MFC fassent ralentir tout le sbinz puisqu'elles re-calculent à chaque changement...

Donc je te remets la Version 4 sans MFC mais avec ColorIndex à laquelle je vire le ScreenUpdating pour gagner un peu...

J'ai mis un Timer idiot mais qui me retourne ceci sur une BD de 1734 Lignes avec critère "123"

timer.jpg


Si tu peux tester et me dire... Ta config aussi au cas où ... Ici c'est un Intel Core2 Quad 2.66 et 3.00 GO RAM sur XP 32 Bits, Office 2007, donc une machine un peu vieillotte mais qui tourne.

@+Thierry
 

Pièces jointes

  • timer.jpg
    timer.jpg
    8.9 KB · Affichages: 37
  • timer.jpg
    timer.jpg
    8.9 KB · Affichages: 40
  • test cindy recherche_Thierry_V04_timer.xlsm
    146.9 KB · Affichages: 60

Discussions similaires

Statistiques des forums

Discussions
312 356
Messages
2 087 563
Membres
103 593
dernier inscrit
pellets.jerom