Recherche dans une base de données

Cydor007

XLDnaute Occasionnel
Bonjour,

Je dois être capable de rentrer mes criteres de sélection dans la feuille crtière. J'aimerais être capable de faire une recherche avec plusieurs critère à la fois dans ma base de donnés. Exemple: le texte des critères de Tension kV, Q= lg de queue, Ø= dia de queue, Numérotation se retrouvent dans la colonne G de la feuillle base de données.

Si j'ai plusieurs "Match" je dois être en mesure d'afficher mes résultats sur la feuille critere dans: "Résultat des recherches".

Présentement ma cacro fonctionne très bien si l'information que je rentre est complet. Ex. Je cherche E536H, elle va m'afficher toutes les lignes avec le texte E536H. Mais si je cherche seulement 536 dans la même colonne, cela ne fonctionne pas.

Voici ma macro:

Option Explicit
Sub Filtrage()
Dim I$, J$, K$, L$, M$, N$, O$, P$, Q$, R$, S$, T$, U$, V$
Dim Lig As Integer
Application.ScreenUpdating = False
Sheets("Criteres").Activate
'Effacement de la feuille "resultats"
Range("C37:N6000").Select
Selection.ClearContents
Range("C37").Select
'Vérification de l'état du mode du filtre élaboré
With Sheets("Base de données")
If .AutoFilterMode = True Then
.Range("A1:N1").AutoFilter
End If
'Définition des variables critères
I = Sheets("Criteres").Cells(2, 3)
J = Sheets("Criteres").Cells(3, 3)
K = Sheets("Criteres").Cells(4, 3)
L = Sheets("Criteres").Cells(5, 3)
M = Sheets("Criteres").Cells(6, 3)
N = Sheets("Criteres").Cells(7, 3)
O = Sheets("Criteres").Cells(8, 3)
P = Sheets("Criteres").Cells(9, 3)
Q = Sheets("Criteres").Cells(10, 3)
R = Sheets("Criteres").Cells(11, 3)
S = Sheets("Criteres").Cells(12, 3)
T = Sheets("Criteres").Cells(13, 3)
U = Sheets("Criteres").Cells(14, 3)
V = Sheets("Criteres").Cells(15, 3)
'Filtrage de la base selon les critères
.Range("A1:N1").AutoFilter
If I <> "" Then .Range("A1:N1").AutoFilter Field:=1, Criteria1:=I
If J <> "" Then .Range("A1:N1").AutoFilter Field:=2, Criteria1:=J
If K <> "" Then .Range("A1:N1").AutoFilter Field:=4, Criteria1:=K
If L <> "" Then .Range("A1:N1").AutoFilter Field:=6, Criteria1:=L
If M <> "" Then .Range("A1:N1").AutoFilter Field:=7, Criteria1:=M
If N <> "" Then .Range("A1:N1").AutoFilter Field:=9, Criteria1:=N
If O <> "" Then .Range("A1:N1").AutoFilter Field:=10, Criteria1:=O
If P <> "" Then .Range("A1:N1").AutoFilter Field:=11, Criteria1:=P
If Q <> "" Then .Range("A1:N1").AutoFilter Field:=12, Criteria1:=Q
If R <> "" Then .Range("A1:N1").AutoFilter Field:=10, Criteria1:=R
If S <> "" Then .Range("A1:N1").AutoFilter Field:=11, Criteria1:=S
If T <> "" Then .Range("A1:N1").AutoFilter Field:=12, Criteria1:=T
If U <> "" Then .Range("A1:N1").AutoFilter Field:=13, Criteria1:=U
If V <> "" Then .Range("A1:N1").AutoFilter Field:=14, Criteria1:=V, Operator:=xlAnd
' Transfert des résultats
Lig = .Range("A65536").End(xlUp).Row
If Lig > 1 Then
.Range("A2:N" & Lig).Copy Sheets("Criteres").Range("C37")
Else
MsgBox "Pas d'enregistrement existant !"
End If
.Range("A1:N1").AutoFilter
End With
Sheets("Criteres").Cells(3, 6).Select
Application.ScreenUpdating = True
End Sub

Tu vois, la seule chose qui me manque c'est de combiner une recherche par texte incomplet pour chaque critère et aussi pouvoir intégrer plusieurs critère pour la même variable. La seul fonction dans d'excel capable de le faire c'est le filtre textuel.

J'ai besoin d'un petit coup de main. je te laisse le fichier excel pour l'améliorer.

En passant cela fonctionne dans mon vrai fichier qui regroupe + de 5000 lignes.

Bonne journée. :)
 

Pièces jointes

  • test de filtrage.xls
    37 KB · Affichages: 71
  • test de filtrage.xls
    37 KB · Affichages: 79
  • test de filtrage.xls
    37 KB · Affichages: 71

Discussions similaires

Réponses
8
Affichages
373

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette