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+
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 FunctionMerci pour ton retour Gabin37,
Voici la base de données que j'ai.
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).
thev j'aurai volontiers suivi ton conseil mais je suis néophyte et je ne comprends pas le fonctionnement de ton programme...