Utiliser la fonction union VBA pour append des cellules aux limites

J'essaie d'append certaines cellules à leurs gammes respectives en fonction de leur couleur intérieure en utilisant la méthode de l'union. Le code que j'utilise est le suivant:

For Each cell In EntirePossibleRange If cell.Interior.Color = RGB(132, 151, 176) Then Set AccessabilityRange = Union(AccessabilityRange, Range("B" & cell.Row) Else If cell.Interior.Color = RGB(244, 176, 132) Then Set ConsistencyRange = Union(ConsistencyRange, Range("B" & cell.Row) Else If cell.Interior.Color = RGB(255, 217, 102) Then Set EfficacyRange = Union(EfficacyRange, Range("B" & cell.Row) Else cell.Interior.Color = RGB(191, 191, 191) Then Set WiderImpactsRange = Union(WiderImpactsRange, Range("B" & cell.Row) End If Next cell End Sub 

Cependant, le code ne s'exécute pas et lance une erreur de syntaxe. Je ne peux pas comprendre quelle est l'erreur de syntaxe.

Vous pouvez append une fonction distincte pour éviter de répéter les mêmes controls de code à chaque fois:

 Function JoinRanges(r1 As Range, r2 As Range) As Range If r1 Is Nothing Then Set JoinRanges = r2 Else If r2 Is Nothing Then Set JoinRanges = r1 Else Set JoinRanges = Union(r1, r2) End If End If End Function 

alors votre code devient (j'utiliserais Select Case aussi;)):

 For Each cell In EntirePossibleRange Select Case cell.Interior.Color Case RGB(132, 151, 176) Set AccessabilityRange = JoinRanges(AccessabilityRange, Range("B" & cell.Row)) Case RGB(244, 176, 132) Set ConsistencyRange = JoinRanges(ConsistencyRange, Range("B" & cell.Row)) Case RGB(255, 217, 102) Set EfficacyRange = JoinRanges(EfficacyRange, Range("B" & cell.Row)) Case RGB(191, 191, 191) Set WiderImpactsRange = JoinRanges(WiderImpactsRange, Range("B" & cell.Row)) End Select Next cell 

Il serait plus clair d'utiliser Select Case et handle pour les plages non existantes, c'est-à-dire.

 For Each cell In EntirePossibleRange Select Case cell.Interior.Color Case RGB(132, 151, 176) If Not AccessabilityRange Is Nothing Then Set Accessabilange = Union(AccessabilityRange, Range("B" & cell.Row)) Else Set Accessabilange = Range("B" & cell.Row) End If Case RGB(244, 176, 132) If Not ConsistencyRange Is Nothing Then Set ConsistencyRange = Union(ConsistencyRange, Range("B" & cell.Row)) Else Set SetConsistencyRange = Range("B" & cell.Row) End If 'étc Case Else 'other option here End Select Next cell