Bonjour,
Procédure à essayer, à mettre dans le module de Feuil1.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tm&, iR&, nR%, i%, ws As Worksheet
If IsNumeric(Replace(Target.Address(False, False), ":", "")) Then
Set ws = Worksheets("Feuil3")
Application.EnableEvents = False
On Error Resume Next
tm = WorksheetFunction.Match("témoin", Me.Columns(1), 0)
If Err.Number <> 0 Then
Err.Clear
Application.Undo
Me.Cells(100000, 1) = "témoin"
Application.EnableEvents = True
Exit Sub
End If
nR = 100000 - tm: iR = Target.Row
For i = 1 To Abs(nR)
If ws.Cells(iR + i - 1, 1) <> "" Then
Application.Undo
Application.EnableEvents = True
MsgBox "Opération impossible.", vbCritical, "Opération non autorisée"
Exit Sub
End If
Next i
If nR < 0 Then
For i = 1 To Abs(nR)
ws.Rows(iR).Delete
Next i
ElseIf nR > 0 Then
For i = 1 To nR
ws.Rows(iR).Insert
Next i
End If
Me.Cells(tm, 1).ClearContents
Me.Cells(100000, 1) = "témoin"
Application.EnableEvents = True
End If
End Sub
Une fois collée dans le module. Le premier essai sera annulé : il faut un repère pour évaluer s'il s'agit d'une insertion ou d'une suppression, et tant qu'il n'est pas posé on ne peut évaluer et cela déclenche une erreur, mise à profit pour annuler l'opération et placé le repère qui pourra normalement jouer son rôle lors de l'essai suivant.
La procédure ne réagit qu'à l'insertion ou la suppression de lignes entières...
Cordialement.