union(.range( = limité ???

S

steve

Guest
bonsoir
j'ai ce code qui me permet de selectionner des colonne non adjacentes.mais mon proble et qu'il y en a presque 100 et quand je rentre mon code au bout d'un certain nombre l'ecriture se met en rouge !! comment je peux faire?

dim r as long
r = selection.row
with activesheet
union(.range('a'& r), . range('b'& r) .....etc...jusqu'au momen ou ......
Merci.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir STeve, le Forum

Tel que je vois on dirait qu'UNion est limité à Trente arguments...

Ceci dit on peut 'barbatruquer' facilement ;)

Option Explicit

Sub TestUnionOnUnion()
Dim Cell As Range
Dim MyRangePart1 As Range
Dim MyRangePart2 As Range
Dim MyBigRange As Range

Set MyRangePart1 = Union(Range('A1'), Range('A10'), Range('TOTO'))
Set MyRangePart2 = Union(Range('B1'), Range('B10'))
Set MyBigRange = Union(MyRangePart1, MyRangePart2)


   
For Each Cell In MyBigRange
        Cell.Interior.ColorIndex = 3
   
Next


End Sub


Tu noteras que TOTO est une plage nommée de cellules non-contigues ce qui est aussi en soit une autre solution...

Bonne Soirée
[ol]@+Thierry[/ol]
 
S

steve

Guest
tu veux dire que sur ma feuille si je selectionne mes cellule sur une ligne au hazard et que je nomme cette plage apres lors de l'execution de la macro ca pourrait marcher.? ca serait tellement plus simple.
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir steve, _Thierry,

En complément du post de _Thierry, mise à part la plage nommée (sans aucun doute la meilleure solution), je pense qu'il peut être aussi très simple de procéder par une boucle, du style :
Dim Plage As Range
Dim r As Long
Dim
i As Integer, Colonne As Integer
      r = Selection.Row
      With ActiveSheet
            'Définition de la première cellule de la plage souhaitée
            Set Plage = .Cells(r, 1)      '(à adapter)
            'Union avec les autres cellules à l'aide d'une boucle
            For i = 1 To 99                    '(pour une plage de 100 cellules)
                  'Détermination de la colonne de chaque cellule voulue
                  Colonne = Choose(i,1,2,5,15,27,28,36,.....)           '(à adapter et compléter)
                  'Union
                  Set Plage = Union(Plage, .Cells(r, Colonne))
            Next i
            Plage.Select
      End With
Cordialement,


PS : Heu...:eek:   _Thierry, je suppose que c'était juste pour donner un exemple à notre ami steve, mais...

Au lieu de :
For Each Cell In MyBigRange
      Cell.Interior.ColorIndex = 3
Next
moi, j'aurais bien vu :
MyBigRange.Interior.ColorIndex = 3
C'est plus simple et plus rapide, non ?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Didier, re Steve

Heu :unsure: Didier je pense que c'est une blague ? non ;)


Oui c'était pour éviter la MsgBox et un 'claquage de souris' à Steeve !!


Bonne soirée
[ol]@+Thierry[/ol]


PS très sympa ta boucle ;)
 

Discussions similaires

Réponses
2
Affichages
303

Statistiques des forums

Discussions
312 502
Messages
2 089 019
Membres
104 006
dernier inscrit
CABROL