fonction recherche avance

cdp095

XLDnaute Nouveau
Bonjour,n’ayant aucune connaissance sur excel je me suis lancé un défi perso.
Je souhaite intégrer dans dans fichier excel une fonction de recherche multi paramètres sur un fichier qui contient 2 colonnes et 1636 lignes, a travers une interface graphique sobre avec un champ d'affichage des résultats trouvé. fichier joint
Merci pour votre aide. :)
 

Pièces jointes

  • PIECES.xlsm
    60 KB · Affichages: 35

job75

XLDnaute Barbatruc
Re : fonction recherche avance

Bonjour cdp095, Papou,

"Interface graphique" hypersimple dans le fichier joint.

Simple aussi la macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
[C2] = "=ISNUMBER(SEARCH(D$1,A2))+ISNUMBER(SEARCH(D$1,B2))"
[A:B].AdvancedFilter xlFilterInPlace, [C1:C2]
[C2] = ""
End Sub
A+
 

Pièces jointes

  • PIECES(1).xls
    184 KB · Affichages: 75

job75

XLDnaute Barbatruc
Re : fonction recherche avance

Re,

On peut même mettre une formule plus simple pour le critère en C2 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
[C2] = "=SEARCH(D$1,A2&CHAR(1)&B2)"
[A:B].AdvancedFilter xlFilterInPlace, [C1:C2]
[C2] = ""
End Sub
Fichier (2).

A+
 

Pièces jointes

  • PIECES(2).xls
    184 KB · Affichages: 90

cdp095

XLDnaute Nouveau
Re : fonction recherche avance

Merci papou, pour votre performance,y'aurait une possibilité pour vous m’expliquiez en faite au lieu de voir apparaitre les codes de pièces d'avoir une page graphique qui les caches avec juste le bouton de recherche encore Merci ...:D
 

job75

XLDnaute Barbatruc
Re : fonction recherche avance

Re,

(...) en faite au lieu de voir apparaitre les codes de pièces d'avoir une page graphique qui les caches avec juste le bouton de recherche encore Merci ...:D

Si les "codes" ne vous intéressent pas :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
[C2] = "=SEARCH(D$1,B2)"
[B:B].AdvancedFilter xlFilterInPlace, [C1:C2]
[C2] = ""
Columns(1).Hidden = Target <> ""
End Sub
Fichier (3).

Mais puisque vous ne jurez que par un UserForm je vous laisse avec Papou :)

A+
 

Pièces jointes

  • PIECES(3).xls
    184.5 KB · Affichages: 61

Paritec

XLDnaute Barbatruc
Re : fonction recherche avance

Bonjour Cdp095 Job:eek: le forum
est-ce que tu peux me traduire en français:
apparaitre les codes de pièces d'avoir une page graphique qui les caches avec juste le bouton de recherche
une explication dans le fichier avec si possible un résultat même obtenu manuellement
Pour la recherche elle ne se fait pas sur les noms de pièces mais sur n'importe quelle partie de le référence ou de la désignation si tu as une reférence autrefois et que tu tapes "fois" la ligne sera dans la listbox
Plus tu tapes de lettre plus la recherche s'affine mais tu verras vite que même 4 lettres suffisent a trouver ce que tu cherches
dans l'attente de ta traduction et des explications dans le fichier
a+
Papou:eek:
 

job75

XLDnaute Barbatruc
Re : fonction recherche avance

Re,

Je ne peux quitter ce fil sans cette solution avec liste déroulante (ComboBox) :

Code:
Option Compare Text 'pour ignorer la casse

Private Sub ComboBox1_Change()
Dim x$, t, e, n&, a$()
x = ComboBox1
t = Range("B2", Range("B" & Rows.Count).End(xlUp)(3)) 'au moins 2 éléments
For Each e In t
  If e <> "" And InStr(e, x) Then
    n = n + 1
    ReDim Preserve a(1 To n)
    a(n) = e
  End If
Next
If n = 0 Then ReDim a(1 To 1)
ComboBox1.List = a
ComboBox1.DropDown 'déroule la liste
End Sub
Fichier joint.

A+
 

Pièces jointes

  • PIECES avec liste déroulante(1).xls
    190.5 KB · Affichages: 70

job75

XLDnaute Barbatruc
Re : fonction recherche avance

Re,

Je viens de remarquer qu'en colonne B il y a 52 doublons...

Pour les éliminer, utiliser l'objet Dictionary :

Code:
Option Compare Text 'pour ignorer la casse

Private Sub ComboBox1_Change()
Dim x$, t, d As Object, e
x = ComboBox1
t = Range("B2", Range("B" & Rows.Count).End(xlUp)(3)) 'au moins 2 éléments
Set d = CreateObject("Scripting.Dictionary")
For Each e In t
  If e <> "" And InStr(e, x) Then d(e) = ""
Next
If d.Count = 0 Then d("") = "" 'au moins 1 élément (vide)
ComboBox1.List = d.keys
ComboBox1.DropDown 'déroule la liste
End Sub
Fichier (2).

Edit : tiens je découvre, la ligne If d.Count = 0 Then... n'est pas indispensable.

Elle permet cependant d'effacer la ComboBox quand on clique dans la liste (vide).

A+
 

Pièces jointes

  • PIECES avec liste déroulante(2).xls
    190.5 KB · Affichages: 25
Dernière édition:

cdp095

XLDnaute Nouveau
Re : fonction recherche avance

Merci papou pour votre aide, mais des que je veux modifier la place du bouton recherche, ainsi que la couleur de fond de la feuille menu cela me dit que c'est protégé par un mdp et j'échoue, précision je suis sous Excel 2013
cordialement manu le bulot ! ;)
 

Pièces jointes

  • fonction-recherche-avance-cdp-095-v2-.xlsm
    84.9 KB · Affichages: 25
  • fonction-recherche-avance-cdp-095-v2-.xlsm
    84.9 KB · Affichages: 29
  • fonction-recherche-avance-cdp-095-v2-.xlsm
    84.9 KB · Affichages: 30

Discussions similaires

Statistiques des forums

Discussions
312 685
Messages
2 090 942
Membres
104 703
dernier inscrit
romla937