Bonjour et bonne année,
Le sujet a déjà été traité sur ce post :
https://www.excel-downloads.com/threads/interdire-la-saisie-dans-une-cellule-non-vide.50110/
Toutefois, je n'arrive pas à mes fins pour adapter mon code avec le Worksheet_Change.
Dans le cadre d'une saisie de clé primaire alphanumérique, je voudrais verrouiller (sans utiliser le verrouillage de la feuille) les cellules de la colonne A qui ont déjà des données encodées (N'autoriser l'encodage que dans les cellules vides).
L'idéal aurait d'avoir quand même la possibilité de déverrouiller et de reverrouiller en cas de faute de frappe avec un bouton par exemple (ou case à cocher).
J'ai déjà le code suivant qui détecte et élimine automatiquement les doublons (indispensable pour une clé primaire).
A noter qu'en outre j'utilise la validation de données avec cette formule dans la colonne A : =ET(NBCAR(A2)<11;B2<>""). Car je veux limiter le nombre de caractères à 10 et n'accepter une valeur que si une donnée est déjà présente dans la cellule contiguë (B2)
Comment s'y prendre ?
Merci pour toute idée....
Le sujet a déjà été traité sur ce post :
https://www.excel-downloads.com/threads/interdire-la-saisie-dans-une-cellule-non-vide.50110/
Toutefois, je n'arrive pas à mes fins pour adapter mon code avec le Worksheet_Change.
Dans le cadre d'une saisie de clé primaire alphanumérique, je voudrais verrouiller (sans utiliser le verrouillage de la feuille) les cellules de la colonne A qui ont déjà des données encodées (N'autoriser l'encodage que dans les cellules vides).
L'idéal aurait d'avoir quand même la possibilité de déverrouiller et de reverrouiller en cas de faute de frappe avec un bouton par exemple (ou case à cocher).
J'ai déjà le code suivant qui détecte et élimine automatiquement les doublons (indispensable pour une clé primaire).
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim Colonne As Integer
Dim Adresse As String
Application.EnableEvents = False
'On sort si plus d'une cellule a été modifiée
If Target.Count > 1 Then Exit Sub
'On sort si la cellule modifiée est vide
If Target.Value = "" Then Exit Sub
'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
Colonne = 1
'Vérifie si c'est la colonne cible a été modifiée
If Target.Column = Colonne Then
'Recherche si la nouvelle donnée existe déjà dans la colonne.
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
'signifie qu'il y a un doublon dans la colonne.
If Adresse <> Target.Address Then
MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
'Suppression de la donnée
Target.Value = ""
Target.Select
ElseIf Target.Value <> "" Then MsgBox "ne pas modifier un clé existante"
End If
End If
Application.EnableEvents = True
End Sub
A noter qu'en outre j'utilise la validation de données avec cette formule dans la colonne A : =ET(NBCAR(A2)<11;B2<>""). Car je veux limiter le nombre de caractères à 10 et n'accepter une valeur que si une donnée est déjà présente dans la cellule contiguë (B2)
Comment s'y prendre ?
Merci pour toute idée....