IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Vérifier si une plage de cellules appartient à une autre plage de cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Par défaut Vérifier si une plage de cellules appartient à une autre plage de cellules
    Bonjour à tous! Je suis un peu rouillé en VBA et je souhaiterais savoir comment faire pour vérifier si une plage de cellules appartient à une plage définie (dans le cadre d'un jeu de bataille navale sous Excel).

    ce problème intervient très tot puisque j'en suis au placement des bateaux du joueur. Pour l'instant, le code de placement du bateau de 2 ressemble a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CommandButton1_Click()
    Dim maplage As Range
    Set maplage = Selection
    If Selection.Cells.Count <> 2 Then
    MsgBox ("Veuillez sélectionner")
    Exit Sub
    Else
    maplage.Cells.Interior.Color = vbRed
    End If
    End Sub
    Je pensais rajouter une condition du genre AND maplage<>plagejeu mais ça ne marche pas, ce qui est normal vu que ce ne sont pas le mêmes plages.

    J'espère que je me fais à peu près comprendre.
    Merci pour votre aide
    Fred

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    comment faire pour vérifier si une cellule appartient à une plage définie
    Tu peux utiliser Intersect:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cellule As Range, Plage As Range
    ....
    If Not Intersect(Cellule, Plage) Is Nothing Then
       MsgBox "Cellule fait partie de Plage"
    End If
    Cordialement,

    Tirex28/

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    A vérifier si cela peut correspondre à ce que vous cherchez (regardez l'aide VBA sur "Intersect") ce qui pourrait donner quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub essai()
    Worksheets("Feuil1").Activate
    Set maplage1 = Range("A1:D25")
    Set maplage2 = Selection
     
    Set isect = Application.Intersect(maplage1, maplage2)
    If isect Is Nothing Then
        MsgBox "Ranges do not intersect"
    Else
        If Selection.Cells.Count <> 2 Then
        MsgBox ("Veuillez sélectionner")
        Exit Sub
        Else
        maplage2.Cells.Interior.Color = vbRed
        End If
     
    End If
     
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Par défaut
    Merci pour la rapidité de vos réponses mais la fonction Intersect n est hélas pas parfaite dans ce cas précis.

    En effet, Le tableau de jeu est une zone 10x10, et le problème avec la fonction intersect est que je peux quand même placer un "bateau" sur le bord du cadre, dirigé vers l'extérieur, et donc à cheval entre le cadre et la zone extérieure...

    J'ai testé en rajoutant des conditions à mon If comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If maplage.Cells.Count <> 2 Or maplage.Row < 3 Or maplage.Row > 11 Or maplage.Column < 2 Or maplage.Column > 10 Then
    Le problème est à peu près le même qu'avec intersect, il est juste limité aux bordures gauche et inférieure du cadre (toutes les bordures avec intersect)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Donc on ne peut placer un bateau qui touche les bords du cadre ?

    Dans ce cas essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub essai()
    Worksheets("Feuil1").Activate
    Set maplage1 = Range("A2:J11")
    Set maplage2 = Selection
     
    Set isect = Application.Intersect(maplage1, maplage2)
    If isect Is Nothing Then
        MsgBox "Ranges do not intersect"
     ElseIf maplage2.Row < 3 Or maplage2.Row > 11 Then
        MsgBox ("Veuillez sélectionner ........")
        Exit Sub
    ElseIf maplage2.Column < 2 Or maplage2.Column > 8 Then
        MsgBox ("Veuillez sélectionner .......")
        Exit Sub
     Else
        If Selection.Cells.Count <> 2 Then
        MsgBox ("Veuillez sélectionner")
        Exit Sub
        Else
        maplage2.Cells.Interior.Color = vbRed
        End If
     
    End If

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Re,

    Pas sur d'avoir compris les contraintes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cellule As Range, Plage As Range
    ....
    If Intersect(Cellule, Plage) Is Cellule Then
       MsgBox "Cellule est intégralement incluse dans Plage"
    End If
    Cordialement,

    Tirex28/

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir Tirex28,

    Vous avez écrit :
    Pas sur d'avoir compris les contraintes:
    Mais vous avez regardé ma réponse ?

    En fonction de ce quà écrit fred_vannes56 :

    En effet, Le tableau de jeu est une zone 10x10, et le problème avec la fonction intersect est que je peux quand même placer un "bateau" sur le bord du cadre, dirigé vers l'extérieur, et donc à cheval entre le cadre et la zone extérieure...
    et du fait qu'il a également dit au début que pour l'instant la plage sélectionnée n'était prise en compte que si elle comprenait 2 cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Selection.Cells.Count <> 2 Then
    MsgBox ("Veuillez sélectionner")
    Exit Sub
    Else
    maplage.Cells.Interior.Color = vbRed
    End If
    Mais aussi (ce qui défini la plage accessible à B3:J11 soit 9x9 parmi 10x10) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If maplage.Cells.Count <> 2 Or maplage.Row < 3 Or maplage.Row > 11 _
    Or maplage.Column < 2 Or maplage.Column > 10 Then


    Si la plage sélectionnée ne doit pas correspondre à une cellule qui touche l'un des bords de la 1ère plage, à priori mon code fonctionne et si j'ai mal compris (on peut sélectionner 2 cellules qui touchent les bords) il suffit de modifier les valeurs en rouge ci-dessous (3 devient 2, 11 devient 12 etc) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ElseIf maplage2.Row < 3 Or maplage2.Row > 11 Then
        MsgBox ("Veuillez sélectionner ........")
        Exit Sub
    ElseIf maplage2.Column < 2 Or maplage2.Column > 8 Then
        MsgBox ("Veuillez sélectionner .......")
        Exit Sub
     Else
    et de même s'il s'agit de placer un bateau de 3 cellules au lieu de 2
    etc.

    Ou alors je n'ai vraiment rien compris.
    Dernière modification par Invité ; 14/10/2008 à 19h13.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copier une valeur a partir d'un userform dans la cellule d'une feuille
    Par VELO1222 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/04/2018, 12h58
  2. Copier plage en ligne d'une feuille vers colonne d'une autre feuille
    Par PaulG dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/06/2013, 12h53
  3. Réponses: 6
    Dernier message: 24/05/2012, 11h53
  4. [XL-2000] compter des cellules avec une couleur de fond et une couleur de police
    Par darkvadave dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/11/2011, 16h36
  5. Réponses: 1
    Dernier message: 26/12/2010, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo