Application.intersect sur range variable

Airone784

XLDnaute Occasionnel
Bonjour,

J'ai ce code :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nb As Integer
nb = Range("A10").End(xlDown).Row + 8

If Not Application.Intersect(Target, Range(Cells(nb, "D"), Cells(nb, "H"), Cells(nb, "L"), Cells(nb, "P"), Cells(nb, "T"), Cells(nb, "X"))) Is Nothing Then
Msgbox "Essai de code"
End if

Quand je tape ce code j'ai un message d'erreur :

Erreur de compilation :
nombre d'arguments incorrect ou affectation de propriété incorrecte

Pouvez-vous m'aider en me disant ce qui cloche dans mon code car je sèche.

Merci d'avance pour l'aide.
 

Dranreb

XLDnaute Barbatruc
Re : Application.intersect sur range variable

Bonjour
La méthode Range n'accepte que 2 paramètres au maximum comme plage de début et plage de fin
Utilisez Application Union pour construire une plage d'élément disjoints.
Ici vous auriez sans doute plus facile à tester Target.Column Mod 4 = 0
Cordialement
 

pijaku

XLDnaute Occasionnel
Re : Application.intersect sur range variable

Bonjour,

1- Je n'aime pas personnellement les mélanges Range & Cells.
2- VBA a du mal (ou nous avons du mal à lui indiquer) avec les plages de cellules non-contigues.
Perso j'utilises Union.

Regarde ce code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nb As Integer, Plage As Range
nb = Range("A10").End(xlDown).Row + 8
Set Plage = Union(Range("D" & nb), Range("H" & nb), Range("L" & nb), Range("P" & nb), Range("T" & nb), Range("X" & nb))
If Not Application.Intersect(Target, Plage) Is Nothing Then
    MsgBox "Essai de code"
End If
Set Plage = Nothing
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Application.intersect sur range variable

je vois pas bien ce que je dois faire avec Target.Column Mod 4 = 0??
Le tester.
VB:
If Target.Column Mod 4 = 0 Then
Ça s'éxécutera pour toutes les colonnes dont le reste de la division par 4 vaut 0 soit: 4, 8, 12 etc. soit D, H, L, etc.
À combiner avec une limite maxi par un And Target.Column < colonne maxi
 

ROGER2327

XLDnaute Barbatruc
Re : Application.intersect sur range variable

Bonjour à tous


Je suis parti dans la même voie que Dranreb. j'obtiens ça :​
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nb As Integer, c&, l&
    nb = Range("A10").End(xlDown).Row + 8 'Attention avec ça : le dépassement de capacité est vite arrivé !
    c = Target.Column
    l = Target.Row
    If l = nb And c Mod 4 = 0 And c < 25 Then
        MsgBox "Essai de code"
    End If
End Sub



ROGER2327
#6097


Vendredi 27 Gidouille 139 (Sainte Gandouse, hygiéniste - fête Suprême Quarte)
23 Messidor An CCXX, 5,2832h - haricot
2012-W28-3T12:40:47Z
 

MVX

XLDnaute Nouveau
Re : Application.intersect sur range variable

Bonjour,

1- Je n'aime pas personnellement les mélanges Range & Cells.
2- VBA a du mal (ou nous avons du mal à lui indiquer) avec les plages de cellules non-contigues.
Perso j'utilises Union.

Regarde ce code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nb As Integer, Plage As Range
nb = Range("A10").End(xlDown).Row + 8
Set Plage = Union(Range("D" & nb), Range("H" & nb), Range("L" & nb), Range("P" & nb), Range("T" & nb), Range("X" & nb))
If Not Application.Intersect(Target, Plage) Is Nothing Then
    MsgBox "Essai de code"
End If
Set Plage = Nothing
End Sub


Bonjour
est il possible de charger set PLAGE à partir d'une variable contenant union(range1,range2,...) ?
je charge avec une boucle une variable (de type variant) avec union(range1,range2,...)
je colle ensuite ma variable dans une cellule quelconque (AA1 par ex) de la feuille
ensuite set plage = range("AA1") (j'ai vérifié que plage est bien alimenté)
mais
If Not Application.Intersect(Target, plage) Is Nothing Then ... renvoie nothing
alors que si je mets en dur set plage = union(range1,range2,...) alors
If Not Application.Intersect(Target, plage) Is Nothing Then ... ne renvoie pas nothing

PS la longueur de union(range1,range2,...) est de 359 caractères
auriez vous une explication ?
merci d'avance
 

Dranreb

XLDnaute Barbatruc
Bonsoir
Oui, on peut initialiser un Range comme représentant des cellules disjointes. Il possède alors un .Areas.Count > 1. De type Variant ? De type Range ! À part ça joignez votre classeur. Là on ne comprend pas le reste de vos explications.
 

Dranreb

XLDnaute Barbatruc
Oui bon on ne comprend pas mieux avec ce que vous avez joint …
J'ai juste vaguement l'impression que dans votre Sub Worksheet_BeforeRightClick vous auriez besoin au début de :
VB:
If Intersect(Me.[B3:F65], Target) Is Nothing Or Target.Row Mod 3 <> 2 Then Exit Sub
 

MVX

XLDnaute Nouveau
Oui bon on ne comprend pas mieux avec ce que vous avez joint …
J'ai juste vaguement l'impression que dans votre Sub Worksheet_BeforeRightClick vous auriez besoin au début de :
VB:
If Intersect(Me.[B3:F65], Target) Is Nothing Or Target.Row Mod 3 <> 2 Then Exit Sub

Bonjour
merci pour votre réponse qui convient parfaitement à ce dont j'ai besoin
j'ai des progrès à faire avec l'intersect c'est clair !
merci encore
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
311 716
Messages
2 081 828
Membres
101 823
dernier inscrit
mohamed3s