[VBA] Boucle pour passer de Range en Range une fois les plages identifiées

peper_eliot

XLDnaute Junior
Bonsoir à tous,
Je suis sûr que la solution doit être simple, j'ai comme qui dirait un souci de méthode.... :eek:
Alors je fais humblement appel à vous ;)

Alors voilà j'ai déclaré des plages

Set plage1 = Range("Tableau7[CB]")
Set plage2 = Range("Tableau7[CB2]")
Set plage3 = Range("Tableau7[CB4]")
...
et je voudrai boucler sur celles-ci en faisant
For i = 1 To 3
For Each c In Range("plage" & i) ET LA C'EST LA CATA... la méthode n'est pas la bonne...
....
Next
i = i+1
Next

D'avance merci :rolleyes:
 

ROGER2327

XLDnaute Barbatruc
Re : [VBA] Boucle pour passer de Range en Range une fois les plages identifiées

Bonjour peper_eliot


Essayez ceci :​
VB:
Sub tata()
Dim i%, plg(), c As Range, plage1 As Range, plage2 As Range, plage3 As Range
    Set plage1 = Range("Tableau7_CB")
    Set plage2 = Range("Tableau7_CB2")
    Set plage3 = Range("Tableau7_CB4")
    plg = Array(plage1, plage2, plage3)
    For i = 0 To 2: For Each c In plg(i)
        '....
    Next c, i
End Sub
ou simplement :​
VB:
Sub tutu()
Dim i%, plg(), c As Range
    plg = Array(Range("Tableau7_CB"), Range("Tableau7_CB2"), Range("Tableau7_CB4"))
    For i = 0 To 2: For Each c In plg(i)
        '....
    Next c, i
End Sub



ROGER2327
#6117


Lundi 2 Tatane 139 (Commémoration du Père Ebé - fête Suprême Quarte)
27 Messidor An CCXX, 9,4841h - ail
2012-W28-7T22:45:42Z
 
Dernière édition:

peper_eliot

XLDnaute Junior
Re : [VBA] Boucle pour passer de Range en Range une fois les plages identifiées

Oh... trop fort.. un Array... je n'y Array même pas pensé en Rayve...
Je met un GROS post-it sur ta réponse ;)
Mais, honte à moi, cela ne marchera pas car, en fait
for each c in plage1
doit me trouver la couleur de la cellule
For Each c In plage1
'repport de l'UE
If c.Interior.Color = RGB(51, 204, 51) Then

Donc, pour l'instant, je me fait des bouclettes avec ceci
Code:
For Each c In plage1
'repport de l'UE
    If c.Interior.Color = RGB(51, 204, 51) Then
    c.Activate
    l = c.Row
        With Range("C" & l)
        .FormulaR1C1 = c
        .Interior.Color = RGB(51, 204, 51) 'passer la cellule en vert
            If Left(c.Offset(0, 1), 1) = "j" Then
            .Interior.Color = RGB(251, 204, 51) 'passer la cellule en orange
            End If
            If Left(c.Offset(0, 1), 3) = "En " Then
            .Interior.Color = RGB(0, 204, 204) 'passer la cellule en bleu
            End If
        End With
    End If
'repport des ENS
If c.Interior.Color <> RGB(51, 204, 51) Then
    c.Activate
    l = c.Row
    If c.Offset(0, -4) = "B-" Or c.Offset(0, -4) = "C" Then
    Range("BJ" & l).FormulaR1C1 = Range("A8") & " " & Range("B8")
    End If
    If c.Offset(0, -2) = "B-" Or c.Offset(0, -2) = "C" Then
    Range("BL" & l).FormulaR1C1 = Range("A10") & " " & Range("B10")
    End If
    If c.Offset(0, -1) = "B-" Or c.Offset(0, -1) = "C" Then
    Range("BM" & l).FormulaR1C1 = Range("A11") & " " & Range("B11")
    End If
End If
    

Next


Excuse moi de n'avoir pas été plus précis dans mon ennoncé, mais je suis bien content que tu m'ai répondu avec un Array ;)


Merci beaucoup ROGER2327
 

ROGER2327

XLDnaute Barbatruc
Re : [VBA] Boucle pour passer de Range en Range une fois les plages identifiées

Re...



Et pourquoi pas quelque chose de ce genre ?​
VB:
Sub tutu()
Dim i%, l&, plg(), c As Range, pl As Range
    plg = Array(Range("Tableau7_CB"), Range("Tableau7_CB2"), Range("Tableau7_CB4"))
    For i = 0 To 2: For Each pl In plg(i)

        For Each c In pl.Cells
            If c.Interior.Color = RGB(51, 204, 51) Then
                c.Activate
                l = c.Row
                With Range("C" & l)
                    .FormulaR1C1 = c
                    .Interior.Color = RGB(51, 204, 51) 'passer la cellule en vert
                    If Left(c.Offset(0, 1), 1) = "j" Then
                        .Interior.Color = RGB(251, 204, 51) 'passer la cellule en orange
                    End If
                    If Left(c.Offset(0, 1), 3) = "En " Then
                        .Interior.Color = RGB(0, 204, 204) 'passer la cellule en bleu
                    End If
                End With
            End If
            If c.Interior.Color <> RGB(51, 204, 51) Then
                c.Activate
                l = c.Row
                If c.Offset(0, -4) = "B-" Or c.Offset(0, -4) = "C" Then
                    Range("BJ" & l).FormulaR1C1 = Range("A8") & " " & Range("B8")
                End If
                If c.Offset(0, -2) = "B-" Or c.Offset(0, -2) = "C" Then
                    Range("BL" & l).FormulaR1C1 = Range("A10") & " " & Range("B10")
                End If
                If c.Offset(0, -1) = "B-" Or c.Offset(0, -1) = "C" Then
                    Range("BM" & l).FormulaR1C1 = Range("A11") & " " & Range("B11")
                End If
            End If
        Next

    Next pl, i
End Sub



ROGER2327
#6118


Mardi 3 Tatane 139 (Sainte Crapule, puriste et Saint Fantomas, archange - fête Suprême Quarte)
28 Messidor An CCXX, 0,3902h - vesce
2012-W29-1T00:56:11Z
 

Discussions similaires

Réponses
11
Affichages
498

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972