Sélection de la partie d'une ligne dynamicment pour la coloration des cellules

Je souhaite changer la couleur de fond des cellules, mais pas la ligne entière, en fonction de la valeur d'une cellule. J'ai un code qui fait ce que je veux, mais je suis sûr qu'il existe un moyen plus efficace et j'aimerais get de l'aide pour rendre mon code plus efficace. Vous findez ci-dessous un extrait du code qui exécute la tâche.

Sub chg_bkgrnd_Color() Dim rng As Range Dim row As Range Dim cell As Range Dim counter As Long Set rng = Range("k2:k23") Range("k2").Select For Each cell In rng Select Case cell.Value Case Is = "Closed" ActiveCell.Offset(counter, -10).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -10).Interior.TintAndShade = -0.249977111117893 ActiveCell.Offset(counter, -9).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -9).Interior.TintAndShade = -0.249977111117893 ActiveCell.Offset(counter, -8).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -8).Interior.TintAndShade = -0.249977111117893 ActiveCell.Offset(counter, -7).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -7).Interior.TintAndShade = -0.249977111117893 End Select counter = counter + 1 Next End Sub 

Le formatting conditionnel serait le mieux, mais si vous souhaitez utiliser le formatting normal, il s'agit d'une version simplifiée de votre code:

 Sub chg_bkgrnd_Color() Dim i& For i = 2 To 23 If Cells(i, 11) = "Closed" Then With Range(Cells(i, 1), Cells(i, 4)).Interior .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.249977111117893 End With End If Next End Sub 

Suite à la suggestion de @Jeeped, voici une version à utiliser pour automatiser cela. Dans le module de code de la feuille de calcul, placez ceci:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) RangeAutoBackFill "Closed", 11, 2, 23, 1, 4, xlThemeColorDark1, -0.249977111117893 End Sub 

Ensuite, dans un module de code standard, placez ceci:

 Public Sub RangeAutoBackFill(Key$, KeyCol&, KeyRowLow&, KeyRowHigh&, FillColLow&, FillColHigh&, FillTheme&, FillTint#) Dim i& For i = KeyRowLow To KeyRowHigh If Cells(i, KeyCol) = Key Then With Range(Cells(i, FillColLow), Cells(i, FillColHigh)).Interior .ThemeColor = FillTheme .TintAndShade = FillTint End With End If Next End Sub 

Vous requestz comment extraire les cellules des colonnes A: D pour avoir une mise en évidence selon que la valeur correspondante dans la colonne K est "Fermé" ou non. Le formatting conditionnel est une meilleure solution puisqu'il fournit une réaction automatique automatisée aux changements dans la colonne K instantanément.

 Sub Create_Conditional_Formatting_for_AD_based_on_K_Closed() Dim v As Long, vSTATEs As Variant, vCOLOURs As Variant vSTATEs = Array("Open", "Closed", "Pending") vCOLOURs = Array(3, 10, 5) With ActiveSheet.Columns("A:D") .FormatConditions.Delete For v = LBound(vSTATEs) To UBound(vSTATEs) With .FormatConditions.Add(Type:=xlExpression, _ Formula1:="=$K1=" & Chr(34) & vSTATEs(v) & Chr(34)) With .Interior .ColorIndex = vCOLOURs(v) End With .StopIfTrue = True End With Next v End With End Sub 

Cette routine peut être bien adaptée à une situation où vous souhaitez appliquer les règles CF à un grand nombre de feuilles de travail ou comme une tâche récurrente sur une import régulière à une nouvelle feuille de calcul, mais il est probablement plus important que de simplement créer les six règles manuellement.

J'ai simplifié la sélection d'une couleur de remblai avec la propriété .ColorIndex . Vous pouvez find ici une table de numbers et de colors ColorIndex.

Veuillez noter que je supprime les règles précédentes de CF avec un. S'applique à: des colonnes A: D avant de créer de nouvelles. Cela peut être une considération si vous avez d'autres règles des FC régissant le comportement dans les colonnes A: D.

L'utilisation d'une formule dans une règle CF et le locking de la colonne K reference avec un indicateur $ absolu vous permet de mettre en œuvre un S'applique à: qui est différent de la colonne évaluée. Utilisez Home ► Formatage conditionnel ► Gérer les règles pour afficher les résultats.

Méthode manuelle:

  1. Sélectionnez les colonnes A: D avec A1 comme ActiveCell
  2. Choisissez Accueil ► Formatage conditionnel ► Nouvelle règle
  3. Choisissez Utiliser une formule pour déterminer quelles cellules formater et fournir ce qui suit dans les valeurs de format où cette formule est vraie: zone de text:

    =$K1="closed

  4. Cliquez sur le format et choisissez une combinaison de surbrillance appropriée à partir de l'onglet Remplissage .
  5. Cliquez sur OK pour accepter la modification de mise en forme, puis sur OK pour créer la règle.
  6. Passez à l'étape 2 et répétez le cas échéant. Si vous commencez par Accueil ► Formatage conditionnel ► Gérer les règles et choisissez Nouveau, vous pouvez save quelques clics.

Vos résultats devraient ressembler à ce qui suit.

Colonne spécifique de mise en forme conditionnelle basée sur une autre colonne