Bonjour le fil, bonjour le forum,
Une proposition VBA avec le code ci-dessous :
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
If Target.Address <> "$H$1" Then Exit Sub 'si la changement a lieun ailleurs que dans H1, sort de la procédure
Set PL = Range("H2:H6") 'définit la plage PL
PL.ClearContents 'efface le contenu de la plage PL
Range("A3:F13").Interior.ColorIndex = xlNone 'supprime les coleurs dans la plage A3:F13
If Target.Value = "" Then Exit Sub 'si H1 est effacée, sort de la procédure
Set R = Columns(1).Find(Target.Value, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur entière de H 1 dans la colonne 1)
If Not R Is Nothing Then 'condition 1 : s'il existe au moins une occurrence trouvée
LI = R.Row 'définit la ligne LI de la première occurrence trouvée
For J = 2 To 6 'boucle sur les colonne 2 à 6 (=B à F)
Cells(J, "H").Value = IIf(Cells(LI, J).Value = "", 0, Cells(LI, J).Value) 'récupère dans la cellule ligne J colonne H, la valeur de la cellule ligne LI, colonne J
Next J 'prochaine colonne de la boucle
For Each CEL In PL 'boucle 1 : sur toutes les cellules CEl de la plage PL
For I = 3 To 13 'boucle 2 : sur toutes les lignes I de 3 a 13
For J = 1 To 6 'boucle 3 sur toutes les colonne J de 1 à 6
If Not Cells(I, J) = 0 Then 'condition 2 : si la cellule ligne I colonne J n'est pas nulle
If Cells(I, J) = CEL.Value Then Cells(I, J).Interior.ColorIndex = 6 'colore en jaune la cellule ligne I colonne J si elle est égale à la cellule CEL
End If 'fin de la condition 2
Next J 'prochaine colonne de la boucle 3
Next I 'prochaine ligne de la boucle 2
Next CEL 'prochaine cellule de la boucle 1
R.Interior.ColorIndex = 3 'colore en rouge la cellule de la première occurence trouvée
End If 'fin de la condition
End Sub
Le fichier :