Faire une recherche en VBA sur un mot clé

arzh37

XLDnaute Nouveau
Bonjour à tous !

Je vous explique mon problème que je n'arrive pas à résoudre depuis plusieurs jours.
Je suis en charge de créer avec Excel 2002, faut de mieux, une espèce de base de données de différents prestataires de salles pour mon entreprise.
Le principe est de faciliter la recherche de salles en fonction de critères tels que capacité, prestations, ville etc.

J'ai donc créé une feuille "BDD" pour stocker les infos et une autre feuille "accueil" avec un formulaire de recherche.
J'ai réussi à mettre en place en VBA un filtre élaboré mais cela ne permet pas de faire de recherche selon un mot clé, il faut que le mot soit identique dans la recherche et la BDD.

D'où mes deux questions :
- est il possible de faire en VBA un filtre élaboré qui va chercher les résultats selon un mot clé et non une expression exacte (ex : j'ai dans mes prestations les infos "traiteurs, spa, réception", si je tape "spa" dans ma recherche je n'ai pas ce résultat) ?
- ou est il possible de faire en VBA une recherche selon un mot clé et non pas une expression exacte, et qui renvoie toutes la ligne où se trouve le mot clé ?

À votre disposition pour plus d'infos et d'avance merci !
Arthur
 

job75

XLDnaute Barbatruc
Re : Faire une recherche en VBA sur un mot clé

Bonjour arzh37, bienvenue sur XLD,

Il y a sur le forum de nombreux exemples d'UserForms permettant la recherche d'un mot clé.

L'UserForm doit contenir au moins une TextBox et une ListBox ou une ListView.

On peut vous montrer ça si vous déposez un fichier avec la base de donnée (allégée, sans données confidentielles).

A+
 

arzh37

XLDnaute Nouveau
Re : Faire une recherche en VBA sur un mot clé

Je ne maitrise pas tellement VBA mais je vais essayer de checher des exemples d'UserForms.

En PJ mon fichier, pour l'instant peu complété car j'ai commencé ce matin.

Par exemple, j'aimerai taper "sonorisation" dans "prestations", et qu'Excel me sorte les salles "Champ Girault" et "Adeindre", si possible avec toutes les infos des salles.

Merci !
Arthur
 

Pièces jointes

  • Récap salles.xls
    44.5 KB · Affichages: 60
  • Récap salles.xls
    44.5 KB · Affichages: 43
  • Récap salles.xls
    44.5 KB · Affichages: 43

job75

XLDnaute Barbatruc
Re : Faire une recherche en VBA sur un mot clé

Re,

Merci pour le fichier.

L'utilisation d'une ListBox ou d'une ListView n'est pas ici une bonne solution car dans votre base il y a pas mal de colonnes (10) et surtout des renvois à la ligne.

Le plus simple est de travailler directement sur la base en masquant les lignes adéquates.

L'UserForm de recherche ne comporte donc qu'une TextBox et ces macros :

Code:
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
[BDD].EntireRow.Hidden = False 'RAZ
If TextBox1 <> "" Then
  Dim r As Range, masque As Range
  For Each r In [BDD].Rows
    If IsError(Application.Match("*" & TextBox1 & "*", r, 0)) _
    Then Set masque = Union(r, IIf(masque Is Nothing, r, masque))
  Next
  If Not masque Is Nothing Then masque.EntireRow.Hidden = True
End If
Application.ScreenUpdating = True
End Sub

Private Sub Userform_Initialize()
Sheets("BDD").Activate
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
Sheets("Accueil").Activate
[BDD].EntireRow.Hidden = False 'RAZ
End Sub
Voyez le nom défini BDD dans la feuille "BDD", il rend le tableau dynamique.

Fichier joint.

A+
 

Pièces jointes

  • Récap salles(1).xls
    46.5 KB · Affichages: 88
  • Récap salles(1).xls
    46.5 KB · Affichages: 61
  • Récap salles(1).xls
    46.5 KB · Affichages: 61
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Faire une recherche en VBA sur un mot clé

Bonjour.
Un essais avec un ComboBox et un dictionnaire arborescent de mots clés
 

Pièces jointes

  • Récap salles.xls
    125.5 KB · Affichages: 74
  • Récap salles.xls
    125.5 KB · Affichages: 50
  • Récap salles.xls
    125.5 KB · Affichages: 54

arzh37

XLDnaute Nouveau
Re : Faire une recherche en VBA sur un mot clé

Merci job75 et Dranreb !!

Je vais peut-être abuser un peu mais est il possible que la recherche puisse porter sur la capacité des salles (avec si possible les signes >,<,=, =<,>=) et même sur les codes postaux (sur les données numériques en fait) ?

Pour la partie texte, ça fonctionne super!

Arthur
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Faire une recherche en VBA sur un mot clé

Re, salut Dranreb,

Par contre je ne peux ouvrir la pièce jointe, la page m'indique : "Pièce jointe spécifié(e) non valide."...

Je ne vois pas pourquoi, car il s'agit de votre fichier modifié.

Avez-vous essayé de le télécharger et de l'ouvrir ensuite ?

Je ne peux rien faire de plus, sinon le joindre une 2ème fois.

A+
 

Pièces jointes

  • Récap salles(1).xls
    46.5 KB · Affichages: 47
  • Récap salles(1).xls
    46.5 KB · Affichages: 27
  • Récap salles(1).xls
    46.5 KB · Affichages: 40

job75

XLDnaute Barbatruc
Re : Faire une recherche en VBA sur un mot clé

Re,

Pour rechercher du texte ou des nombre on utilise la méthode Find.

Le nouveau code de l'USF :

Code:
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
[BDD].EntireRow.Hidden = False 'RAZ
If TextBox1 <> "" Then
  Dim r As Range, masque As Range
  For Each r In [BDD].Rows
    If r.Find(TextBox1, , xlValues, xlPart) Is Nothing _
    Then Set masque = Union(r, IIf(masque Is Nothing, r, masque))
  Next
  If Not masque Is Nothing Then masque.EntireRow.Hidden = True
End If
Application.ScreenUpdating = True
End Sub

Private Sub Userform_Initialize()
On Error Resume Next 'si la feuille est masquée...
Application.Goto Sheets("BDD").[A1]
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)
Sheets("Accueil").Activate
[BDD].EntireRow.Hidden = False 'RAZ
End Sub
Par ailleurs, pour peaufiner, j'ai ajouté cette macro dans le code de la feuille "BDD" :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If UserForm1.TextBox1 <> "" Then _
ActiveCell.EntireRow.Find(UserForm1.TextBox1, , xlValues, xlPart).Select
End Sub
Un clic sur une ligne filtrée sélectionne la 1ère cellule où se trouve la valeur de la TextBox.

Fichier (2).

A+
 

Pièces jointes

  • Récap salles(2).xls
    50.5 KB · Affichages: 123

Discussions similaires

Statistiques des forums

Discussions
312 506
Messages
2 089 121
Membres
104 038
dernier inscrit
Helpme59