RechercheV (sur plusieurs clés)

Bonjour à tous,

Pour simplifier mon problème je vous adapte mon casse tête avec une situation qui n'est pas réelle :

Je cherche a croiser 2 pages de données avec rechercheV mais avec plusieurs clés.

L'une répertorie toutes les visites de commerciaux et leur client :

-Un client a pu voir plusieurs commerciaux.

L'autre page répertorie les ventes effectuées mais je ne sais pas par qui :

Le soucis c'est que RECHERCHEV ne me sort que le premier commercial qui l'a visité, et je pense, dans l'ordre de la colonne qui a été choisie pour "Table_matrice" car elle est trié du plus vieux au plus ancien.

Cependant, moi je cherche a savoir quels sont les commerciaux qui ont visité mon client afin de TOUS les payer.

Je précise que j'ai 25.000 visites et 3600 ventes. je ne peux faire ceci sur 1 dynamique c'est totalement ilisible.

Ci-joint une matrice pour exemple ainsi que la formule utilisée RECHERCHEV

Un grand merci à vous pour votre temps.

29recherche.xlsx (9.60 Ko)

Bonsoir,

Avec une fonction perso (+ rapide que Recherchev()) conçu pour des fichiers de taille importante.

-sélectionner C2:F13

=rechvmult2(A2:A13;Matable;3)

-Valider avec maj+ctrl+entrée

Avantages d'une fonction perso:

  • Peut être utilisé par une personne ne connaissant pas le VBA
  • Mise à jour automatique si la source est modifiée.

Ceuzin

Bonsoir,

Une solution par macro.

Mag

Sub recherche_globale()

Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, i1, i2, i3, k, kk, z
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Set ws3 = Worksheets(3)

i1 = ws1.Range("A1").End(4).Row
i2 = ws2.Range("A1").End(4).Row

With ws1
    For k = 1 To i1
        z = .Range("a" & k)
         For kk = 2 To i2

                If z = ws2.Range("A" & kk) Then

                ws3.Range("A" & i3 + 2) = z
                ws3.Range("B" & i3 + 2) = .Range("B" & k)
                ws3.Range("C" & i3 + 2) = .Range("C" & k)

                ws3.Range("d" & i3 + 2) = ws2.Range("B" & kk)
                ws3.Range("e" & i3 + 2) = ws2.Range("C" & kk)

                i3 = i3 + 1

                End If
         Next
    Next
End With

End Sub

Merci pour ces 2 reponses enrichissantes.

Je vois ca lundi mais la premiere me semble etre plus adapte

Bonjour à tous

Ma participation.

Bye !

62recherche-v1.xlsm (26.21 Ko)
Rechercher des sujets similaires à "recherchev cles"