Bonjour à tous,
Je sais que c’est un sujet vu et revu mais je n’ai pas réussi à trouver quelque chose qui puisse convenir à mon besoin et les fonctions que j’ai pu trouver en ligne ne donnent rien.
Je suis assez peu calée sous Excel et jusqu’ici mon mari m’aidait beaucoup mais j’ai atteint les limites de ses compétences !
Je cherche une fonction qui puisse, un peu sur le modèle d’un RchV, me permettre de récupérer une donnée sur la base d’au moins deux critères (ou plus…) :
Dans mon fichier, ci-dessous pour l’exemple, j’ai deux onglets :
Dans le premier, des demandes de règlement via un n° de dossier rattachés à un montant : Je peux avoir 2, 3, 4 dossiers identiques pour autant de montants différents, les n° de factures ne permettent pas de discrimination pertinente :
i.e :
ABC20131234 - 150 €
ABC20131234 - 250 €
ABC20131234 - 4890 €
Dans le second onglet, une macro me permet de récupérer dans un système le statut de ces demandes : Réglée / Non réglée ainsi que d’autres informations (N° de virement, date, etc).
Aujourd’hui, j’effectue un RchV sur le n° de dossier qui me renvoie du coup systématiquement la première ligne de mon deuxième onglet sans considération du montant.
ABC20131234 - 150 € - Statut réglé
ABC20131234 - 150 € - Statut réglé
ABC20131234 - 150 € - Statut réglé
Je dois donc derrière passer tous les doublons manuellement pour remonter chacune des informations correcte.
J’aimerais donc une fonction qui me permette globalement de faire, sur l’exemple de mon fichier :
= Rchmulticritère(A2; ‹ Résultats statuts ›!A:A; C2; ‹ Résultats statuts ›!C:C; 3).
3 ici étant du coup l’information dans ma colonne Statut de mon onglet « Résultat statut » mais j’aimerais pouvoir remonter l’information que je souhaite, colonne C, D ou E voire autre selon mon besoin et ma colonne de destination.
J’espère avoir été claire et pouvoir trouver l’aide que je recherche si précieusement sur la question !
Merci d’avance,
Excellente journée,
Ci-dessous, une formule qui répondait justement à mon besoin, mais je ne suis jamais parvenue à la faire fonctionner sur mon fichier… Il me remontait toujours une valeur vide.
Function RECHERCHEVENS(ColonneValeur As Range, critere1 As Variant, PlageRecherche1 As Variant, critere2 As Variant, PlageRecherche2 As Variant, _
Optional Critere3 As Variant, Optional PlageRecherche3 As Variant, _
Optional Critere4 As Variant, Optional PlageRecherche4 As Variant, _
Optional Critere5 As Variant, Optional PlageRecherche5 As Variant)Auteur : www.Indexmatch.fr
Date : 08/2017
fonction de rechercheV avec plusieurs critères : minimum 2 critères / maximum 5 critèresDim 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 RF As Variant 'variable pour le numéro de colonne du critère 3 Dim R3 As Variant 'variable pour le numéro de colonne du critère 3 Dim R4 As Variant 'variable pour le numéro de colonne du critère 4 Dim R5 As Variant 'variable pour le numéro de colonne du critère 5 Dim RS1 As String 'variable pour feuille du critère 1 Dim RS2 As String 'variable pour feuille du critère 2 Dim RSF As String 'variable pour feuille du critère 3 Dim RS3 As String 'variable pour feuille du critère 3 Dim RS4 As String 'variable pour feuille du critère 4 Dim RS5 As String 'variable pour feuille du critère 5 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.Worksheet.Name RS2 = PlageRecherche2.Worksheet.Name RSF = ColonneValeur.Worksheet.Name counter = 0 lastLine = Sheets(RS1).Cells(1, R1).End(xlDown).Row
’ Avec 5 critères -----------
If IsMissing(Critere5) = False And IsMissing(PlageRecherche5) = False Then R3 = PlageRecherche3.Column R4 = PlageRecherche4.Column R5 = PlageRecherche5.Column RS3 = PlageRecherche3.Worksheet.Name RS4 = PlageRecherche4.Worksheet.Name RS5 = PlageRecherche5.Worksheet.Name If critere1 = "" Or critere2 = "" Or Critere3 = "" Or Critere4 = "" Or Critere5 = "" Then RECHERCHEVENS = "#VALEUR" Else Do While counter = lastLine counter = counter + 1 If Sheets(RS1).Cells(counter, R1).Value = critere1 And Sheets(RS2).Cells(counter, R2).Value = critere2 And Sheets(RS3).Cells(counter, R3).Value = Critere3 And _ Sheets(RS4).Cells(counter, R4).Value = Critere4 And Sheets(RS5).Cells(counter, R5).Value = Critere5 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 If End If '4 criteres ----------- If IsMissing(Critere5) = True And IsMissing(PlageRecherche5) = True And IsMissing(Critere4) = False And IsMissing(PlageRecherche4) = False Then R3 = PlageRecherche3.Column 'optional R4 = PlageRecherche4.Column 'optional RS3 = PlageRecherche3.Worksheet.Name 'optional RS4 = PlageRecherche4.Worksheet.Name 'optional If critere1 = "" Or critere2 = "" Or Critere3 = "" Or Critere4 = "" Then RECHERCHEVENS = "#VALEUR" Else Do While counter = lastLine counter = counter + 1 If Sheets(RS1).Cells(counter, R1).Value = critere1 And Sheets(RS2).Cells(counter, R2).Value = critere2 And Sheets(RS3).Cells(counter, R3).Value = Critere3 And _ Sheets(RS4).Cells(counter, R4).Value = Critere4 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 If End If ' Avec 3 critères ----------- If IsMissing(Critere5) = True And IsMissing(PlageRecherche5) = True And IsMissing(Critere4) = True And IsMissing(PlageRecherche4) = True And _ IsMissing(Critere3) = False And IsMissing(PlageRecherche3) = False Then R3 = PlageRecherche3.Column RS3 = PlageRecherche3.Worksheet.Name If critere1 = "" Or critere2 = "" Or Critere3 = "" Then RECHERCHEVENS = "#VALEUR" Else Do While counter = lastLine counter = counter + 1 If Sheets(RS1).Cells(counter, R1).Value = critere1 And Sheets(RS2).Cells(counter, R2).Value = critere2 And Sheets(RS3).Cells(counter, R3).Value = Critere3 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 If End If ' Avec 2 critères ----------- If IsMissing(Critere5) = True And IsMissing(PlageRecherche5) = True And IsMissing(Critere4) = True And IsMissing(PlageRecherche4) = True And _ IsMissing(Critere3) = True And IsMissing(PlageRecherche3) = True Then If critere1 = "" Or critere2 = "" Then RECHERCHEVENS = "#VALEUR" End If Do While counter = 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 If
End Function
Fichier Exemple RchVMC.xlsx (9,9 Ko)