VBA : recherche selon 2 critères

garth_algar

XLDnaute Junior
Bonjour à tous,

J'ai besoin d'effectuer une recherche verticale selon deux critères. J'ai créé deux fonctions, mais chacune à un inconvénient.

J'ai commencé par le plus simple : une boucle :

Code:
Function RECH_VV(Plage As Range, CritereV1 As Variant, CritereV2 As Variant, NumColCritereV2 As Integer, NumColRecherche As Integer)

Dim i As Integer

For i = 1 To Plage.Rows.Count
    If Plage.Cells(i, 1) = CritereV1 And Plage.Cells(i, NumColCritereV2) = CritereV2 Then
    RECH_VV = Plage.Cells(i, NumColRecherche)
    Exit For
    End If
Next i

End Function

Elle fonctionne très bien, dans tous les classeurs, mais pour une plage contenant beaucoup de ligne, c'est excessivement long.


Pour réduire le temps d'exécution, j'ai utilisé une adaptation du SOMMEPROD :

Code:
Function RECHERCHEVV(critere1 As Variant, critere2 As Variant, plage As Range, n_col_crit2 As Integer, n_col_rech As Integer) As Variant

Dim col1 As Range
Dim col2 As Range
Dim col3 As Range
Dim numcol1 As Integer

numcol1 = plage.Column
Set col1 = Application.Intersect(Columns(numcol1), plage)
Set col2 = Application.Intersect(Columns(numcol1 + n_col_crit2 - 1), plage)
Set col3 = Application.Intersect(Columns(numcol1 + n_col_rech - 1), plage)

RECHERCHEVV = Evaluate("SumProduct((" & col1.Address & "=" & critere1 & ") * (" & col2.Address & "=" & critere2 & ") * (" & col3.Address & "))")

End Function

Cette fonction fonctionne très bien, est plus rapide que la précédente, mais ne fonctionne que dans la feuille où se situe ma plage ...


Je joins un fichier exemple. Voyez-vous une possibilité d'amélioration de l'une ou l'autre de ces deux fonctions ?

Merci d'avance pour vos réponses
 

Pièces jointes

  • recherche selon 2 critères.xls
    27.5 KB · Affichages: 101
  • recherche selon 2 critères.xls
    27.5 KB · Affichages: 100
  • recherche selon 2 critères.xls
    27.5 KB · Affichages: 116

tototiti2008

XLDnaute Barbatruc
Re : VBA : recherche selon 2 critères

Bonjour à tous,

à tester mais je ne suis pas sûr :

RECHERCHEVV = Evaluate("SumProduct(('" & Plage.parent.name & "'!" & col1.Address & "=" & critere1 & ") * ('" & Plage.parent.name & "'!" & col2.Address & "=" & critere2 & ") * ('" & Plage.parent.name & "'!" & col3.Address & "))")
 

garth_algar

XLDnaute Junior
Re : VBA : recherche selon 2 critères

Bonjour tototiti,
Je te remercie pour ta proposition, mais ça ne fonctionne pas non plus.

En revanche je viens de remarquer quelquechose d'étrange.
J'ai tapé ma formule dans une autre feuille que celle où se situe la plage et j'ai obtenu un #Valeur!, j'ai enregistré, fermé et rouvert le fichier, et la cellule où j'ai tapé la formule indiquait la valeur cherchée. Et si je veux revalider la formule, je retrouve le #Valeur!.

Comprenez-vous comment cela est possible ?
 

Discussions similaires

Statistiques des forums

Discussions
312 167
Messages
2 085 894
Membres
103 021
dernier inscrit
Sergyl75