Comment dire: Si la sélection est dans la zone ... " ?

zeltron

XLDnaute Occasionnel
Bonsoir à tout le forum.

J'ai un code qui applique une action à chaque cellule d'une sélection:

Private Sub ...

Dim p As Range
Set Maplage = Selection

For Each p In Maplage ect ...


Ce que j'aimerais c'est que la macro s'execute uniquement si la totalité des cellules de ma Selection est incluse dans une zone de ma feuille à laquelle j'ai affecté un nom: Lim_Select

Donc comment coder la situation suivante:

Si Maplage n'est pas incluse dans Lim_Select alors Exit Sub sinon suite de la macro.

Merci d'avance pour votre aide

Cordialement

Zeltron
 

Luki

XLDnaute Accro
Re : Comment dire: Si la sélection est dans la zone ... " ?

Salut,

if intersect(maplage;lim_select) is nothing then exit sub ( sauf erreur)

A+

petite correction pour lim_select:


if intersect(maplage;range("lim_select") is nothing then exit sub
A+
 
Dernière édition:

zeltron

XLDnaute Occasionnel
Re : Comment dire: Si la sélection est dans la zone ... " ?

Merci de vous interreser à mon problème Kobaya et Luki.

Suite à votre information , j'ai donc écrit ceci

If Intersect(Maplage, Range("lim_select")) Is Nothing Then Exit Sub

Cela fonctionne bien mais uniquement si ma selection est completement en dehors de ma plage lim_select.
Donc si ma selection est inclus dans la plage lim_select cela me convient, la condition n'est pas remplie et donc pas de exit sub.

Si ma sélection est complètement en dehors de la plage lim_select, cela me convient car la condition est remplie et donc il y a bien exit sub.

Mais quand ma sélection est en partie dans la plage lim_select et en partie en dehors de la plage lim_select, alors il considère que la condition n'est pas remplie et que donc il n'y a pas de exit sub, or je souhaite que lorsque la sélection a une partie en dehors de lim_select, cela soit considéré comme une condition remplie et que donc , il y ait exit sub.
En effet, Selection peut être une plage de plusieurs cellules et non pas seulement une seule cellule ( où là effectivement la sélection est soit dans lim_select soit en dehors).


Comment puis-je faire?

Merci d'avance pour votre aide

Cordialement

Zeltron
 

Luki

XLDnaute Accro
Re : Comment dire: Si la sélection est dans la zone ... " ?

Re, et salut Kobaya :p

Tu peux comparer la taille des plages par :

If maplage.cells.count= intersect( maplage, lim-select).cells.count...... par exemple.

à toi d'adapter...
A+
 

zeltron

XLDnaute Occasionnel
Re : Comment dire: Si la sélection est dans la zone ... " ?

Merci Luki pour ton aide.

Mais je n'arrive pas à adapter ton code. Peux tu m'aider?

Je te joint en fichier joint ce qui me pause problème (Nb: avant le exit sub j'ai mis un msg en +).

Merci d'avance pour ton coup de pouce

Cordialement

Zeltron
 

Pièces jointes

  • Z3.zip
    9.4 KB · Affichages: 30

ODVJ

XLDnaute Impliqué
Re : Comment dire: Si la sélection est dans la zone ... " ?

Bonsoir,

A inclus dans B <=> A inter B = A

donc le code suivant me semble fonctionner.
Code:
Set isect = Intersect(Target, Range("limselect"))
If isect Is Nothing Then
[A1] = "KO"
Else
    If isect.Address = Target.Address Then
        [A1] = "OK"
    Else
        [A1] = "KO"
    End If
End If

A+
 

zeltron

XLDnaute Occasionnel
Re : Comment dire: Si la sélection est dans la zone ... " ?

ODVJ,merci de te pencher sur mon problème.

J'ai donc utilisé ton code en l'adaptant comme ceci (il s'agit du code entier du fichier joint précedement:

Private Sub CommandButton2_Click()

Dim p As Range
Set Maplage = Selection
Set isect = Intersect(Maplage, Range("lim_select"))

If isect Is Nothing Then
MsgBox "Vous devez sélectionner des cellules comprise dans la zone encadrée", vbCritical, "Attention"
Exit Sub
End If

For Each p In Maplage

p.Value = "x"
p.Interior.ColorIndex = 42

Next p

End Sub

Mais cela me pause exactement le même problème, quand la sélection est " à cheval" sur lim_select, alors la suite de la macro s'effectue, or je cherche a faire en sorte que si la selection des cellules est comprise dans la zone lim_select, alors la macro s'effectue, si la selection des cellules est en dehors de la zone lim_select alors le msg apparait et ensuite exit sub ou si la selection des cellules est " à cheval" sur lim_select ( c'est à dire une partie dans lim_select et une autre partie des cellules sélectionnées en dehors de lim_select) alors également le msg apparait et ensuite exit sub.

Comment puis je faire?, la je suis perdu!

Merci d'avance

Cordialement

Zeltron
 

ODVJ

XLDnaute Impliqué
Re : Comment dire: Si la sélection est dans la zone ... " ?

Bonsoir,

a priori ton adaptation ne suit pas l'exemple que je t'ai envoyé.
chaque fois qu'il y avait des "OK", tu exécutes ton code
chaque fois qu'il y a des "KO", tu envoies le message et tu sors de la macro.
donc ça devrait plutôt ressembler à :
Code:
[LEFT]Private Sub CommandButton2_Click()[/LEFT]
 
[LEFT]Dim p As Range
Set maplage = Selection
Set isect = Intersect(maplage, Range("limselect"))
If isect Is Nothing Then
MsgBox "Vous devez sélectionner des cellules comprise dans la zone encadrée", vbCritical, "Attention"
Exit Sub
Else
  If isect.Address = maplage.Address Then
      For Each p In maplage
           p.Value = "x"
           p.Interior.ColorIndex = 42
      Next p
  Else
      MsgBox "Vous devez sélectionner des cellules comprise dans la zone encadrée", vbCritical, "Attention"
      Exit Sub
  End If
End If[/LEFT]

cordialement
 

Luki

XLDnaute Accro
Re : Comment dire: Si la sélection est dans la zone ... " ?

Bonjour à tous,

Suite à ce fil et à ce problème récurent, je me suis concocté une fonction VRAI/FAUX à intégrer dans mes projets. Avec en prime la gestion de la sélection à cheval en argument optionnel.

Si ça peut servir...

Code:
Function IsRange1InRange2(range1 As range, range2 As range, Optional Entire As Boolean = True) As Boolean
'> La plage1 est-elle dans la plage2 ? <
'pour range1= cellule seule: renvoie vrai si elle se trouve dans range2
'pour range1= plage: renvoie vrai si elle se trouve dans range2
'pour range1= plage: renvoie faux si elle est à cheval et Entire = false
'pour range1= plage: renvoie vrai si elle est à cheval et Entire = true

Dim RgInt As range
    Set RgInt = Intersect(range1, range2)
        If RgInt Is Nothing Then
            IsRange1InRange2 = False
        ElseIf range1.Address = RgInt.Address Then
            IsRange1InRange2 = True
        ElseIf range1.Address <> RgInt.Address And Entire = True Then
            IsRange1InRange2 = False
        ElseIf range1.Address <> RgInt.Address And Entire = False Then
            IsRange1InRange2 = True
        End If
End Function
 

ODVJ

XLDnaute Impliqué
Re : Comment dire: Si la sélection est dans la zone ... " ?

Bonjour Luki,

Pratique ta fonction!
Si ça t'intéresse, voici une réduction de code (moins lisible cependant) :
Code:
Function IsRange1InRange2(range1 As range, range2 As range, Optional Entire As Boolean = True) As Boolean
'> La plage1 est-elle dans la plage2 ? <
'pour range1= cellule seule: renvoie vrai si elle se trouve dans range2
'pour range1= plage: renvoie vrai si elle se trouve dans range2
'pour range1= plage: renvoie faux si elle est à cheval et Entire = false
'pour range1= plage: renvoie vrai si elle est à cheval et Entire = true
 
    If Not (Intersect(range1, range2) Is Nothing) Then IsRange1InRange2 = (range1.Address = Intersect(range1, range2).Address Or Not (entire)) Else IsRange1InRange2 = False
End Function

cordialement
 

Luki

XLDnaute Accro
Re : Comment dire: Si la sélection est dans la zone ... " ?

Merci ODVJ,

J'aime bien les réductions, même si je ne comprends pas tout du premier coup!

En regardant ce que tu poste, ça va, je vois ce qui se passe.

Je n'ai pas encore l'habitude de réduire les Vrai/faux. Mais ça commence!

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2