Macro ou code VBA

Olyxier

XLDnaute Occasionnel
Bonjour le Forum

Voici un code que l'on ma donnée sur le Forum il marche très bien. mais je souhaite le compléter.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$DL$54" Then Exit Sub
Set ligne = ActiveSheet.Columns(107).Find(Target)
Set cop = ActiveSheet.Range(ActiveSheet.Cells(ligne.Row, 107), ActiveSheet.Cells(ligne.Row, 113))
cop.Copy ActiveSheet.Range(Target.Address)
End Sub


car je voudrais qu'il soit possible de l'effectuer sur plusieurs cellules voilà donc mon essai mais ça marche pas et après plusieurs changement je plante toujours
je n'ai pas non plus réussi à le transformer en macros

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> ("$DK$49:$DK$52") Then Exit Sub
Set ligne = ActiveSheet.Columns(107).Find(Target)
Set cop = ActiveSheet.Range(ActiveSheet.Cells(ligne.Row, 107), ActiveSheet.Cells(ligne.Row, 113))
cop.Copy ActiveSheet.Range(Target.Address)
End Sub

merci pour votre aide précieuse car là j'en ai vraiment besoin
et Bonne soirée
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro ou code VBA

Bonjour Olyxier, bonjour le forum,

Quand on veut étendre l'événement Change a plus d'une cellule il ne faut plus utiliser la propriété Address. Essaie comme ça :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("$DK$49:$DK$52")) Is Nothing Then Exit Sub
Set ligne = ActiveSheet.Columns(107).Find(Target)
Set cop = ActiveSheet.Range(ActiveSheet.Cells(ligne.Row, 107), ActiveSheet.Cells(ligne.Row, 113))
cop.Copy ActiveSheet.Range(Target.Address)
End Sub
La ligne
Code:
If Application.Intersect(Target, Range("$DK$49:$DK$52")) Is Nothing Then Exit Sub
signifie : si l'intersection entre la cellule modifiée est la plage DK49 : DK52 est vide, alors sort de la procédure. En autre termes, si le changement a lieu ailleurs que dans la plage DK49 : DK52, sort de la procédure.
J'espère que ça répond à ta question.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro ou code VBA

Bonsoir Olyxier, bonsoir le forum,

Je ne comprends pas, j'ai recréé ton problème sur un petit fichier exemple et ça fonctionne. Même si la valeur de la cellule modifiée dans la plage DK49 : DK52 n'existe pas dans la colonne DC, ce n'est pas cette erreur que j'ai mais l'erreur d'exécution 91 : variable objet ou variable de bloc With non définie. C'est logique puisque si on ne trouve pas, comment renvoyer le numéro de ligne ?
De plus comme le code modifie une cellule de la plage, ça provoque une boucle sans fin...

Essai comme ça et si ça ne va pas, inutile de demander de l'aide supplémentaire si tu ne fais pas l'effort d'envoyer un fichier exemple en pièce jointe :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ligne As Range 'déclare la variable ligne
Dim cop As Range 'déclare la variable cop
 
If test = True Then Exit Sub 'si test est vrai, sort de la procédure (evite de boucler sur la procédure)
'si le changement à lieu ailleurs que dans la plage DK49:DK52, sort de la procédure
If Application.Intersect(Target, Range("$DK$49:$DK$52")) Is Nothing Then Exit Sub
 
test = True 'définit la variable test
Set ligne = ActiveSheet.Columns(107).Find(Target) 'définit la cellule ligne
If ligne Is Nothing Then Exit Sub 'si aucune occurrence n é st trouvée dans la colonne DC, sort de la procédure
'définit la plage cop
Set cop = ActiveSheet.Range(ActiveSheet.Cells(ligne.Row, 107), ActiveSheet.Cells(ligne.Row, 113))
'copy la plage cop et la colle dans la cellule modifié (provoquant uen boucle de la procédure Change)
cop.Copy ActiveSheet.Range(Target.Address)
test = False 'redéfinit la variable test
End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 559
Messages
2 089 604
Membres
104 224
dernier inscrit
Brilma