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 :

Exclure une cellule d'une plage de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 47
    Points
    47
    Par défaut Exclure une cellule d'une plage de cellules
    Salut les amis, je viens vers vous pour vous demander aide et conseil.

    J'ai deux plages de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Plage1, Plage2 as Range
    Set Plage1 = Range("D5, D9, D11, D15, D18, E6, E8, E11, E13, E18")
    Si je sélectionne une cellule de la Plage1 (par exemple D15), la Plage2 doit devenir :

    Plage2 = Plage1 – ActiveCell.Address, donc :

    Plage2 = Range("D5, D9, D11, D18, E6, E8, E11, E13, E18")

    La cellule active (sélectionnée) doit être exclue de la Plage1.

    Je vous remercie d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Hello,
    tu peux essayer un truc du genre :
    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
    24
    25
    26
    Function ExclureRange(ByVal rngMain As Range, RngExc As Range) As Range
        Dim rngTemp     As Range
        Dim rng         As Range
        Set rngTemp = rngMain
        Set rngMain = Nothing
        For Each rng In rngTemp
            If Application.Intersect(rng, RngExc) Is Nothing Then
                If rngMain Is Nothing Then
                    Set rngMain = rng
                Else
                    Set rngMain = Union(rngMain, rng)
                End If
            End If
        Next
        Set ExclureRange = rngMain
    End Function
     
     
    Sub CheckExclureRange()
    Dim cell
    Dim rngRes As Range
    Set rngRes = ExclureRange(Range("A1:D5"), Range("C1:C3"))
    For Each cell In rngRes
        Debug.Print cell.Address
    Next cell
    End Sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 47
    Points
    47
    Par défaut
    Bonjour jurassic pork,

    Je vous remercie pour votre réponse. Le problème a été déjà résolu sur un autre forum.

    Voici deux solutions :

    La solution de Thauthème :
    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'à la sélection dans l'onglet
    Dim Plage1, Plage2 As Range, CEL As Range 'déclare les variables Plage1, Plage2 et CEL
     
    Set Plage1 = Range("D5, D9, D11, D15, D18, E6, E8, E11, E13, E18") 'définit la plage Plage1
    Plage1.Interior.ColorIndex = 4 'colore la plage Plage1 de vert (ligne à supprimer après les tests)
    If Not Application.Intersect(Target, Plage1) Is Nothing Then 'condition : si la celluile sélectionnée se trouve dans la plage PLage1
        For Each CEL In Plage1 'boucle sur toutes les cellules CEL de Plage1
            If CEL.Address <> ActiveCell.Address Then 'condition 2 : si CEL n'est pas la cellule active
                'si la plage Plage 2 n'est pas encore définie, alors Plage2 devient CEL, sinon Plage2 devient l'intersection de de Plage2 et de CEL
                If Plage2 Is Nothing Then Set Plage2 = CEL Else Set Plage2 = Application.Union(CEL, Plage2)
            End If 'fin de la condition 2
        Next CEL 'prochaine cellule de la boucle
    End If 'fin de la condition 1
    If Not Plage2 Is Nothing Then Plage2.Interior.ColorIndex = 3 'colore Plage2 de rouge (ligne à supprimer après les tests)
    End Sub
    et la solution de thev:

    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
     
    Sub test()
        Dim Plage1 As Range, Plage2 As Range
     
        Set Plage1 = Range("D5, D9, D11, D15, D18, E6, E8, E11, E13, E18")
        Set Plage2 = Minus(Plage1, ActiveCell)
    End Sub
     
    Function Minus(ByVal A As Range, ByVal B As Range) As Range  'Plage A moins Plage B   
        Dim plage As Range, cell As Range
     
        Set Minus = Nothing
        For Each plage In A.Areas
            For Each cell In plage
                If Intersect(cell, B) Is Nothing Then
                    If Minus Is Nothing Then Set Minus = cell _
                    Else Set Minus = Union(Minus, cell)
                End If
            Next cell
        Next plage
     
    End Function

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

Discussions similaires

  1. Trier une plage de cellules
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/12/2019, 13h04
  2. [VBA] Copier une plage de cellules dans un fichier fermé
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 16h52
  3. [VBA] Parcourir une plage de cellule
    Par Dinytro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2005, 08h18
  4. [VBA-E] Image d'une plage de cellule
    Par flogreg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2004, 12h30
  5. [VBA-E] [Excel] Protection d'une plage de cellules
    Par fikou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2002, 11h28

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