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

Fermé
UnVBAliable - Modifié le 20 févr. 2018 à 13:25
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 - 21 févr. 2018 à 04:27
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.
A voir également:

2 réponses

Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
21 févr. 2018 à 01:40
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
Modifié le 21 févr. 2018 à 04:28
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