Bonjour Peufpeuf et bienvenu, bonjour le forum,
Une petite usine à gaz en pièce jointe. Il faut toujours commencer par sélectionner une autre cellule que celles de la plage A3:A5. D'où le code dans les composants ThisWorkbook :
Option Explicit
Private Sub Workbook_Open() 'à l'ouverture du classeur
Worksheets("Feuil1").Activate 'active l'onglet "Feuil1"
ActiveSheet.Range("A1").Select 'sélectionne la cellule A1 de l'onglet actif
End Sub
et Feuil1(Feuil1) qui fait le job :
Option Explicit 'oblige a déclarer toutes les variables
Private AV As String 'déclare la variable AV (Ancienne Valeur)
Private TEST As Boolean 'déclare la variable TEST
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'au changement de la cellule active
If Not Application.Intersect(Target, Range("A3:A5")) Is Nothing Then AV = Target.Value 'si la cellule active se trouve dan la plage A3:A5 récupère sa valeur dans la variable AV
End Sub
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim R As Range 'déclare la variable R (Recherche)
If TEST = True Then Exit Sub 'si TEST est [Vrai], sort de la procédure
If Application.Intersect(Target, Range("A3:A5")) Is Nothing Then Exit Sub 'si le chaingement a lieu ailleurs que dans la plage A3:A5, sort de la procédure
TEST = True 'définit la variable TEST
Set R = Columns(9).Find(Target.Value, , xlValues, xlWhole) 'définit la recherhe R
Target.Interior.ColorIndex = R.Interior.ColorIndex 'colore la cellule modifiée de la même couleur de la première occurrence trouvée de la recherche R
With Target.Validation 'prend en compte la validation de données de la cellule modifiée
.Delete 'supprime la validation de données
Target.Value = AV 'remet l'ancienne valeur dans la cellule modifiée
.Add xlValidateList, Formula1:="=$I$3:$I$5" 'ajoute la liste de validation de données
End With 'fin de la prise en compte de la la validation de données de la cellule modifiée
TEST = False 'redéfinit la variable TEST
End Sub