macro mise en forme conditionnelle

chifounou

XLDnaute Occasionnel
Bonjour,

Je fais normalement mes mises en forme conditionnelle à partir de formules, sauf que cette mise en forme là n'est pas proposée comme choix dans ma version d'Excel

Y'aurait-il svp une macro faisant le même office ? je joinds un fichier explicatif

Salutations
 

Pièces jointes

  • macro mise en forme conditionnelle.xlsm
    324.4 KB · Affichages: 92

Roland_M

XLDnaute Barbatruc
re

EDIT: modif suite à ton message, reprend cette macro:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B23:C36")) Is Nothing Then
Dim R As Range
For Each R In Range("B23:C36")
If R.Value > 0 Then R.Interior.ColorIndex = 4 Else R.Interior.ColorIndex = 3
Next
End If
End Sub
 
Dernière édition:

chifounou

XLDnaute Occasionnel
re

EDIT: modif suite à ton message, reprend cette macro:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B23:C36")) Is Nothing Then
Dim R As Range
For Each R In Range("B23:C36")
If R.Value > 0 Then R.Interior.ColorIndex = 4 Else R.Interior.ColorIndex = 3
Next
End If
End Sub

Merci Roland, voilà où j'en suis resté

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("K6:M405")) Is Nothing Then
Target.Select
If Target.Value > 0 Then
Selection.FormatConditions.AddDatabar
Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.MinPoint.Modify newtype:=xlConditionValueNumber, newvalue:=0
.MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:="=$M$405"
End With
With Selection.FormatConditions(1).BarColor
.Color = 5287936
.TintAndShade = 0
End With
ElseIf Target.Value < 0 Then
Selection.FormatConditions.AddDatabar
Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.MinPoint.Modify newtype:=xlConditionValueNumber, newvalue:=0
.MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:="=$K$6"
End With
With Selection.FormatConditions(1).BarColor
.Color = 255
.TintAndShade = 0
End With
End If
End If
Application.EnableEvents = True
End Sub


Le hic, c'est que j'ai besoin que celà se déclenche sur un changement de valeur issue de FORMULES. Mon Range K6:M405 ne contient que des cellules à formule.

Hors je ne sais pas le faire proprement pour un range... (j'ai trouvé une méthode fonctionnelle seulement de cellule à cellule, isolée)
 

Roland_M

XLDnaute Barbatruc
Bonjour,

je ne connais pas ce genre de code et l'enregistreur de macro ne fonctionne pas avec ceci !?
mais je crois ceci ça devrait le faire !?
j'ai fais des essais sur ce range "K6:M405" et ça fonctionnait bien !
mais j'ai du rajouter un R.FormatConditions.Delete sinon ça va finir par planter car ça crée chaque fois des conditions qui s'accumulent !

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("K6:M405")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim R As Range
For Each R In Range("K6:M405")
    R.FormatConditions.Delete
If R.Value > 0 Then
    R.FormatConditions.AddDatabar
    R.FormatConditions(R.FormatConditions.Count).ShowValue = True
    R.FormatConditions(R.FormatConditions.Count).SetFirstPriority
    With R.FormatConditions(1)
     .MinPoint.Modify newtype:=xlConditionValueNumber, newvalue:=0
     .MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:="=$M$405"
    End With
    With R.FormatConditions(1).BarColor
     .Color = 5287936: .TintAndShade = 0
    End With
ElseIf R.Value < 0 Then
    R.FormatConditions.AddDatabar
    R.FormatConditions(R.FormatConditions.Count).ShowValue = True
    R.FormatConditions(R.FormatConditions.Count).SetFirstPriority
    With R.FormatConditions(1)
     .MinPoint.Modify newtype:=xlConditionValueNumber, newvalue:=0
     .MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:="=$K$6"
    End With
    With R.FormatConditions(1).BarColor
     .Color = 255: .TintAndShade = 0
    End With
End If
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
 
Dernière édition:

chifounou

XLDnaute Occasionnel
Mon code de mise en forme est issu de l'enregistreur.

Le code tu m'as fourni fonctionne comme le mien avant. Pour qu'il s'active, je dois changer à la mano une cellule du Range ....mais celà ne réagit pas si je change une cellule disons en B2 qui commande en tant que valeur les formules des cellules de K6:M405

(en tout cas, bon point, ça ne plante pas)
 

Roland_M

XLDnaute Barbatruc
re

mais moi je pensais que c'était uniquement mettre à jour le tableau si tu modifiais une cellule de ce tableau !
c'est pas facile à comprendre ton truc !?
tu veux quoi, que le tableau soit à jour, mais quand et comment quelles conditions, car ta macro ne montre rien de tout ça !
on n'est dans la devinette !?
et ton classeur c'est pareil on ne vois rien du tableau K6 ...
tout ce que je vois c'est B23 : C36 c'est tout !

EDIT: c'est pour ça que personne ne répond, ils ne savent pas très bien ce que tu veux !? tu manques de précisions !
ici tu as bien mis:
If Not Intersect(Target, Range("K6:M405")) Is Nothing Then
donc uniquement dans cette zone ! faudrait savoir !?


avec 2007 l'enregistreur de macros ne fonctionne pas avec ça et pas plus qu'avec les graphiques
quand je pense qu'avec 2003 et xp j'étais satisfait !
le progrès en informatique c'est avancer de deux pas et reculer d'un pas !
 
Dernière édition:

chifounou

XLDnaute Occasionnel
autant pour moi si je vous ai perdu en cours de route ! je recommence la demande de zéro en joignant un nouveau fichier

toutes les cellules K6:M405 contiennent une formule fonction de la case jaune E27

je vise la mise en forme montrée dans le tableau (barre de données vertes si valeur cellule >0 dépendant de M405 pour le max, barre de données rouges si valeur cellule <0 dépendant de K6) ....mais que celà s'auto-ajuste, se réadapte lorsque E27 est changé (pour 1 ou 0 par exemple)

(ta macro à la racine de la feuille est présente simplement pour le code de mise en forme "barre de données" à repiquer, sinon ne fonctionne pas)

désolé pour la confusion ! merci encore
 

Pièces jointes

  • macro mise en forme conditionnelle.xlsm
    27.4 KB · Affichages: 64

Roland_M

XLDnaute Barbatruc
re

donc le tableau se remet à jour et s'adapte selon valeur de E27 !
alors dans ce cas tu remplaces ceci:
If Intersect(Target, Range("K6:M405")) Is Nothing Then Exit Sub
par
If Intersect(Target, Range("E27")) Is Nothing Then Exit Sub
si c'est pas cette cellule modifiée il sort, sinon les conditions seront recréés aux nouvelles valeurs

EDIT: au fait tout à l'heure tu parlais de B12 !? c'est fini ça ? maintenant c'est E27 ? il y en a d'autres ainsi ?
 

Roland_M

XLDnaute Barbatruc
re et dern !?

c'est pour cela, bien souvent on perd tu temps et on fini par abandonner !
surtout quand on ne sait pas de où on part et où on va !(hum ! je sais pas si c'est bien français ça !?)

il faut toujours bien présenter les choses du départ !
tu aurais présenté ça au début c'était tout de même plus simple et plus rapide !

allez on dira à la prochaine ! bonne soirée !
 

Discussions similaires