Voici mon problème.
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 C
et 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 № 1Point 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".