Terminer une macro en appuyant sur DELETE

Bonjour à tous,

Après de nombreuses recherches sur ce forum et ailleurs, je n'ai pas trouvé de solution au problème suivant : j'aimerai que lorsque l'utilisteur du fichier appuie sur la touche {DELETE}, la macro se termine.

En même temps que j'écris, je me dis que tout ça n'est pas très clair donc voici ce que j'ai déjà écrit :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 6 Then

If ActiveCell.Offset(-1, 1).Value <> "testmail" Then

MsgBox "Envoi impossible, veuillez ressaisir la date et" & Chr(13) & " appuyez sur la touche 'Entrée' pour valider" & Chr(13) & " (Attention, Outlook doit être ouvert)", Title:="Erreur de validation !"

Exit Sub

End If

If MsgBox("Envoyer un mail à " & ActiveCell.Offset(-1, -4).Value & " " & ActiveCell.Offset(-1, -3).Value & " ?", vbYesNo, "Demande de confirmation") = vbYes Then

Call envoimail

End If

End If

End Sub

Tout fonctionne bien (envoi d'un mail par procédure appelée "envoimail" lorsque l'utilisateur modifie une valeur dans la colonne 6) sauf que j'aimerai que si une valeur de cette 6ème colonne est supprimée, il ne se passe plus rien (sauf la suppression de la valeur de la cellule bien entendu). J'ai essayé avec "application.onkey" (mal sans doute) mais ca ne fonctionne pas comme je veux.

Quelqu'un aurait-il une solution svp ?

Merci d'avance.

non testé, mais j'imagine ceci :

If Target.Column = 6 Then
If ActiveCell.Value ="" Then Exit Sub

Bonjour Steelson,

Merci pour cette réponse. J'avais déjà pensé à la solution que tu proposes mais, malheureusement, elle ne fonctionne que si on supprimme et du coup ca ne fonctionne plus quand il y a une nouvelle saisie ou une modification de cellule en colonne 6. Moi ce que je souhaite c'est que la macro tourne si on modifie ou on ajoute une date en colonne 6 mais que rien ne se passe si on supprimme une valeur dans cette même colonne.

Pour que ce soit plus clair à comprendre, j'ajoute ici un extrait du fichier concerné

22envoi-mail-auto.zip (30.30 Ko)

Merci

et ceci ?

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 6 Then

If ActiveCell.Offset(-1, 0).Value = "" Then
    MsgBox "au revoir !"
    Exit Sub
End If

If ActiveCell.Offset(-1, 1).Value <> "testmail" Then

    MsgBox "Envoi impossible, veuillez ressaisir la date et" & Chr(13) & " appuyez sur la touche 'Entrée' pour valider" & Chr(13) & " (Attention, Outlook doit être ouvert)", Title:="Erreur de validation !"

    Exit Sub

End If

If MsgBox("Envoyer un mail à " & ActiveCell.Offset(-1, -4).Value & " " & ActiveCell.Offset(-1, -3).Value & " ?", vbYesNo, "Demande de confirmation") = vbYes Then

    Call envoimail

End If

End If

End Sub

Hélas ca ne fonctionne pas non plus puisque rien n'empeche qu'il y ait une valeur dans la cellule au-dessus de celle qu'on supprime et que, avec le "Worksheet_Change", la macro "envoimail" se déclenche dès qu'on appuie sur la touche "Suppr" (sans changer de cellule).

Pour moi la solution (théorique, je n'y arrive pas en pratique) est de terminer toute la procédure si on appuie sur la touche "Suppr", j'ai essayé avec application.onkey {DELETE} mais sans réussite ...

Help !!!

Le problème est que tu utilises Worksheet_Change et qu'il faudrait utiliser Worksheet_BeforeChange !

et éviter les offset(-1,x)

Worksheet_BeforeChange ? Je ne connais pas. Je n'ai pas ça dans ma liste mais au boulot on est encore en excel 2003, ceci expliquant peut-être cela ! Et pourquoi éviter les offset ? N'y a-t-il aucun moyen d'affecter une action type "Exit Sub" lorsqu'on appuie sur une touche du clavier ?

Désolé, j'ai d'ailleurs sans doute fait une erreur dans ma proposition !

If Target.Value = "" Then
    MsgBox "au revoir !"
    Exit Sub
End If

Je n'ai pas le temps d etster là tout de suite, mais je ne comprends pas pourquoi cela ne fonctionnerait pas.

WOUHOU !!! Avec cette nouvelle proposition ca marche !!!

T'es un chef Steelson, merci beaucoup !!

Rechercher des sujets similaires à "terminer macro appuyant delete"