Différence entre Target et Range

Bonsoir

J'aimerais que l'on m'explique la différence en Target et Range.

Pour Range je crois avoir compris : permet de sélectionner une cellule ou une plage de cellules.

Mais pour Target, là j'avoue mon ignorance. J'ai recherché sur le net pas tout compris.

Exemple de code :

Private Sub  Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A22:A683")) is Nothing then
   Target.Offset(0, 1).Select
End If
End Sub

ByVal, j'ai compris que cela voulait dire passage Par Valeur

Mais c'est cette histoire de Target que je n'arrive pas bien à saisir.

Excusez moi si cette question peut parait simpliste pour certains. J'aimerais bien comprendre sa signification. Merci.

Bonsoir,

Je connais pas les limites de Target, mais en gros, Target c'est pour "l'action" et Range pour la zone "d'action" de

Target.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
MsgBox ("Bonsoir")
End If
End Sub

si tu double clic dans la zone A1:A10 cela lance la msgbox par exemple.

Cdt

Edit: Je suis pas clair

Si il y a un double clic dans la zone, ca déclenche la macro. bref c'est pas forcement les bon terme. ^^

Merci pour ces explications.

Peux-tu m'expliquer la ligne suivante :

If Not Intersect(Target, Range("A1:A10")) Is Nothing Then

Merci.

C'est la ou mon cerveau bloque, If Not Intersect ET Is Nothing Then, Je comprends pas...Et pourtant je m'en suis servis plusieurs fois en jouant avec du cells( i ; j ) à la place d'un range.

Par contre comme je te disait, mais pas clairement je le reconnait, le déclenchement de la macro se fera si il y a un double clic dans la zone nommé "A1:A10".

Et d'ailleurs il n'y a pas que le double clic. Un changement de valeur dans une cellule de cette zone déclenche la macro. Je m'en sert pour changer la couleur de certaine cellule selon la valeur mise dans une autre.

Merci, peut-être que quelqu'un pourra nous en dire un peu plus.

Intersect(Cible, Zone à cibler)

C'est peut être le plus clair si je me trompe pas.

Intersect :

https://forum.excel-pratique.com/cours-astuces/utilisation-de-la-methode-intersect-t1314.html

Merci beaucoup pour le lien, je vais étudier ça de plus près.

Test par toi même, je pense qu'avec mon explication "même pas très clair" tu devrais pouvoir comprendre le principe.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        Target.Interior.ColorIndex = 5
End If
End Sub

Ici si il y a un changement dans les cellules de A1 à A10 la couleur de la cellule qui change ou est cliqué change de couleur.

C'est pas plutôt le Target.Offset( qui te pose un problème ?

Target.Offset( permet de faire un décalage de l'action a faire par rapport à la cible "Target".

Voir l'exemple si dessous pour comprendre la différence entre Target et Target.Offset(2, 2)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        Target.Offset(2, 2).Interior.ColorIndex = 5
End If
End Sub

Cdt et bon courage

Bonsoir,

Quelques explications, pour que tu comprennes un peu mieux le code que tu manipules.

Range est un objet, Target une variable destinée à représenter un objet Range (elle apparaît dans ta procédure sous la forme Target As Range)

L'objet Range est une plage de cellules dans une feuille de calcul. Aussi bien une cellule isolée qu'une plage de plusieurs cellules ou qu'une plage multizone.

Quand tu invoques Range dans ton code, tu fais en fait appel à la propriété Range de l'objet parent qui peut être une feuille de calcul (Worksheet) ou un autre objet Range, la propriété renvoie un objet Range.

Quand tu l'écris sans mention explicite de l'objet parent (sous la forme Range("A") par exemple), VBA considère que tu réfères à la feuille active.

Cet objet étant très multiforme, on peut le renvoyer au moyen d'une multitude de propriétés : Cells (cellules), Rows (lignes), Columns (colonnes), Areas (zones)...

Une variable objet est une variable à laquelle tu peux affecter un objet. Une fois l'affectation faite (elle se fait en utilisant l'instruction Set : Set plage = Range(A3:C8) ), tu peux utiliser la variable en lieu et place de l'objet initial...

Dans la procédure que tu indiques, le cas est particulier. Il s'agit d'une procédure d'évènement survenant dans une feuille de calcul déterminée. Cette procédure se déclenche automatiquement lorsque la valeur d'une cellule (ou plusieurs) est modifiée dans la feuille (ou en cas de suppression ou insertion). Quand tu l'utilises, la procédure te renvoie la plage modifiée au moyen d'une variable nommée Target.

Pour tester si la modification est intervenue dans la plage A1:A10, tu utilises la méthode Intersect (de l'objet Application) qui renvoie une plage constituant l'intersection de deux autres plages, Intersect renvoie donc un objet Range. Tu te contentes de tester si cette intersection existe. Si elle n'existe pas, la valeur de sa représentation sera Nothing (rien), valeur spéciale affectée à toute représentation d'objet non défini et à toute variable objet non initialisée. D'où la forme du test : s'il y a une intersection, ce n'est pas rien, et donc la condition sera vraie.

En espérant que cela va te permettre de mieux appréhender ton code.

Cordialement.

Merci pour ton explication, je comment à mieux comprendre à quoi correspond Target, celle-ci est juste une variable de l'objet Range.

Bonne soirée.

Tu n'as pas tout lu. Target représente la cellule ou la plage de cellules modifiée dans la feuille, modification qui déclenche la procédure dans laquelle tu la trouves.

Bonjour

Alors pourquoi :

Range est un objet, Target une variable destinée à représenter un objet Range (elle apparaît dans ta procédure sous la forme Target As Range)

Et :

Cette procédure se déclenche automatiquement lorsque la valeur d'une cellule (ou plusieurs) est modifiée dans la feuille (ou en cas de suppression ou insertion). Quand tu l'utilises, la procédure te renvoie la plage modifiée au moyen d'une variable nommée Target.

Donc pas tout compris. Mais bon, je vais faire avec, seul l'expérience me permettra d'en apprendre davantage.

Bonjour,

Dit légèrement autrement :

Target est le nom d'une variable Range.

Lors de certains événements (selection, double-clic, ...) excel te passe Target en paramètre que tu saches quel range a déclenché cet événement, que tu puisses agir en conséquence.

eric

Merci pour toutes ces explications, je vais essayer d'assimiler tout ceci. Encore merci.

Rechercher des sujets similaires à "difference entre target range"