Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Boucle sur plages nommées

Calvus

XLDnaute Barbatruc
Bonjour,

Je pense avoir déjà fait cela, mais je ne me souviens pas, et du coup je ne suis pas sûr...

J'ai 6 plages, Plage1, Plage2, etc.

J'aimerais boucler dessus, mais cela ne fonctionne pas.
L'idée est de remplacer le numéro de ma plage par i :

VB:
Set Plage1 = Range("C9:G9")
Set Plage2 = Range("C21:G21")
Set Plage3 = Range("C33:G33")
Set Plage4 = Range("C45:G45")
Set Plage5 = Range("C57:G57")
Set Plage6 = Range("C69:G69")

For i = 1 To 6
    Plage(i).Select
Next i

Comment faire ?

Merci d'avance.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Calvus,
3 façons possibles parmi d'autres :
VB:
Sub Essai1()
Plage = Array(Range("C9:G9"), Range("C21:G21"), Range("C33:G33"), Range("C45:G45"), Range("C57:G57"), Range("C69:G69"))
For i = 0 To 5
    Plage(i).Select
Next i
End Sub
Sub Essai2()
Plage = Array("C9:G9", "C21:G21", "C33:G33", "C45:G45", "C57:G57", "C69:G69")
For i = 0 To 5
    Range(Plage(i)).Select
Next i
End Sub
Sub Essai3()
Dim Plage(6)
Set Plage(1) = Range("C9:G9")
Set Plage(2) = Range("C21:G21")
Set Plage(3) = Range("C33:G33")
Set Plage(4) = Range("C45:G45")
Set Plage(5) = Range("C57:G57")
Set Plage(6) = Range("C69:G69")
For i = 1 To 6
    Plage(i).Select
Next i
End Sub
 

Calvus

XLDnaute Barbatruc
Bonjour Sylvanu,

Merci, nickel !
Si je comprends bien, quelque soit le code choisi, il fallait que je déclare mes plages comme des tableaux et non comme des Range, c'est bien ça ?
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une autre voie
[adaptée à cet exemple précis]
Code:
Const rng As String = "C9"
Sub test()
mess = Range(rng).Resize(, 5).Address(0, 0) & vbCr
For i = 0 To 4
mess = mess & Range(rng).Offset((i + 1) * 12).Resize(, 5).Address(0, 0) & vbCr
Next
MsgBox mess
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
ouais si vous vous voulez

sinon il y a plus simple
et par pitié préciser le parent
VB:
Sub test()
 Dim MesPlages As Range
 With ActiveSheet
        Set MesPlages = Union(.[C9:G9], .[C21:G21], .[C33:G33], .[C45:G45], .[C57:G57], .[C69:G69])
        For Each area In MesPlages.Areas
            area.Select
        Next
    End With
End Sub

et si on doit incrémenter par leur index pour des futurs besoins dans le code
VB:
Sub test2()
 Dim MesPlages As Range
 With ActiveSheet
        Set MesPlages = Union(.[C9:G9], .[C21:G21], .[C33:G33], .[C45:G45], .[C57:G57], .[C69:G69])
        For i = 1 To MesPlages.Areas.Count
             MesPlages.Areas(i).Select
        Next
    End With
End Sub

voilà un tableau est superflu, la collection areas en est un finalement
et ca fait un code plus propre
 

Calvus

XLDnaute Barbatruc
Bonjour,

Merci de vos propositions.
Je suis toujours content d'apprendre, bien que le chinois de mon ami Staple me fasse toujours aussi mal à la tête...

Bonne soirée à vous.
 

Staple1600

XLDnaute Barbatruc
Bonsoir @Calvus

@Calvus
Je ne mets du chinois que dans mon bol de soupe
(ou plutôt de la nouille chinoise, avec un bilan carbone désastreux )

Où tu as vu des des scories de l'empire du Milieu dans mon VBA ?

J'en profite pour m'inspirer du code de sylvanu pour modifier mon code.
VB:
Const rng As String = "C9"
Sub test_B()
Dim Zig_Zag&, mess$
Bazinga = Int(VBA.Log(3333)) + VBA.Sqr(16)
For Zig_Zag = 1 To 6
mess = mess & Range(rng).Offset(Bazinga * Zig_Zag - Bazinga).Resize(, 5).Address(0, 0) & vbCr
Next
MsgBox mess, vbInformation, "Pardon, mais c'est dimanche, alors je m'amuse!"
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…