Private test As Boolean 'déclare la variable test
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range 'déclare la variable cel (CELlule)
If Selection.Count > 1 Or test = True Then Exit Sub 'si selection de plus d'une seule cellule ou si test est vrai, sort de la procédure
If Target.Column <> 2 Or Target.Row < 3 Then Exit Sub 'si changement ailleurs qu'en colonne B ou dans les lignes 1 et 2, sort de la procédure
If Target.Row > 3 Then 'condition 1 : si la ligne est supérieure à 3
For Each cel In Range(Cells(Target.Row - 1, 2), Cells(Target.Row - 1, 40)) 'boucle sur toutes les cellules des colonnes B à AN de la ligne au dessus
If cel.Value = "" Then 'condition 2 : si la cellule est vide
test = True 'définit la variable test
Target.ClearContents 'supprime le "NOM PRENOM" de la colonne B
MsgBox "Vous devez renseigner cette cellule !" 'message
cel.Select 'sélectionne la cellule vide
test = False 'redéfinit la variable test
Exit Sub 'sort de la procédure
End If 'fin de la condition 2
Next cel 'prochaine cellule de la boucle
End If 'fin de la condition 1
If Target.Offset(0, 1) = "" Then 'condition : si la cellule à coté du "NOM PRENOM" édité est vide
Worksheets("Feuil3").Range("A1:AL1").Copy Destination:=Target.Offset(0, 1) 'copie et colle
Target.Offset(0, 1).Select 'sélectionne la cellule à coté
End If 'fin de la condition
End Sub