Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.
 

frustuck

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

Bonjour,

Excusez mon retard.
Je vous remercie pour votre réponse cette dernière m'a beaucoup aidé !!!
Mon code fonctionne maintenant sans boucle infinie.

Bonne journée.
Cdt,
Frustuck
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…