Créer une rechercheV avec correspondances multiples [Fermé]

Signaler
Messages postés
11
Date d'inscription
mardi 8 avril 2014
Statut
Membre
Dernière intervention
12 février 2016
-
Messages postés
11
Date d'inscription
mardi 8 avril 2014
Statut
Membre
Dernière intervention
12 février 2016
-
Bonjour à tous,

Je travaille dans la comptabilité et suis souvent amené à faire des rapprochements entre deux bases de données.
Pour gérer les correspondances multiples, ma méthode actuelle est de faire une recherchev et à côté un nb.si qui m'indique s'il y a plusieurs correspondances ou non. S'il y en a plusieurs, je vais les chercher manuellement.

Je voudrais m'épargner ce travail car lorsqu'on travaille sur des bases avec quelques milliers de lignes, ça prend la journée !

J'aimerais donc créer une fonction "RechercheVMultiple" qui me permettrait de faire sortir toutes les correspondances d'un coup !

Pour l'instant j'ai réussi à avoir ça :

https://dl.dropboxusercontent.com/u/36925448/Sans%20titre.jpg

En colonne E il y a la recherche V normale (=RECHERCHEV(D2;A:B;2;0) pour la cellule E2), en colonne F le résultat obtenu avec ma fonction :

Function recherchevmultiple(c)
If Application.CountIf([A:A], c.Value) = 0 Then Resultat = "aucune correspondance"
If Application.CountIf([A:A], c.Value) = 1 Then Resultat = Application.VLookup(c.Value, [A1:B10], 2, 0)
If Application.CountIf([A:A], c.Value) > 1 Then Resultat = "plusieurs correspondances"
recherchevmultiple = Resultat
End Function

Comme vous pouvez le constater, je ne sais pas comment faire pour que ma fonction ait les mêmes arguments qu'une recherchev normale du coup je suis obligé de les rentrer en VBA. Idéalement, il faudrait que RechercheVMultiple demande le critère, la plage, le numéro de colonne à renvoyer avec toujours une correspondance exacte.

Enfin, en colonne G vous trouverez le résultat que je souhaite obtenir avec cette fonction.

Pouvez-vous m'aider ? Ce serait merveilleux !

Merci d'avance.

5 réponses

Messages postés
2539
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
528
Bonjour,

Regarde ici

http://gerard.g.pagesperso-orange.fr/logexl_08.htm#Recherche_avec_résultats_multiples

cela devrait convenir.

Cordialement.
Messages postés
11
Date d'inscription
mardi 8 avril 2014
Statut
Membre
Dernière intervention
12 février 2016

J'y suis presque !

Function RECHERCHEVMULTIPLE(C As Variant, Plage As Range, Colonne As Integer) As Variant
If Application.CountIf(Plage.Columns(1), C.Value) > 0 Then
Dim Resultat As String
Dim Boucle As Integer
For Boucle = 1 To [b]N[/b]
If Plage(Boucle, 1) = C Then
Resultat = Resultat & "/" & Plage(Boucle, Colonne)
End If
Next Boucle
Else
Resultat = "x"
End If
RECHERCHEVMULTIPLE = Right(Resultat, Len(Resultat) - 1)
End Function

La dernière chose : Je voudrais que N soit le rang de la dernière cellule non vide de la première colonne de la plage. Comment faire ?

Merci !
Messages postés
2539
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
528
Bonjour, je viens de lire votre conversation et je suis dans le mm cas.
J'ai copié coller le code mais la fonction ChampRetour n'est pas connue.
Je n'y comprends pas grand chose mais il me faut absolument cette fonction s'il vous plait !!
Messages postés
2539
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
528
Bonjour,

Il est possible que ce code ne fonctionne pas sur Excel 2007 et suivant.
Par contre pas de problème avec Excel 2003.

Cordialement
Messages postés
16214
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
24 septembre 2020
3 036
bonjour,
recherche plusieurs réponses sur un identifiant sans VBA et déjà sur CCM
https://www.cjoint.com/?DDsqrJnnTsa
la méthode jaune n'est pas obligatoire

Nota: Dans la formule matricielle, j'ai précisé le nom de son 'auteur, Jacques Boisgontier, comme il se doit sur les forums...
http://boisgontierjacques.free.fr/

Michel
Messages postés
11
Date d'inscription
mardi 8 avril 2014
Statut
Membre
Dernière intervention
12 février 2016

Finalement j'ai fait ça :

Function OPTIONCELLULE(Cellule1 As Variant, Plage1 As Range, Colonne1 As Integer) As Variant
If Application.CountIf(Plage1.Columns(1), Cellule1.Value) > 0 Then
Dim Resultat1 As String
Dim Boucle1 As Integer
For Boucle1 = 1 To 10000
If Plage1(Boucle1, 1) = Cellule1 Then
Resultat1 = Resultat1 & "/" & Plage1(Boucle1, Colonne1)
End If
Next Boucle1
Else
Resultat1 = "xAucune correspondance"
End If
OPTIONCELLULE = Right(Resultat1, Len(Resultat1) - 1)
End Function

Function OPTIONCHAINE(Cellule2 As Variant, Plage2 As Range, Colonne2 As Integer) As Variant
If Application.CountIf(Plage2.Columns(1), "*" & Cellule2.Value & "*") > 0 Then
Dim Resultat2 As String
Dim Boucle2 As Integer
For Boucle2 = 1 To 10000
Chaine = "*" & Cellule2.Value & "*"
If Plage2(Boucle2, 1) Like Chaine Then
Resultat2 = Resultat2 & "/" & Plage2(Boucle2, Colonne2)
End If
Next Boucle2
Else
Resultat2 = "xAucune correspondance"
End If
OPTIONCHAINE = Right(Resultat2, Len(Resultat2) - 1)
End Function

Function RECHERCHE1POURN(Cellule3 As Variant, Plage3 As Range, Colonne3 As Integer, I As Integer) As Variant
Dim Resultat3 As String
If I = 1 Then
Resultat3 = OPTIONCHAINE(Cellule3, Plage3, Colonne3)
ElseIf I = 0 Then
Resultat3 = OPTIONCELLULE(Cellule3, Plage3, Colonne3)
Else
Resultat3 = "Erreur argument"
End If
RECHERCHE1POURN = Resultat3
End Function


Du coup je peux faire une recherchev multiple avec option recherche d'une chaîne de caractères.
Merci pour votre aide !