/ / Mise en forme conditionnelle à l'aide de VBA, Mise en forme dynamique d'une plage en faisant référence à une autre cellule pour la mise en forme - excel, vba, dynamique, mise en forme, conditionnelle

Mise en forme conditionnelle à l'aide de VBA, mise en forme dynamique d'une plage en faisant référence à une autre cellule pour la mise en forme - excel, vba, dynamique, mise en forme, conditionnelle

Voici mon problème.

entrer la description de l'image ici

Donc, appliqué à la gamme K3:K10, J'ai plusieurs mises en forme conditionnelles différentesles règles qui nécessitent une chaîne de texte spécifique composée du contenu d'une cellule référencée et d'une chaîne de texte constante. Chaque règle applique une couleur différente pour une cellule spécifique référencée et une combinaison de chaîne de texte constant (DEAD ou ALIVE). Par exemple, dans la plage, si une cellule contient le mot "Chien", puis un espace, puis le mot "Morte", elle sera mise en forme en rouge. La légende en colonnes D et E montre quelles couleurs s'appliquent à chaque animal pour la combinaison de critères (Animal et Mort / Vivant). Ce que je veux faire, c'est pouvoir choisir une couleur pour un animal avec une liste déroulante dans la colonne Cet demander aux FC de modifier le formatage de n'importe laquelle des cellules comprises dans la plage K3:K10 pour correspondre à la mise en forme / style de la ligne concernée dans la colonne C quand une règle particulière est vraie.

Donc si K3 est "Dog Dead", puis appliquez le même format que dans la cellule D3 ou s'il est "Dog Alive" appliquer le même format que E3. Je ne veux pas simplement demander à CF de faire une cellule contenant "Dog Dead" rouge ou "Dog Alive" rouge clair, parce que la couleur du chien pourrait ne pas être rouge. Elle pourrait être verte ou bleue.

Je pense donc que je souhaite obtenir une mise en forme conditionnelle dynamique à l’aide de VBA. Est-ce que quelqu'un peut m'aider à démarrer?

Merci,

Andy.

Réponses:

0 pour la réponse № 1

Point de départ !!
Dans l'événement de la feuille:

Private Sub Worksheet_Change(ByVal Target As Range)
ApplyCond Range("K" & Target.Row)
End Sub

Et dans un module:

Public Sub ApplyCond(xx As Range)
If xx.Value = "" Then Exit Sub
xx.FormatConditions.Delete
xx.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=xx.Value
kk = Split(xx.Value)
a = -1
b = -1
For i = LBound(kk) To UBound(kk)
Select Case kk(i)
Case "Dead": a = 4
Case "Alive": a = 5
Case Else
For e = 3 To 9999
If Range("B" & e).Value = "" Then Exit For
If Range("B" & e).Value = kk(i) Then
b = e
End If
Next
End Select
Next

" Apply Format
On Error Resume Next
If (a > 0) And (b > 0) Then
With xx.FormatConditions(1).Interior
.PatternColorIndex = Cells(b, a).Interior.PatternColorIndex
.Color = Cells(b, a).Interior.Color
.TintAndShade = Cells(b, a).Interior.TintAndShade
.Pattern = Cells(b, a).Interior.Pattern
.PatternThemeColor = Cells(b, a).Interior.PatternThemeColor
.ThemeColor = Cells(b, a).Interior.ThemeColor
.PatternTintAndShade = Cells(b, a).Interior.PatternTintAndShade
End With
With xx.FormatConditions(1).Font
.Bold = Cells(b, a).Font.Bold
.Italic = Cells(b, a).Font.Italic
.Underline = Cells(b, a).Font.Underline
.Strikethrough = Cells(b, a).Font.Strikethrough
.ThemeColor = Cells(b, a).Font.ThemeColor
.TintAndShade = Cells(b, a).Font.TintAndShade
.Color = Cells(b, a).Font.Color
.TintAndShade = Cells(b, a).Font.TintAndShade
End With
End If
End Sub

Vous devez vérifier la formule Split. Peut-être qu'il vaut mieux utiliser une fonction LCase ou un autre filtre.
Dans ma fonction, je n’utilise pas la colonne "C".