Double For Each

Bonjour,

Je travaille avec deux feuilles "Relevés" et "Observations".

Mon objectif est que pour chaque cellule vide de la colonne B de la feuille "Observations", la cellule associée de la colonne G de la feuille "Relevés" se colore.

J'ai donc effectué le script suivant :

Sub condition()

Dim espece As Range
Dim num_releve As Range

ThisWorkbook.Sheets("Relevé").Activate
Set num_releve = ActiveSheet.Range("G3:G6")

ThisWorkbook.Sheets("Observations").Activate
Set espece = ActiveSheet.Range("B3:B6")

For Each i In espece
    For Each j In num_releve
        If Not IsError(i.Value) Then
            If CStr(i.Value) <> vbNullString Then j.Interior.ColorIndex = 6
        End If
    Next j
Next i

End Sub

Le souci que je rencontre est que les cellules de la feuille "Relevés" se colorent même si la cellule associée de la feuille "Observations" est vide. Pour info, seule la 1ère ligne de la colonne G "Observations" est remplie.

Je suppose que le souci provient du double For Each mais ne vois pas comment solutionner le problème..

Auriez-vous des idées ?

Merci beaucoup !

Julien

Bonjour,

ce n'est pas bon.

Pour chaque cellule de B tu vas boucler toutes les cellules de G, soit 4x4 boucles au lieu de 4 suffisantes.

Boucle sur B et met à jour G même ligne.

Et pour ton exemple une simple MFC suffit, pas besoin de vba pour ça.

eric

Bonjour Julien, bonjour le forum,

Peut-Être comme ça :

Sub condition()
Dim R As Worksheet
Dim O As Worksheet
Dim C As Range

Set R = Worksheets("Relevé")
Set O = Worksheets("Observations")
For Each C In O.Range("B3:B6")
    If C.Value = "" Then R.Cells(C.Row, "G").Interior.ColorIndex = 6
Next C
End Sub
ThauThème a écrit :

Bonjour Julien, bonjour le forum,

Peut-Être comme ça :

Sub condition()
Dim R As Worksheet
Dim O As Worksheet
Dim C As Range

Set R = Worksheets("Relevé")
Set O = Worksheets("Observations")
For Each C In O.Range("B3:B6")
    If C.Value = "" Then R.Cells(C.Row, "G").Interior.ColorIndex = 6
Next C
End Sub

Ca fonctionne très bien, merci beaucoup pour l'aide et le temps que vous me faites gagner !

Je me permets d'abuser un peu.. est-ce possible de réaliser la condition suivante : si C.Value est vide ET R.Value correspondante est vide, alors R.Cells(C.Row, "G").Interior.ColorIndex = 6 ?

Merci encore !

Julien

Bonjour Julien, bonjour le forum,

Pas Sûr d'avoir bien compris... Essaie comme ça :

Sub condition()
Dim R As Worksheet
Dim O As Worksheet
Dim C As Range

Set R = Worksheets("Relevé")
Set O = Worksheets("Observations")
For Each C In O.Range("B3:B6")
    If C.Value = "" And R.Cells(C.Row, "B") = "" Then R.Cells(C.Row, "G").Interior.ColorIndex = 6
Next C
End Sub
Rechercher des sujets similaires à "double each"