Recherche via une macro

natacha

XLDnaute Occasionnel
Bonjour à tous,
voila je souhaiterais créer une macro qui execute une recherche sur le libellé et en fonction de la saisie on nous renvoie le code . Ex : la personne saisie "Ouvriers qualifiés", la liste contenant "Ouvriers qualifiés" apparait dans une liste deroulante et l'utisaleur selectionne celui qui lui correspond et on lui renvoie le code.
Je sais pas si je suis tres claire. N'hesitez pas si vous ne comprenez pas.
Je vous transmets le fichier de base.
Merci d'avance.
Natacha
 

Pièces jointes

  • familles professionnelles.xls
    31 KB · Affichages: 60

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche via une macro

Bonjour Natacha, bonjour le forum,

En pièce jointe ton fichier modifié. Clique sur le bouton Recherche (ou raccourci clavier [Alt]+[R]). Au fur et à mesure que tu tapes des caractères la ListBox se emt à jour... Ensuite double-clique sur un élément de la ListBox et celui-ci est placé dans le presse-papier (tu n'as pas spécifier quoi en faire...). Un simple [Ctrl]+[V] permettra de le coller dans la cellule de ton choix.
 

Pièces jointes

  • natacha_v01.xls
    44 KB · Affichages: 66
  • natacha_v01.xls
    44 KB · Affichages: 66
  • natacha_v01.xls
    44 KB · Affichages: 67

natacha

XLDnaute Occasionnel
Re : Recherche via une macro

Merci beaucoup pour ta réponse. Je souhaiterais juste que les élément de la ListBox ne soient pas les codes mais les libellés contenant ce qui a été saisie.
Pour la réponse je souhaiterais qu'elle apparaisse dans une fenêtre. Si c'est possible, bien sur.
Encore merci pour le travail.
Natacha
 

job75

XLDnaute Barbatruc
Re : Recherche via une macro

Bonjour natacha, salut Robert,

En utilisant une liste de validation et cette macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$4" Then Exit Sub
If Application.CountIf([B:B], Target) Then Exit Sub
Dim cel As Range, txt$
For Each cel In Range("B2", [B65536].End(xlUp))
  If LCase(cel) Like "*" & LCase(Target) & "*" Then
    txt = txt & IIf(txt = "", "", ",") & Replace(cel, ",", "#")
  End If
Next
With Target.Validation
  .Delete
  If Target = "" Then Exit Sub
  .Add xlValidateList, Formula1:=txt
  .ShowError = False
End With
Target.Select
Application.SendKeys "%{UP}"
End Sub
Noter que les virgules en colonne B posent problème (sous Excel 2010) pour construire la liste.

Je suis obligé de les remplacer par #.

Fichier joint.

A+
 

Pièces jointes

  • familles professionnelles(1).xls
    46.5 KB · Affichages: 53

job75

XLDnaute Barbatruc
Re : Recherche via une macro

Re,

Il faut d'abord éliminer les # s'il y en a en D4, en ajoutant :

Code:
Application.EnableEvents = False
Target = Replace(Target, "#", ",")
Application.EnableEvents = True
Fichier (2)

A+
 

Pièces jointes

  • familles professionnelles(2).xls
    41.5 KB · Affichages: 45
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche via une macro

Bonjour Natacha, Job, bonjour le forum,

En pièce jointe la version 2 avec les modifications demandées. Un clic dans un élément de la ListBox1 le place dans la TextBox2. Le bouton Ok place le contenu de la TextBox2 dans le presse-papier, car sinon je ne sais pas ce que tu vas en faire....
 

Pièces jointes

  • natacha_v02.xls
    46.5 KB · Affichages: 102
Dernière édition:

job75

XLDnaute Barbatruc
Re : Recherche via une macro

Re,

Ma macro beuguait si la recherche n'aboutissait à rien (txt = "").

Version (3).

NB : il s'agit d'un travail d'école (?), car je pense comme Robert qu'il vaut mieux un USF.

A+
 

Pièces jointes

  • familles professionnelles(3).xls
    42.5 KB · Affichages: 81

job75

XLDnaute Barbatruc
Re : Recherche via une macro

Re,

Au lieu d'utiliser # pour remplacer la virgule, utiliser le caractère de code 130 (une "fausse" virgule).

La macro finale :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$4" Then Exit Sub
Application.EnableEvents = False
Target.Select
Target = Replace(Target, Chr(130), ",")
Application.EnableEvents = True
If Application.CountIf([B:B], Target) Then Exit Sub
Dim cel As Range, txt$
For Each cel In Range("B2", [B65536].End(xlUp))
  If LCase(cel) Like "*" & LCase(Target) & "*" Then
    txt = txt & IIf(txt = "", "", ",") & Replace(cel, ",", Chr(130))
  End If
Next
With Target.Validation
  .Delete
  If Target = "" Or txt = "" Then Exit Sub
  .Add xlValidateList, Formula1:=txt
  .ShowError = False
End With
Application.SendKeys "%{UP}"
End Sub
Version (4).

A+
 

Pièces jointes

  • familles professionnelles(4).xls
    41.5 KB · Affichages: 53

natacha

XLDnaute Occasionnel
Re : Recherche via une macro

Bonsoir,
Merci beaucoup pour vos nombreuses réponses.
J'avoue que j'ai un petit penchant pour la solution de robert car la présentation est pas mal.
Mais je me heurte à un pbl quand j'essaie de l'adapter.
En fait je voudrait ne plus voir apparaitre le bouton recherche, mais directement la boite de dialogue et que cette boite soit sur la feuille 2 et non pas la feuille 1.
Je vous transmets ce que j'ai essayé de faire.
Je vous en remercie encore.
Natacha
 

Pièces jointes

  • Copie de natacha_v02.xls
    82.5 KB · Affichages: 46

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche via une macro

Bonjour le fil, bonne fête Natacha, bonjour le forum,

Il suffit de remplacer dans la procédure ListBox1_Click :
Code:
Me.TextBox2.Value = Cells(.List(.ListIndex, 1), 1).Value
par :
Code:
Me.TextBox2.Value = Sheets("Feuil1").Cells(.List(.ListIndex, 1), 1).Value

Le fichier :
 

Pièces jointes

  • natacha_v03.xls
    80 KB · Affichages: 81

natacha

XLDnaute Occasionnel
Re : Recherche via une macro

Bonjour à tous,
merci robert c'est exactement ça.
Mais est il possible de supprimer le bouton recherche et d'acceder directement sur la feuille 2 sur le formulaire de recherche.
D'avance merci.
Merci pour ma fête!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche via une macro

Bonjour le fil, bonjour le forum,

Dans la version 4 un double-clic sur n'importe quelle cellule de la colonne A ou B ouvrira l'Userform dans l'onglet Feuil2.
 

Pièces jointes

  • natacha_v04.xls
    79 KB · Affichages: 94

natacha

XLDnaute Occasionnel
Re : Recherche via une macro

Bonjour à tous,
Je reviens sur cette discussion, car il me subsiste un problème.
Si un utilisateur tape un métier non répertorié un message de bug apparait.
Je préférais qu'une fenêtre apparaisse pour dire que le métier n'est pas répertorié.
ex: infographiste.
Je vous remercie par avance.
Natacha
 

Discussions similaires

Réponses
5
Affichages
402
Réponses
18
Affichages
752

Statistiques des forums

Discussions
312 489
Messages
2 088 848
Membres
103 974
dernier inscrit
chmikha