Utiliser une variable tableau

bonjour,

voila je veux utiliser l'instruction suivante

Application.Intersect(Target, Range("b6,d6,f6,h6,j6"))

mais je voudrai utiliser une variable tableau en remplacement de "b6,d6,f6,h6,j6" pour pouvoir y ajouter encore plus de references

merci

Bonjour,

Ce n'est pas très clair.

La méthode Intersect attend un objet Range. La définition de l'objet Range en utilisant la propriété Range attend une référence sous forme de donnée String.

"b6,d6,f6,h6,j6" est une telle chaîne qui conduira au renvoi d'une plage multizones.

Que veux-tu donc faire avec ton tableau ?

Bonjour,

Bonjour Maréchal,

l'objet range ne permet pas d'utiliser un tableau pour préciser les adresses à prendre en compte.

tu peux cependant utiliser un moyen détourné

Sub aargh()
    t = Array("A6", "B6", "C6", "D5")
    If Not Application.Intersect(target, Range(Join(t, ","))) Is Nothing Then
    End If
End Sub

merci,

la solution proposée par h2so4 me convient parfaitement

cordialement

Salut h2so4...

Bonjour,

Si la concaténation de tes adresses risques de dépasser 255 caractères (virgules comprises), l'utilisation de "Range()" générera une erreur alors que l'union de plage te permet d'aller beaucoup plus loin mais il faut faire une boucle.

Voir ce post :

https://forum.excel-pratique.com/excel/selectionner-un-range-espace-de-plusieurs-lignes-t101871.html

Un petit test avec Join() (qui, en passant, est une très bonne idée de h2so4 que je salut au passage de même que MFerrand) :

Sub Test()

    Dim I As Long
    Dim J As Long
    Dim Chaine As String
    Dim T
    For I = 4 To 228 Step 4 '227<--- avec 227; pas d'erreur

        Chaine = Chaine & Cells(I, 3).Address(0, 0) & ","

    Next

    Chaine = Left(Chaine, Len(Chaine) - 1)

    MsgBox Len(Chaine)

    T = Array(Chaine)

    Range(Join(T, ",")).Select

End Sub

Le code avec l'union de plages:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Plage As Range
    Dim Tbl
    Dim I As Long

    Tbl = Array("B6", "D6", "F6", "H6", "J6", "B10", "D10", "F10", "H10", "J10")

    'initialiser la plage
    Set Plage = Range(Tbl(0))

    For I = 1 To UBound(Tbl): Set Plage = Union(Plage, Range(Tbl(I))): Next I

    If Not Application.Intersect(Target, Plage) Is Nothing Then MsgBox "OK !"

End Sub

Bonsoir,

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A6:C6,D5")) Is Nothing Then
        MsgBox "coucou"
    End If
End Sub

Ceuzin

Rechercher des sujets similaires à "utiliser variable tableau"