Le problème de Objet Requis vient du fait que lorsque tu déplaces d'une ligne par drag and drop, TestRange est remplacé par la cellule que tu déplaces, et le VBA en perd la trace. C'est toujours un objet Range, mais VBA ne sait plus l'utiliser. A cela s'ajoute le fait que lors d'un déplacement, il y a deux "Change" coup sur coup, celui de la ligne qui est déplacée puis celui de la ligne sur laquelle tu atterris. Il faut donc désactiver le EnableEvents et passer par une gestion d'erreur pour le remettre.
Pour pallier ce problème et éviter la suppression en cas de déplacement par drag and drop, je propose donc un test sur le numéro de la ligne d'arrivée et une capture de l'erreur au travers du code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo Catch If Not TestRange Is Nothing And Target.Row + 1 <> TestRow Then Application.EnableEvents = False If Target.Rows.Count = 1 And Target.Count = 16384 Then If TestRow > TestRange.Row Or (TestRow = TestRange.Row And Target(8) = "") Then If SheetExists(Value) Then MsgBox "Suppression" 'Worksheets(Value).Delete End If End If End If Catch: Application.EnableEvents = True End Sub
Dans ce cas, je ne vois pas comment éviter la gestion d'erreur avec un On Error car, à ma connaissance, il n'y a pas moyen de tester par code le problème de Objet requis.
Partager