Améliorer une macro de recherche

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. Ex 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: 29
  • test de filtrage.xls
    37 KB · Affichages: 31
  • test de filtrage.xls
    37 KB · Affichages: 33

Cydor007

XLDnaute Occasionnel
Re : Améliorer une macro de recherche

bonjour,

excel accepte les * et ?
donc tu peux dire : *536* donc concatener ton critère en faisant "*" & "536" & "*" dans ta macro, en remplaçant le 536 par une cellule, une variable ...

Salut mutzik.

Je comprend ton point mais, présentement quand je fais une recherche dans les colonnes de ma base de donnée, je cherche le critère avec un Match parfais.

C'est à dire: Si je tappe dans ma cellule de critere (vis à vis Modèle) 536, il n'y aura pas de réponse. Je voudrais être capable de tapper 536 et même s'il y a d'écrit dans la cellule de ma base de donnée E536H dans la colonne G (description) j'optiens tous les résultats ou il est écrit 536 dans ma colonne.

Il existe un filtre textuel qui fait cette fonction. J'aimerais être capble de l'intégrer dans ma macro existante.

Peux-tu m'aider la dessus......

Merrci, Cydor007
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 502
dernier inscrit
talebafia