Private Sub Worksheet_Change(ByVal Target As Range) 'à l'édition dans une cellule
Dim cel As Range 'déclare la variable cel (CELlule)
Dim pl As Range 'déclare la variable pl (PLage)
'si la colonne éditée n'est pas la colonne B ou
'si la cellule est éffacée, sort de la procédure
If Target.Column <> 2 Or Target.Value = "" Then Exit Sub
'*********************
'détection de doublons
'*********************
'définit la plage pl
Set pl = Range("B1:B" & Range("B65536").End(xlUp).Row)
'condition : si il existe plus d'une seule occurrence dans la plage pl
If Application.WorksheetFunction.CountIf(pl, Target.Value) > 1 Then
'message avec l'adresse de la première occurrance
MsgBox "Erreur : Nº Identique en : " & pl.Find(Target.Value).Address(0, 0)
Target.Select 'sélectionne la cellule éditée
Exit Sub 'sort de la procédure
End If 'fin de la condition
'*******************************
'détection de numéros non suivis
'*******************************
'définit la cellule de la valeur précedente
If Target.Offset(-1, 0).Value <> "" Then 'condition : si la cellule du dessus n'est pas vide
Set cel = Target.Offset(-1, 0) 'définit la cellule precédente cel (la cellule juste au dessus)
Else 'sinon
Set cel = Target.End(xlUp) 'définit la cellule précédente cel (le première cellule non vide rencontrée)
End If 'fin de la condition
'condition : si la valeur de la cellule éditée n'est pas la valeur de la cellule précédente + 1
If CLng(Target) <> CLng(cel) + 1 Then
MsgBox "Erreur : manque le numéro " & CLng(cel) + 1 'message indiquant le numéro manquant
Target.Select 'sélectionne la cellule éditée
End If 'fin de la condition
End Sub