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

david84

XLDnaute Barbatruc
Bonjour,
"If Not Intersect(Target, Range(" : ")) Is Nothing"

Je vois souvent cette phrase sans trop la comprendre car je ne connais pas le VBA.
Les explications données par l'aide d'Excel me laissent sur ma faim.
Quelqu'un peut-il me dire concrètement ce qu'elle veut dire et dans quel cadre l'utiliser ?
Merci
 

kjin

XLDnaute Barbatruc
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Bonjou,
Cette ligne est souvent associée à un macro événementielle, car elle permet de passer l'argument Target. Elle permet de vérifier que la cellule cible fait partie de la plage dans laquelle on souhaite actionner la procédure
Code:
If Not Intersect(Target, Range("A1:B1 ")) Is Nothing then...
Si la cellule active est A1 ou B1, la procédure s'applique sinon il ne se passe rien
A+
kjin
 

david84

XLDnaute Barbatruc
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Re;
merci Kjin de me répondre.
Dis comme ça c'est clair.
Je cite cependant l'aide d'Excel concernant intersect : "Cette méthode renvoie un objet Range qui représente l'intersection rectangulaire de deux plages ou plus".
Je ne comprends pas vraiment ce que l'existence ou la non existence d'une intersection rectangulaire vient faire là-dedans...
De plus, c'est quand même bizarre cette tournure :
If not Intersect(Target, Range("A1:B1 ")) Is Nothing then..."
Merci encore
 

chris

XLDnaute Barbatruc
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Bonjour

Tu as d'un côté une sélection d'une ou plusieurs cellules, soit un 1er rectangle, de l'autre une zone à surveiller également d'une ou plusieurs cellule, soit un 2ème rectangle.
Si il y a superposition d'au moins une cellule de ces deux rectangles, cela correspond à un rectangle, dit intersection, représentant la zone de chevauchement.

Donc l'idée est de dire si ce chevauchement (Intersect) existe...

Mais "existe" n'est pas une possibilité analysable simplement tandis que n'existe pas (is nothing) l'est.

Alors not is nothing c'est en gros " si on ne peut pas dire que cela n'existe pas...." alors cela existe !

To be or not to be, question éternelle, même en VBA !
 

kjin

XLDnaute Barbatruc
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Re,
Je cite cependant l'aide d'Excel concernant intersect : "Cette méthode renvoie un objet Range qui représente l'intersection rectangulaire de deux plages ou plus".
Je ne comprends pas vraiment ce que l'existence ou la non existence d'une intersection rectangulaire vient faire là-dedans...
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
Set rng1 = Range("A1:B5") 'plage1
rng1.Interior.ColorIndex = 5
Set rng2 = Range("D3:B2") 'plage2
rng2.Interior.ColorIndex = 4
Set rng3 = Intersect(rng1, rng2) 'intersection plage1,plage2
'Test s'il rng3 existe, autrement dit si l'intersection existe
If Not rng3 Is Nothing Then
    rng3.Interior.ColorIndex = 3
    'msg si on click dans rng3 si elle existe
    If Not Intersect(Target, rng3) Is Nothing Then MsgBox Target.Address
Else
'msg si pas d'intersection
MsgBox "Pas d'intersection entre les 2 plages"
End If
End Sub
La partie rouge représente bien l'intersection des 2 rectangles
Si tu click dans la zone rouge et uniquement dans cette zone tu obtiendras un message
Remplace D3:B2 par G1:F2 pour rng2 et observe le résultat
De plus, c'est quand même bizarre cette tournure :
If not Intersect(Target, Range("A1:B1 ")) Is Nothing then..."
Merci encore
"NOT" est un opérateur logique lié ici à "IS" (et non à "NOTHING"), donc rien d'anormal ou d'étrange
A+
kjin
 

Lii

XLDnaute Impliqué
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Bon soir,

2 façons de voir les choses

On voit beaucoup plus souvent la première forme de raisonnement
Code:
If [COLOR="Red"]Not[/COLOR] Intersect(Target, Range("A1:B10 ")) [COLOR="Navy"][B]Is Nothing[/B][/COLOR] Then
  blablabla1
else
  blablabla2
End If

si on intercepte une cellule de la plage (NotIs Nothing correspond à ce n'est pas rien donc l'intersection n'est pas vide) alors blablabla1 sinon blablabla2.

on voit plus rarement ():
Code:
If Intersect(Target, Range("A1:B10 ")) [COLOR="DarkGreen"][B]Is Nothing[/B][/COLOR] Then
  blablabla2
else
  blablabla1
End if

si on n'intercepte pas une cellule de la plage (Is Nothing correspond à rien donc l'intersection est vide) alors blablabla2 sinon blablabla1.
 

david84

XLDnaute Barbatruc
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Re;
merci à vous deux pour les explications.
Kjin, ta macro me permet effectivement de comprendre la notion de "intersect".
Un détail cependant, si je lis ta macro, je vois "'msg si pas d'intersection
MsgBox "Pas d'intersection entre les 2 plages".
Or, contrairement au message qui s'affiche pour m'indiquer la cible en cas d'intersection, la 2ème ne s'affiche pas...ce qui n'enlève rien quant à la qualité de la démonstration !
Encore merci.
 

kjin

XLDnaute Barbatruc
Re : If Not Intersect(Target, Range(" : ")) Is Nothing"

Bonsoir,
Un détail cependant, si je lis ta macro, je vois "'msg si pas d'intersection
MsgBox "Pas d'intersection entre les 2 plages".
Or, contrairement au message qui s'affiche pour m'indiquer la cible en cas d'intersection, la 2ème ne s'affiche pas...
Le but était de tester l'existence de 2 intersections
- rng3 constituée à partir de 2 plages rng1 et rng2
- l'autre constituée de la plage rng3 ainsi crée et la cellule active
Remplace D3:B2 par G1:F2 pour rng2 et observe le résultat
Pour sûr, tu n'as pas remplacé la plage rng2 comme je te l'indiquais
A+
kjin
 

Discussions similaires

Statistiques des forums

Discussions
312 763
Messages
2 091 841
Membres
105 077
dernier inscrit
Airnee