Sélection de colonne en fonction d'une sélection

UnVBAliable -  
Kalissi Messages postés 221 Statut Membre -
Bonjour à tous,

Un problème se pause à moi j'aimerais faire fonctionner la boucle suivante, cependant l'erreur d'exécution "13" (Incompatibilité de type).
Pour d'écrire le processus que je voudrais faire, il serait de sélectionner des colonnes en fonction d'une sélection :

Dim Maplage As Range
Dim i As Integer
Set Sel = Selection

    For i = 3 To 74
        If Sel = Range("B" & i & ":C" & i) Then
            Set Maplage = Range("B3:C74")
        ElseIf Sel = Range("D" & i & ":E" & i) Then
            Set Maplage = Range("D3:E74")
        ElseIf Sel = Range("F" & i & ":G" & i) Then
            Set Maplage = Range("F3:G74")
        ElseIf Sel = Range("H" & i & ":I" & i) Then
            Set Maplage = Range("H3:I74")
        ElseIf Sel = Range("J" & i & ":K" & i) Then
            Set Maplage = Range("J3:K74")
        ElseIf Sel = Range("A" & i & ":L" & i) Then
            Set Maplage = Range("L3:M74")
        ElseIf Sel = Range("N" & i & ":O" & i) Then
            Set Maplage = Range("N3:O74")
        End If
    Next i
    Maplage.Select


Merci d'avance pour vos réponses
Cordialement


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. Kalissi Messages postés 221 Statut Membre 20
     
    Bonjour,

    Je ne sais pas si tu connais ... mais enfin ...

    Dans un module place le code suivant :

    Option Explicit
    '
    
    Public Const PlageA = "B3:C74"
    Public Const PlageB = "D3:E74"
    Public Const PlageC = "F3:G74"
    Public Const PlageD = "H3:I74"
    Public Const PlageE = "J3:K74"
    Public Const PlageF = "L3:M74"
    Public Const PlageG = "N3:O74"
    '
    
    Public Maplage As Range
    '
    
    
    Public Sub TestMaPlage()
    
        MsgBox Maplage.Address
    
    End Sub
    


    Derrière la feuille place le code suivant :

    Option Explicit
    '
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        If Not (Intersect(Target, Range(PlageA)) Is Nothing) Then
            Set Maplage = Range(PlageA)
        Else
            If Not (Intersect(Target, Range(PlageB)) Is Nothing) Then
                Set Maplage = Range(PlageB)
            Else
                If Not (Intersect(Target, Range(PlageC)) Is Nothing) Then
                    Set Maplage = Range(PlageC)
                Else
                    If Not (Intersect(Target, Range(PlageD)) Is Nothing) Then
                        Set Maplage = Range(PlageD)
                    Else
                        If Not (Intersect(Target, Range(PlageE)) Is Nothing) Then
                            Set Maplage = Range(PlageE)
                        Else
                            If Not (Intersect(Target, Range(PlageF)) Is Nothing) Then
                                Set Maplage = Range(PlageF)
                            Else
                                If Not (Intersect(Target, Range(PlageG)) Is Nothing) Then
                                    Set Maplage = Range(PlageG)
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
        
    End Sub
    '
    


    Bon, perso je ne suis pas un fan du ElseIf, mais tu pourras ajuster à ton aise...
    Ce sera quand même plus performant que de boucler sur toute les cellules ...

    K
    0
  2. Kalissi Messages postés 221 Statut Membre 20
     
    re:

    Une variante ... plus tordu ... mais plus rapide ... pour le plaisirs

    Option Explicit
    '
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        Dim PlageAA As Range
        Dim PlageAB As Range
        
        Set PlageAA = Union(Range(PlageA), Range(PlageB), Range(PlageC), Range(PlageD))
        Set PlageAB = Union(Range(PlageE), Range(PlageF), Range(PlageG))
        
        If Not (Intersect(Target, PlageAA) Is Nothing) Then
            Set PlageAA = Union(Range(PlageA), Range(PlageB))
            Set PlageAB = Union(Range(PlageC), Range(PlageD))
            If Not (Intersect(Target, PlageAA) Is Nothing) Then
                If Not (Intersect(Target, Range(PlageA)) Is Nothing) Then
                    Set MaPlage = Range(PlageA)
                Else
                    If Not (Intersect(Target, Range(PlageB)) Is Nothing) Then
                        Set MaPlage = Range(PlageB)
                    End If
                End If
            Else
                If Not (Intersect(Target, PlageAB) Is Nothing) Then
                    If Not (Intersect(Target, Range(PlageC)) Is Nothing) Then
                        Set MaPlage = Range(PlageC)
                    Else
                        If Not (Intersect(Target, Range(PlageD)) Is Nothing) Then
                            Set MaPlage = Range(PlageD)
                        End If
                    End If
                End If
            End If
        Else
            If Not (Intersect(Target, PlageAB) Is Nothing) Then
                Set PlageAA = Union(Range(PlageE), Range(PlageF))
                If Not (Intersect(Target, PlageAA) Is Nothing) Then
                    If Not (Intersect(Target, Range(PlageE)) Is Nothing) Then
                        Set MaPlage = Range(PlageE)
                    Else
                        If Not (Intersect(Target, Range(PlageF)) Is Nothing) Then
                            Set MaPlage = Range(PlageF)
                        End If
                    End If
                Else
                    If Not (Intersect(Target, Range(PlageG)) Is Nothing) Then
                        Set MaPlage = Range(PlageG)
                    End If
                End If
            End If
        End If
           
    End Sub
    


    K
    0