Recherchev avec deux conditions

Bonjour à tous,

J'ai un document avec deux feuilles, la première est une base de données avec une colonne client, la seconde produit et la troisième valeur réelle. Dans ma deuxième feuille, j'ai une liste des commandes de chaque clients, avec le nom du client, les produits commandés et la valeur payée sachant qu'un crédit peut être fait pour les produits qui sont dans ma base de données et qu'il faut donc les revaloriser.

Je souhaite mettre en place une macro qui me permettra de rajouter dans la 4ème colonne de ma feuille 2 la valeur réelle des produits qui sont dans ma base de données (en d'autre termes, faire un recherche v avec 2 conditions).

Merci d'avance !

Bonjour ETroumi, bienvenu sur le forum.

Tu devrais donner un fichier exemple ou à minima une capture d'écran...

Cela augmentera drastiquement les chances d'obtenir une solution.

A+

Bonjour,

Une solution possible avec ma fonction personnalisée :

RECHERCHEVM(table_matrice ; no_index_colonne; argument1; argument2; ....)

Option Explicit

Function RECHERCHEVM(table As Range, indice As Variant, ParamArray arguments())
    Dim i_lig_max As Double, i_lig As Double, i_arg As Integer, i_match As Integer
    Dim cell As Range
    Dim argument, format_local As String
    Dim booléen As Boolean
    ReDim matching(Range(Application.Caller.Address).Count)
    If Not IsNumeric(indice) Then indice = Evaluate(indice)

    'initialisation
    RECHERCHEVM = CVErr(xlErrNA)

    'contrôle arguments et indice
    If Not UBound(arguments) > -1 Then Exit Function
    If indice > table.Columns.Count Then Exit Function

    'recherche correspondance dans table
    With table
        i_lig_max = Application.Min(.Rows.Count, .Worksheet.UsedRange.Rows.Count - .Row + 1)
        i_match = 0
        For i_lig = 1 To i_lig_max
            For i_arg = 0 To UBound(arguments)
                argument = arguments(i_arg): booléen = False
                If IsDateTime(arguments(i_arg)) And IsObject(arguments(i_arg)) Then
                    Application.FindFormat.Clear
                    Application.FindFormat.NumberFormat = arguments(i_arg).NumberFormat
                    format_local = arguments(i_arg).NumberFormatLocal: format_local = Replace(format_local, "j", "d"): format_local = Replace(format_local, "a", "y")
                    argument = Format(argument, format_local)
                    booléen = True
                End If
                Set cell = .Columns.Rows(i_lig).Find(What:=argument, LookIn:=xlValues, LookAt:=xlWhole, SearchFormat:=booléen)
                If cell Is Nothing And arguments(i_arg) <> Empty Then Exit For
            Next i_arg
            If i_arg > UBound(arguments) And Join(arguments, "") <> Empty Then
                If i_match > UBound(matching) Then Exit For
                matching(i_match) = .Columns(indice).Rows(i_lig)
                i_match = i_match + 1
            End If
        Next i_lig
    End With

    If i_match > 0 Then RECHERCHEVM = matching

End Function

Function IsDateTime(référence) As Boolean
    IsDateTime = False
    On Error Resume Next
    IsDateTime = IsDate(TimeValue(Format(référence, référence.NumberFormat)))
End Function

Merci pour ton retour Gabin37,

Voici la base de données que j'ai.

image

Je veux que les prix à droite soient reportés dans la dernière colonne du tableau ci dessous (il faut bien entendu que ce soit le bon fruit avec le bon client).

image

thev j'aurai volontiers suivi ton conseil mais je suis néophyte et je ne comprends pas le fonctionnement de ton programme...

Rechercher des sujets similaires à "recherchev deux conditions"