Bonjour,
Excel est assez pauvre en fonction de manipulations de chaînes un peu sophistiquées. On y parvient par des combinaisons plus ou moins compliquées de fonctions texte existantes, éventuellement en passant par des résultats-relais... mais c'est un domaine dans lequel VBA permet de bâtir des fonctions personnalisées plus facile à construire et à utiliser que les combinaisons évoquées.
Donc :
Function SUBSTITARTREF(liste As String, rf As Range, art As Range)
Dim tbra, a%, i%
Application.Volatile
If art.Cells.Count < rf.Cells.Count Then Exit Function
tbra = Split(Trim(liste), ";")
For a = 0 To UBound(tbra)
For i = 1 To rf.Cells.Count
If rf.Cells(i) = tbra(a) Then
tbra(a) = art.Cells(i)
Exit For
End If
Next i
If i > rf.Cells.Count Then tbra(a) = "?"
Next a
SUBSTITARTREF = Join(tbra, ";")
End Function
Cette fonction est à placer dans un module standard. Et elle s'utilise ensuite comme toute autre fonction d'Excel.
Comme toute autre fonction il faut lui fournir les paramètres de la recherche à opérer séparés par des point-virgules :
la "liste" des références recherchée sous forme de chaîne (éléments séparés par , la plage des références parmi lesquelles rechercher, la plage des articles correspondant aux références.
Soit: =SUBSTITARTREF(D4;A2:A8;B2:B8)
et la formule renvoie le résultat demandé.
Cordialement.