Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Application.intersect sur range variable

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 !

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.
 
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
 
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
 
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
 
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
 


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
 
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.
 
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
 
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
 
- 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
405
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
4
Affichages
408
Réponses
14
Affichages
514
Réponses
2
Affichages
333
Réponses
16
Affichages
1 K
Réponses
2
Affichages
433
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…