Bonjour,
code commenté :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, c1 As Range, result
Dim lig As Long, col As Long, i As Long
If Not Intersect(Target, [A3:C3]) Is Nothing Then
' si la cellule modifiée est A3 ou C3
' rechercher Z dans la colonne H (début du tableau de z
Set c = [H:H].Find([C3].Value, , xlValues, xlWhole)
'ligne de X
lig = Range(c, c.End(xlDown)).Find([A3].Value, , xlValues, xlWhole).Row - c.Row
' colonne de Y
col = Range(c, c.End(xlToRight)).Find([B3].Value, , xlValues, xlWhole).Column - c.Column
' result = intersection ligne X,colonne Y, du tableau Z qu'on éclate dans result avec "," comme séparateur
result = Split(c.Offset(lig, col), ",")
Application.EnableEvents = False
' nettoyage de la plage résultat
[A5].CurrentRegion.Offset(1).Clear
For i = 0 To UBound(result)
' rechercher chaque élément de result (Plaques,Tubes,...) dans E
Set c = [E:E].Find(result(i), , xlValues, xlWhole)
If Not c Is Nothing Then
'si trouvé
' ligne libre suivante plage résultat
lig = 5 + [A5].CurrentRegion.Rows.Count
' plage à copier = plage fusionnée en E élargie à 2 colonnes
Set c = c.MergeArea.Resize(, 2)
' mettre en A:B valeurs de E:F, encadrer
With Cells(lig, 1).Resize(c.Rows.Count, c.Columns.Count)
.Value = c.Value
.Borders.LineStyle = xlContinuous
.Resize(, 1).Borders(xlInsideHorizontal).LineStyle = xlNone
End With
End If
'élément suivant
Next i
Application.EnableEvents = True
End If
End Sub
et n'hésite pas à te servir de F1 pour avoir l'explication des fonctions. L'aide excel est très bien faite et complète.
eric