Worksheet_Change(ByVal Target As Range)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

matthieumagl

XLDnaute Nouveau
Bonjour,

Je mets ci-joint un fichier.
Je cherche, à partir de l'événement WORKSHEET_CHANGE à obtenir dans la cellule D5 la dernière modification entrée dans les cellules de ma plage B1:B4.

Lorsque je saisie directement à la main mes chiffres dans ma plage B1:B4, pas de problème: ça fonctionne !
(feuille1)
Par contre, lorsque la saisie est indirecte, c'est-à-dire lorsqu’il y a des formules dans B1:B4, cela ne fonctionne plus.
(feuille2)
Et je n'arrive pas à savoir pourquoi?
En plus, ma TARGET de type Range est bien en ByVal

Auriez vous une explication s'il vous plait? Comment y arriver?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$B$1" Then
Range("D5") = Target.Value
Else
If Target.Address = "$B$2" Then
Range("D5") = Target.Value
Else
If Target.Address = "$B$3" Then
Range("D5") = Target.Value
Else
If Target.Address = "$B$4" Then
Range("D5") = Target.Value
End If
End If
End If
End If

End Sub

PS: Je fais ce petit exercice pour ensuite récupérer une seule valeur à partir de plusieurs TCD qui "bougent" avec des filtres.

Cordialement,

Merci d'avance pour votre aide,

Matthieu
 

Pièces jointes

Re : Worksheet_Change(ByVal Target As Range)

Bonsoir,

Il n'y a pas moyen de savoir quand une cellule particulière a changée de valeur suite à un recalcul.
Il faut employer des moyens détournés, mais le jeu en vaut-il la chandelle?
Sans les tenants et aboutissants de ton projets, impossible à dire.

En tous cas tu peux changer déjà tes lignes de codes par celles-ci qui feront la même chose.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'Si target est inclus dans B1:B3 et qu'une seule cellule a changée
    If Not Intersect(Target, Range("B1:B3")) Is Nothing And Target.Count = 1 Then Range("D5") = Target.Value
End Sub

A+
 
Re : Worksheet_Change(ByVal Target As Range)

Salut

petit complément d'explications

Avec Private Sub Worksheet_Change(ByVal Target As Range), Target désigne la cellule active ou la plage des cellules sélectionnées juste avant le traitement de l'évènement et non les cellules qui dépendent d'elles.

Pour le vérifier, insère cette instruction juste après celle ci-dessus : MsgBox Target.Adress.

Si... tu remplaces la formule en B1, par exemple par =A1+A2, tu auras bien en D5 la réponse (toujours avec ta macro ou celle plus concise de Hasco 😉). D5 ne changera pas aux changements de A1 ou A2 même si B1 change !

Pour tester le nouveau contenu d'une cellule "formule", il faut savoir ce qui est à l'origine du changement.
Par exemple, en B1, =A1+A2. Bien sûr B1 change avec A1 ou A2 mais, avec l’événement Change , la variable Target correspond à l'une d'elles et non à B1.
 
Re : Worksheet_Change(ByVal Target As Range)

Merci pour tous tes renseignements. Ça m'a aidé à mieux comprendre le TARGET, l'événement CHANGE et le code IF NOT INTERSECT.

Mais en faisant plusieurs essais, j'ai réussi à obtenir ce que je voulais. Voilà le code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target = Range("B2") Then
Range("C5") = Range("B2").Value
Else
If Target = Range("B3") Then
Range("C5") = Range("B3").Value
Else
If Target = Range("B4") Then
Range("C5") = Range("B4").Value
Else

End If
End If
End If

End Sub



Merci pour tout en cas !
Matthieu
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
404
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
4
Affichages
406
Réponses
2
Affichages
330
Retour