Private Sub Worksheet_Change(ByVal Target As Range)
' Déclencher la macro à chaque changement sur cette onglet : "Feuil1"
Dim ColonneFeuil1 As Integer
'Cette variable indiquera le numéro de la colonne où écrire la valeur n°...
'La variable "ColonneFeuil1" contiendra des nombres entier inclus entre -32 768 et 32 767
'Sur les version Excel inférieur ou égale à Excel 2003, le nombre maximum de colonne est de 256
'Sur les version Excel 2007 et 2010, le nombre maximum de colonne est de 16 384
'Donc avec 32 767 on a la marge lol
Dim DernièreColonneFeuil2 As Integer
'Cette variable contiendra le numéro de la colonne contenant la dernière "Valeur"
'Permis ainsi d'adapter automatiquement la macro aux nombre de colonne à traiter.
'La variable "DernièreColonneFeuil2" contiendra des nombres entier inclus entre -32 768 et 32 767
'La macro est situé sur l'onglet "Feuil1", donc si on ne précise rien dans le code, cela sous entend
'qu'on travail sur l'onglet "Feuil1".
On Error GoTo fin
'En cas d'erreur, aller à la balise "fin" situé à la fin de la macro
If Target.Address = "$A$6" Then
'Si l'utilisateur effectue une saisie dans la cellule A6 de l'onglet "Feuil1", via la liste de validation
'Alors effectuer la macro ci-dessous, sinon ce rendre directement à la ligne de code : "End If"
If [A6] = "" Then [A6].Interior.ColorIndex = xlNone
'Si la cellule A6 de l'onglet "Feuil1" est vide, alors la colorier la cellule A6 en blanc
If [A6] = "Valeur rouge" Then [A6].Interior.ColorIndex = 3
'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur rouge", alors la colorier en rouge (couleur n°3)
If [A6] = "Valeur bleu" Then [A6].Interior.ColorIndex = 5
'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur bleu", alors la colorier en rouge (couleur n°5)
If [A6] = "Valeur verte" Then [A6].Interior.ColorIndex = 4
'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur verte", alors la colorier en vert (couleur n°4)
If [A6] = "Valeur blanche" Then [A6].Interior.ColorIndex = xlNone
'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur blanche", alors la colorier en blanc (couleur : aucune couleur)
Range([C6:C8], [C6:C8].End(xlToRight)).ClearContents
'Onglet "Feuil1" cellules C6 à C8 + toutes les cellules pleines situés à leurs droites => effacer le contenu
With Sheets("Feuil2")
'Grâce à cette ligne de code au lieu d'écrire 'Sheets("Feuil2")' devant chaque élèment, il suffira de mettre un point
'pour qu'excel sache qu'on parle de cet onglet. Et cela jusqu'à la ligne de code "End With"
DernièreColonneFeuil2 = .[IV6].End(xlToLeft).Column + 1
'Se mettre sur la dernière colonne (si tu utilise une version d'Excel inférieur ou égale à 2003), ligne 6
'Et à partir d'ici se déplacer vers la gauche à la recherche de la première cellule pleine
'Ajouter 1 à la valeur ainsi trouvé (pour avoir la première cellule VIDE)
'Et mettre cette valeur dans la variable "DernièreColonneFeuil2"
ColonneFeuil1 = 3
'Mettre 3 dans la variable "ColonneFeuil1"
For i = 1 To DernièreColonneFeuil2
'Boucle : exécuter le code situé entre cette ligne et la ligne "Next i"
'autant de fois qu'il y a de colonnes rempli (ligne 5-6-7), sur l'onglet "Feuil2"
If .Cells(5, i).Interior.ColorIndex = [A6].Interior.ColorIndex Then
'Si la couleur de la cellule ligne 5, colonne i, sur l'onglet "Feuil2" est identique
'à la couleur de la cellule A6 onglet "Feuil1" alors exécuter le code situé ci-dessous
'jusqu'à la ligne de code "End If", sinon aller directement à cette ligne
Cells(6, ColonneFeuil1) = .Cells(5, i)
'Ecrire dans la cellule ligne 6, colonne : valeur contenu dans la variable "ColonneFeuil1" (3 la première fois)
'de l'onglet "Feuil1", la valeur situé dans
'la cellule ligne 5, colonne : valeur contenu dans la variable "i" de l'onglet "Feuil2" car il y un "point"
'situé juste devant "Cells"
Cells(7, ColonneFeuil1) = .Cells(6, i)
'idem que si dessus mais pour les lignes 7 de l'onglet "Feuil1" et 6 de l'onglet "Feuil2"
Cells(8, ColonneFeuil1) = .Cells(7, i)
'idem ...
ColonneFeuil1 = ColonneFeuil1 + 1
'incrémenter la variable ColonneFeuil1 de 1
'ainsi les nouvelles données qui seront trouvées lors de la prochaine exécution de cette boucle
'seront copier dans la colonne suivante
End If
Next i
End With
End If
'Balise "fin"
fin:
End Sub