Bonjour @scalaze,
J’ai peut-être une solution qui pourrait te convenir.
On garde la méthode de suppression des doublons via le « MsgBox » et on garde aussi la méthode “Référence non attendue” via aussi le « MsgBox » que je ne réexplique pas.
Donc pour qu’il n’y ai pas de cellule vide dans la colonne « C » une macro en complément dans la « Feuil1 » qui positionne automatiquement la première cellule vide a partir la cellule « C4 … » et ainsi de suite en fonction des valeurs entrées dans la colonne « C ».
Macro de la « Feuil1 »
Public DOUBLON As Boolean
Const sRange As String = "$C$4:C$65000"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim PlageB As Range
Dim lgnC As Long
If DOUBLON Then Exit Sub
If Not Application.Intersect(Target, Columns("C")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
If Application.CountIf(Range("C:C"), Target) > 1 Then
MsgBox ("Attention DOUBLON" & Chr(10) & "Ce code existe déjà !" & Chr(10) & _
"Il sera automatiquement supprimé !")
DOUBLON = True
Target.ClearContents
DOUBLON = False
End If
End If
Set PlageB = Range("B4", Range("B" & Rows.Count).End(xlUp))
For lgnC = Range("C" & Rows.Count).End(xlUp).Row To 4 Step -1
If Application.CountIf(PlageB, Range("C" & lgnC)) = 0 Then
If MsgBox("Référence non attendue" & Chr(10) & "Merci de vérifier" & Chr(10) & _
"Cette Référence sera automatiquement supprimée !") = vbOK Then
Range("C" & lgnC).ClearContents
End If
End If
Next lgnC
End Sub
Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim nb As Double
If Not Intersect(Target, Range(sRange)) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
nb = Application.CountA(Range(sRange))
Select Case nb
Case 0
Cells(4, 3).Select
Case 11
Application.EnableEvents = True
Exit Sub
Case Else
Cells(4, 3).Offset(nb, 0).Select
End Select
End If
Application.EnableEvents = True
End Sub
Si tu as besoin d’effacer les valeurs de la colonne « C », j’ai ajouté une macro associée au bouton « Effacer Col C »
La macro « Effacer Col C »
Sub Effacer_Col_C()
Application.ScreenUpdating = False
With Range("C4", Range("C" & Rows.Count).End(xlUp))
.ClearContents
End With
End Sub
Ton fichier en retour ICI==> Comparaison Valeur 2 colonnes V4.xlsm (365,4 Ko)
Cordialement.