Macro pour créer une fonction de recherche avec 2 critères

Bonjour à tous, j'ai besoin de votre aide.

Je souhaite faire une recherche et renvoie d'un valeur en fonction de plusieurs critères, j'utilise la fonction INDEX EQUIV mais cela ralentit énormément la feuille de calcul.

Du coup j'ai cherché un peu sur internet et j'ai trouvé ce code pour créer une fonction mais ça ne fonctionne pas pour moi:

Function RECHERCHEVENS(ColonneValeur As Range, Critere1 As Variant, PlageRecherche1 As Variant, Critere2 As Variant, PlageRecherche2 As Variant)


'fonction de rechercheV avec plusieurs critères : 2 critères

Dim R1 As Variant 'variable pour le numéro de colonne du critère 1
Dim R2 As Variant 'variable pour le numéro de colonne du critère 2


Dim RS1 As String 'variable pour feuille du critère 1
Dim RS2 As String 'variable pour feuille du critère 2


Dim counter As Integer 'variable de compteur
Dim lastLine As Long 'variable pour définir la dernière ligne à traiter

R1 = PlageRecherche1.Column
R2 = PlageRecherche2.Column
RF = ColonneValeur.Column

RS1 = PlageRecherche1.WorksheetName
RS2 = PlageRecherche2.Worksheet.Name
RSF = ColonneValeur.Worksheet.Name

counter = 0
lastLine = Sheets(RS1).Cells(PlageRecherche1.Row, R1).End(xlDown).Row

If Critere1 = "" Or Critere2 = "" Then

End If

Do While counter & lt = lastLine

counter = counter + 1

If Sheets(RS1).Cells(counter, R1).Value = Critere1 And Sheets(RS2).Cells(counter, R2).Value = Critere2 Then

If IsError(Sheets(RSF).Cells(counter, RF).Value) = True Then

RECHERCHEVENS = "#N/A"

Else

RECHERCHEVENS = Sheets(RSF).Cells(counter, RF).Value

End If

End If

Loop

End Function

Je souhaite d'abord comprendre comment ça fonctionne ce code? Et s'il y a des erreurs ou il faut le "personnaliser" pour chaque utilisation?

par avance merci

bonsoir,

une proposition de corrections (syntaxe et agencement des instructions correspondant à la logique du code, j'ai pas essayé d'améliorer la fonction)

Function RECHERCHEVENS(ColonneValeur As Range, Critere1 As Variant, PlageRecherche1 As Variant, Critere2 As Variant, PlageRecherche2 As Variant)
    'fonction de rechercheV avec plusieurs critères : 2 critères
    Dim R1 As Variant 'variable pour le numéro de colonne du critère 1
    Dim R2 As Variant 'variable pour le numéro de colonne du critère 2
    Dim RS1 As String 'variable pour feuille du critère 1
    Dim RS2 As String 'variable pour feuille du critère 2
    Dim counter As Long 'variable de compteur
    Dim lastLine As Long 'variable pour définir la dernière ligne à traiter

    R1 = PlageRecherche1.Column
    R2 = PlageRecherche2.Column
    RF = ColonneValeur.Column
    RS1 = PlageRecherche1.Worksheet.Name
    RS2 = PlageRecherche2.Worksheet.Name
    RSF = ColonneValeur.Worksheet.Name

    counter = PlageRecherche1.Row
    lastLine = Sheets(RS1).Cells(PlageRecherche1.Row, R1).End(xlDown).Row
    If Critere1 = "" Or Critere2 = "" Then 'les 2 critères doivent être non vides, sinon erreur
        RECHERCHEVENS = CVErr(xlErrRef)
        Exit Function
    End If
    Do While counter <= lastLine
        If Sheets(RS1).Cells(counter, R1).Value = Critere1 And Sheets(RS2).Cells(counter, R2).Value = Critere2 Then
            If IsError(Sheets(RSF).Cells(counter, RF).Value) = True Then
                RECHERCHEVENS = CVErr(xlErrNA) 'erreur dans la colonne réponse
            Else
                RECHERCHEVENS = Sheets(RSF).Cells(counter, RF).Value
            End If
            Exit Function 'correspondance trouvée on arrête la recherche
        End If
        counter = counter + 1
    Loop
    RECHERCHEVENS = CVErr(xlErrNA) ' pas trouvé de donnée correspondant aux critères
End Function

ps: merci à l'avenir d'utiliser le bouton </> pour mettre du code dans ton message

Merci pour ta réponse h2so4 et merci pour les corrections.

Désolé pour le code direct dans le message.

J'ai testé mais ça ne fonctionne pas j'ai un #VALEUR! qui s'affiche comme résultat.

Des idées??

bonjour,

comme le code fonctionne chez moi, c'est lié à tes données ou à la manière dont tu utilises la fonction.

RECHERCHEVENS(ColonneValeur As Range, Critere1 As Variant, PlageRecherche1 As Variant, Critere2 As Variant, PlageRecherche2 As Variant)

colonnevaleur : est une cellule (ou plusieurs cellules) de la colonne dans laquelle se trouve la valeur à afficher

critere1 est la valeur du premier critère à satisfaire

plagerecherche1 colonne dans laquelle on cherche le critère 1

critere2 est la valeur du second critère à satisfaire

plagerecherche2 colonne dans laquelle on cherche le critère 2

plagerecherche1, plagerecherche2 et les données de la colonne valeur doivent se trouver dans les mêmes numéros de lignes.

Si cela ne fonctionne toujours pas, merci de mettre un fichier dans lequel tu as pu reproduire l'erreur.

Bonjour,

oui j'ai essayé dans le fichier :

la formule dans la colonne G : =RECHERCHEVENS(D:D;B3;B:B;"paul";E:E) ==> ne fonctionne pas

la formule dans la colonne H : =INDEX(D:D;EQUIV(1;(B:B=B3)*(E:E="paul");0)) ==> fonctionne

bonjour,

au temps pour moi, j'avais ajouté une modification cosmétique qui provoque l'erreur #valeur

le code ci-dessus est corrigé, ainsi que dans le fichier joint. Je dois ajouter que le tableau ne peut pas contenir de cellules vides dans la colonne critère 1 (si ce n'est à la fin)

Super ça marche parfaitement.

Une question j'ai essayé de l'utiliser pour un autre fichier mais ça ne marche pas (je ne peux pas partager ce fichier là) j'ai essayé de regarder rapidement le code mais c'est que du générique à mon avis pas besoin de l'adapter pour un autre fichier.

Et merci encore.

Bonjour,

difficile de proposer quoi que ce soit sur base de la seule info « ça ne marche pas »

Bonjour,

Effectivement MEA CULPA.

J'ai un retour #N/A pour ma formule. Mais bon ça marche sur mon 1er fichier don c'est bon.

Merci

Bonjour

#NA signifie que la fonction n'a pas trouvé de donnée correspondant aux critères.

à vérifier.

pas de cellules vides au début ou dans la colonne plagederecherche1, (il peut y en avoir à la fin), car une cellule vide arrête la recherche.

vérifier les paramètres d'appel de la fonction.

Merci je vais vérifier ça

Rechercher des sujets similaires à "macro creer fonction recherche criteres"