Re,
En pièce jointe ton fichier modifié. J'ai remplacé le tableau [ListObject] par des cellules normales car sinon je ne sais pas gérer.
Le code :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable OS (Onglet Source)
Dim TL() As Variant 'déclare la variable OS (Onglet Source)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
If Target.Address <> "$D$14" Then Exit Sub 'si la changement a lieu ailleurs qu'en D14, sort de la procédure
Set OS = Worksheets("Ressources") 'définit l'onglet OS
Range("I6").CurrentRegion.Offset(1, 0).ClearContents 'éfface d'éventuelle anciennes données
TV = OS.Range("A7").CurrentRegion 'définit la tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV
K = 1 'initialise la variable K
For J = 1 To NC 'boucle 1 sur toutes les colonne du tableau des valeurs
If TV(1, J) = Target.Value Then 'condition 1 : si la données ligne 1 colonne J de TV est égale à D14
For L = 3 To NL 'boucle 2 : sur toutes les lignes du tableau ds valeurs TV (en partant de la troisième)
If TV(L, J) <> "" Then 'condition 2 : si la donnée ligne L colonne J de TV n'est pas vide
ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes TL(2 lignes, K colonnes)
TL(1, K) = TV(2, J) 'récupère l'équipement dans la ligne 1 de TL
TL(2, K) = TV(L, J) 'récupère la maintenance dans la ligne 2 de TL
K = K + 1 'incrément K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition 2
Next L 'prochaine ligne de la boucle 2
End If 'fin de la condition 1
Next J 'prochaine colonne J
'si K est supérieure à 1, renvoie dans la cellule I7 redimensionnée le tableau TL transposé
If K > 1 Then Range("I7").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End Sub
Le fichier :