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
 

Airone784

XLDnaute Occasionnel
Re : Application.intersect sur range variable

Merci beaucoup Dranreb pour ta réponse.
Par contre, je vois pas bien ce que je dois faire avec Target.Column Mod 4 = 0??
Désolé.
 

Airone784

XLDnaute Occasionnel
Re : Application.intersect sur range variable

Très bien Pijaku, ça fonctionne très bien.

Merci à vous 2 pour votre contribution. ;)

Bonne fin de journée
 

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
 

Airone784

XLDnaute Occasionnel
Re : Application.intersect sur range variable

Bonsoir,

Je ne connaissais pas mod.

Merci à vous Dranreb et roger2327!!!

Bye
 

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
 

MVX

XLDnaute Nouveau
Oups désolé click trop rapide
votre formulation est effectivement bcp plus simple mais ma question demeure:
peut on mettre une variable pour définir la plage (à la place de Me.[B3:F65]) ?
merci d'avance
 

Dranreb

XLDnaute Barbatruc
Oui, vous pouvez spécifier toute expression Range, y compris une variable déclarée As Range convenablement initialisée préalablement.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas