1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range, doublon As Range
col = 3 ' la colonne à contrôler
couleurIndex = 16 ' la couleur autorisée
For Each cell In Target.Cells ' parcourt toutes les cellules au cas ou plusieurs cellules copiées
If cell.Column = col Then ' seulement dans la colonne en question
If cell = "" Then
If cell.NoteText <> "" Then cell.NoteText ""
Else ' seulement si non vide
If cell.Interior.ColorIndex = couleurIndex Then
' si couleur autorisée, ne rien faire
If cell.NoteText <> "" Then cell.NoteText ""
Else ' si couleur non autorisée
existe = False ' autre valeur identique de couleur non autorisée
' 1ere recherche de la valeur exacte dans la plage
Set doublon = Union(Me.Range(Me.Cells(1, col), cell.Offset(-1, 0)), _
Me.Range(Me.Cells(65536, col), cell.Offset(1, 0))).Find(What:=cell.Text, LookAt:=xlWhole, MatchCase:=False)
If Not doublon Is Nothing Then ' si autre valeur identique trouvée
' parcourt cellule par cellule de la colonne
For i = Me.UsedRange.Row To Me.UsedRange.Rows.Count + Me.UsedRange.Row - 1
' vérifie la valeur, la couleur dans autre cellule
If Me.Cells(i, col) = cell And Me.Cells(i, col).Interior.ColorIndex <> couleurIndex And i <> cell.Row Then
' affiche un commentaire
cell.NoteText "Cette valeur existe déjà non grisée"
existe = True
Exit For
End If
Next i
End If
' si rien trouvé, efface commentaire
If existe = False Then If cell.NoteText <> "" Then cell.NoteText ""
End If
End If
End If
Next cell
End Sub |
Partager