Module de recherche élaboré

toine2010

XLDnaute Nouveau
Bonjour,
J'ai profité depuis longtemps des trucs et astuces savamment distillés sur le forum mais là je suis bloqué...
Jusqu'à présent j'avais un fichier excel avec un module de recherche qui permettait de chercher des mots clés dans d'autres onglets et de générer des liens hypertexte pour y accéder et tout fonctionnait très bien...
Je souhaite maintenant pouvoir faire une recherche "multi critère", c'est à dire je tape dans le module chèvre cheval et il me crée un lien hypertext vers toutes les cellules qui contiennent les mots chèvre et cheval, hélas aujourd'hui ça ne fonctionne pas car je n'arrive pas à lui faire également identifier la cellule qui contient cheval chèvre (ordre inversé) et lorsqu'il y a de la ponctuation (,) ça ne fonctionne pas...
En prime je souhaiterais qu'il ne fasse pas de distinction entre chèvre et chevre, c'est à dire qu'il ne prenne pas en compte les accents...
Je vous joins mon fichier de travail, si quelqu'un pouvait m'aider ça serait très sympa
A+
 

Pièces jointes

  • Test Recherche.xlsm
    273.6 KB · Affichages: 91
  • Test Recherche.xlsm
    273.6 KB · Affichages: 90
  • Test Recherche.xlsm
    273.6 KB · Affichages: 87

Staple1600

XLDnaute Barbatruc
Re : Module de recherche élaboré

Re

Simplement à cause du : je te (et non pas je vous ) joins le fichier définitif.

(Et comme plus bas dans le fil, tu assimilais mes interventions à de l’incruste non productive...)

Mais puisque que tu m'invites de nouveau à la table ;)

Voici ce que dit l'aide à propos de CurrentRegion.
CurrentRegion, propriété
Cette propriété renvoie un objet Range qui représente la zone en cours. Celle-ci est une plage limitée par toute combinaison de lignes et de colonnes vides. En lecture seule.
Or dans ta dernière PJ, il y a des cellules vides, cela doit perturber le code de david84 puisque celui-ci utilise CurrentRegion.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Module de recherche élaboré

Re
je viens de rentrer et comme j'ai vu de la lumière:D...
Bon, je n'ai pas ouvert ton fichier et ce n'est pas maintenant que je vais m'y mettre mais les informations de staple doivent te mettre sur la voie de la solution.
Personnellement, je préfère l'utilisation de Cells.Find car UsedRange nécessite un enregistrement préalable de la feuille pour être vraiment précis et semble réagir différemment en fonction de la version d'Excel (cela fonctionnera également avec UsedRange mais la plage de cellules à traiter peut être plus grande que nécessaire si tu as effacé des données sans avoir rafraîchi la feuille de calcul).
Pour t'aider un peu plus, tu peux regarder ici ou sur le site de JB et télécharger son classeur Find dernier.xls.
Essaie par toi-même d'adapter une solution au code.
On ramasse les copies demain matin;)!
Si tu ne t'en sors pas, fais-nous signe, on sera là pourt t'aider.
Bonne nuit:cool:.
A+
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Module de recherche élaboré

Re toine2010,
teste cette macro :
Code:
Sub test()
Dim s As Byte
For s = 2 To Sheets.Count
    MsgBox Sheets(s).UsedRange.Address
Next s
End Sub
Sinon, personnellement, je pense que c'est plus sûr d'utiliser Cells.Find,
donc dans ton code, remplace
Code:
 With Sheets(s)
      Set Pl = Sheets(s).Range("A8").CurrentRegion.Offset(1) _
    .Resize(Sheets(s).Range("A8").CurrentRegion.Rows.Count - 1)
   End With
par
Code:
With Sheets(s)
    DerCel = .Cells(.Cells.Find("*", , , , xlByRows, xlPrevious).Row, .Cells.Find("*", , , , xlByColumns, xlPrevious).Column).Address
    Set Pl = .Range("A9:" & DerCel)
End With
en n'oubliant pas de déclarer DerCel as Variant
Cela fonctionne chez moi.
Cette possibilité t'était fournie dans les liens que je t'avais communiqués dans mon message précédent.
A+
 
Dernière édition:

toine2010

XLDnaute Nouveau
Re : Module de recherche élaboré

Re david84,
Ca fonctionne nickel!
J'ai une dernière question! La recherche respecte la casse (les mots avec ou sans majuscule ne sont donc pas trouvés indifféremment). J'avais trouvé sur mon premier moteur de recherche la parade avec la fonction Find qui permettait de gérer la casse. Comment peut on gérer la casse sur cette macro?
A+
 

david84

XLDnaute Barbatruc
Re : Module de recherche élaboré

Re
la première solution qui me vient à l'esprit est de modifier la chaîne de caractère à traiter en ayant mettant tout en minuscule lors de son insertion dans l'array B avant que les différentes chaînes ne soient traitées par la suite de la procédure.
Pour cela, utiliser LCase.
Pour cela, modifier la ligne
Code:
b(i, 0) = Replace(Sans_accents(Pl(k, j)), ",", "")
et utiliser LCase
Code:
b(i, 0) = LCase(Replace(Sans_accents(Pl(k, j)), ",", ""))
A+
Edit :
tu peux aussi placer
Option Compare Text
juste en dessous de option explicit et ne rien changer au code, j'ai l'impression que cela cela fonctionne aussi (mais à tester correctement de ton côté).
Bonjour staple:) !
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Module de recherche élaboré

Re toine2010,
je vois que tu t'amuses bien ! Si tu as une liste de tes désidératas, autant nous la livrer d'un seul bloc plutôt que de nous la distiller au fur et à mesure:rolleyes:...
Concernant ta dernière question (au demeurant intéressante), le même mot au singulier et au pluriel n'est pas la même chaîne de caractères.
Pour traiter cette partie, il te faut passer par une fonction Replace ou du RegExp.
Mais auparavant, il te faut définir correctement ton attente : veux-tu trouver les mots au singulier et au pluriel en tapant un mot au singulier ou au pluriel ou les 2 ?
Quels sont les pluriels que tu veux traiter (s et x ou certains mot d'origines italiennes dont le singulier en o donne i par exemple) ?
Je te suggère de définir précisément ton attente et de faire une recherche sur G*** pour voir ce que tu peux trouver d'exploitable en matière de code VBA.
Nous verrons ensuite si nous pouvons t'aider.
A+
 

toine2010

XLDnaute Nouveau
Re : Module de recherche élaboré

Re
M'amuser non, abuser peut être! Tu m'as déjà beaucoup aidé et je t'en suis très reconnaissant...
Si mon besoin évolue, c'est qu'au fil des tests, je me pose de nouvelles questions en me mettant à la place d'un utilisateur du module et je me suis dit qu'un utilisateur qui tape un mot au singulier ou au pluriel (s ou x uniquement!) aimerait avoir dans les résultats de sa recherche les deux... Dsl mais je raisonne plus utilisation que programmation!
A+
 

Discussions similaires

Réponses
2
Affichages
323

Statistiques des forums

Discussions
312 502
Messages
2 089 042
Membres
104 010
dernier inscrit
Freba