petite question sur "Private Sub worksheet_change" [Résolu]

frustuck

XLDnaute Nouveau
Bonsoir à tous,

Je viens ici pour vous demander un peu d'aide sur mon code vba.

Voici mon code :

Private Sub worksheet_change(ByVal target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A1:A5")

If Not Application.Intersect(KeyCells, Range(target.Address)) Is Nothing Then
If MsgBox("voulez-vous continuer ?", vbYesNo) = vbYes Then
Rows(target.Row).EntireRow.Copy Sheets(2).[A65000].End(xlUp).Offset(1, 0)

MsgBox "la cellule " & target.Offset(0, 1).Value & " a été modifiée et déplacée."
End If


End If

End Sub

J'ai trois questions :
1 - A la place de la partie" Rows(target.Row).EntireRow.Copy", j'aimerais ne copier qu'une partie de cette ligne au lieu de la ligne entière. Est-ce possible ? si oui, auriez-vous une solution ?
par exemple, si je modifie la cellule A12, j'aimerais ne copier sur la ligne 12 que les valeurs des colonnes A, B et C.


2 - Si je pars de l'exemple ci-dessus, je modifie la cellule A12, le code s'execute. Est-ce possible de vider cette celule (A12) sans faire de boucle infinie ? car j'ai fait un test, si je supprime la valeur entrée en A12, le msgbox s'affiche. Solution facile : cliquer sur non... mais il y a-t'il possibilité de faire mieux ? car d'autres personnes seront amenées à travailler sur ce fichier et toutes ne seront pas informées de cette "astuce".

3 - j'aimerais qu'après la ligne " MsgBox "la cellule " & target.Offset(0, 1).Value & " a été modifiée et déplacée."", un mail me soit envoyé. est-ce possible ? si oui, savez-vous comment l'ajouter au code ?


Voilà pour toutes mes questions.
Je vous remercie d'avance pour vos réponses.

je vous souhaite une bonne soirée.
Bien cordialement,

Frustuck
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : petite question sur "Private Sub worksheet_change"

Bonsoir Frustuck, et bienvenue,

Si j'ai bien compris les questions:

1/ Il suffit de modifier le code comme ceci:

Code:
If Not Application.Intersect(KeyCells, Range(target.Address)) Is Nothing Then
       If MsgBox("voulez-vous continuer ?", vbYesNo) = vbYes Then
         RRange("A" & Target.Row & ":C" & Target.Row).Copy Sheets(2).[A65000].End(xlUp).Offset(1, 0)
      MsgBox "la cellule " & target.Offset(0, 1).Value & " a été modifiée et déplacée."
       End If
 End If
2/ De façon générale, pour éviter des redondances, ou pire une boucle infinie, il est indispensable de commencer la macro par la ligne

Code:
Application.EnableEvents = False
Puis de la rétablir à True en fin de procédure. Cette instruction empêche toute relance de la macro si celle-ci effectue des modifications dans les cellules, ce qui le cas ici.

3/ Je ne peux que te conseiller d'enregistrer une macro pour envoyer un mail. Tu pourras ainsi récupérer le code exact.

Cordialement.
 

Discussions similaires