Option Explicit Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name "Feuil1" And Target.Address "$A$1" Then Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets("Feuil1").Select 'Une nouvelle plage Range("A1").Select ActiveWorkbook.Names.Add Name:="Plage1", RefersToR1C1:="=Feuil1!R1C1" Sheets("Feuil2").Select 'Mise en forme conditionnelle Range("A1").Select Selection.FormatConditions.AddIconSetCondition Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .ReverseOrder = True .ShowIconOnly = False .IconSet = ActiveWorkbook.IconSets(xl3Flags) End With If Abs(Sheets("Feuil1").Range("A1") - Sheets("Feuil2").Range("A1")) <= 2 Then With Selection.FormatConditions(1).IconCriteria(2) .Type = xlConditionValueFormula .Value = "=Plage1+2" .Operator = 5 End With End If If Abs(Sheets("Feuil1").Range("A1") - Sheets("Feuil2").Range("A1")) <= 4 Then With Selection.FormatConditions(1).IconCriteria(3) .Type = xlConditionValueFormula .Value = "=Plage1+4" .Operator = 5 End With End If Range("A1").Select 'Pour se positionner proprement MsgBox "Vous venez de modifier la cellule " & Target.Address & " d'une valeur de " & Target.Value & " de la feuille " & Sh.Name End If If Sh.Name "Feuil2" And Target.Address "$A$1" Then Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets("Feuil1").Select 'Une nouvelle plage Range("A1").Select ActiveWorkbook.Names.Add Name:="Plage1", RefersToR1C1:="=Feuil1!R1C1" Sheets("Feuil2").Select 'Mise en forme conditionnelle Range("A1").Select Selection.FormatConditions.AddIconSetCondition Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .ReverseOrder = True .ShowIconOnly = False .IconSet = ActiveWorkbook.IconSets(xl3Flags) End With If Abs(Sheets("Feuil1").Range("A1") - Sheets("Feuil2").Range("A1")) <= 2 Then With Selection.FormatConditions(1).IconCriteria(2) .Type = xlConditionValueFormula .Value = "=Plage1+2" .Operator = 5 End With End If If Abs(Sheets("Feuil1").Range("A1") - Sheets("Feuil2").Range("A1")) <= 4 Then With Selection.FormatConditions(1).IconCriteria(3) .Type = xlConditionValueFormula .Value = "=Plage1+4" .Operator = 5 End With End If Range("A1").Select 'Pour se positionner proprement MsgBox "Vous venez de modifier la cellule " & Target.Address & " d'une valeur de " & Target.Value & " de la feuille " & Sh.Name End If End Sub
Option Explicit Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim F1 As String, F2 As String, L1 As String, L2 As String 'Définitions des variables Dim C1 As Integer, C2 As Integer Dim V1 As Long, V2 As Long F1 = Worksheets("Feuil1").Name 'Nom de la première feuille F2 = Worksheets("Feuil2").Name 'Nom de la deuxième feuille L1 = "A" 'Cellule de la première feuille C1 = 1 'Cellule de la première feuille L2 = "A" 'Cellule de la deuxième feuille C2 = 1 'Cellule de la deuxième feuille V1 = 2 'Premier intervalle pour le jeu d'icônes V2 = 4 'Deuxième intervalle pour le jeu d'icônes If IsNumeric(Target.Value) Then If (Sh.Name F1 And Target.Address "$" & L1 & "$" & C1) Or (Sh.Name = F2 And Target.Address = "$" & L2 & "$" & C2) Then Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets(F1).Select 'Nomme une nouvelle plage Range("" & L1 & "" & C1).Select ActiveWorkbook.Names.Add Name:="Plage1", RefersToR1C1:=ActiveCell Sheets(F2).Select 'Mise en forme conditionnelle Range("" & L2 & "" & C2).Select Selection.FormatConditions.AddIconSetCondition Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .ReverseOrder = True .ShowIconOnly = False .IconSet = ActiveWorkbook.IconSets(xl3Flags) End With If Abs(Sheets(F1).Range("" & L1 & "" & C1) - Sheets(F2).Range("" & L2 & "" & C2)) <= 2 Then With Selection.FormatConditions(1).IconCriteria(2) .Type = xlConditionValueFormula .Value = "=Plage1+" & V1 .Operator = 5 End With End If If Abs(Sheets(F1).Range("" & L1 & "" & C1) - Sheets(F2).Range("" & L2 & "" & C2)) <= 4 Then With Selection.FormatConditions(1).IconCriteria(3) .Type = xlConditionValueFormula .Value = "=Plage1+" & V2 .Operator = 5 End With End If Range("" & L2 & "" & C2).Select 'Pour se positionner proprement MsgBox "Vous venez de modifier la cellule " & Target.Address & " d'une valeur de " & Target.Value & " de la feuille " & Sh.Name End If End If End Sub
C'est l'effet Dimanche ou alors j'ai mal exposé mon problème peut-être ?
Voici les conditions qui s'appliquent à la cellule A1 de la feuille 2 ("b"):
-Si "a"-2<"b"<"a"+2 alors drapeau Vert
-Si "a"-4<"b"<"a"+4 alors drapeau Orange
-Si "a"-6<"b"<"a"+6 alors drapeau Rouge
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionLa finalité de mon objectif étant grosso-modo, de faire afficher le drapeau Vert si la valeur absolue de la différence entre "a" et "b" est inférieur à 2, drapeau Orange si la valeur absolue de la différence comprise entre 2 et 4, puis drapeau Rouge si la valeur absolue de la différence supérieur à 4.
Le problème c'est que je ne sais pas comment coder tout sa, et de plus je vois bien qu'il y a un problème d'intervalle car le "drapeau Rouge" englobe à la fois l'intervalle "drapeau Orange et "drapeau Vert"
toto = 1 Select Case toto Case Is <= 2 MsgBox "cas 1" Case Is <= 4 MsgBox "cas 2" Case Is <= 6 MsgBox "cas 3" End Select
que pourrait être la valeur absolue de la
différence entre "SERIEUX" et "COOL" ?
Option Explicit Sub Macro1() Select Case Sheets("Feuil2").Range("A1") Case (Sheets("Feuil1").Range("A1") - 2) To (Sheets("Feuil1").Range("A1") + 2) MsgBox "Drapeau Vert" Case (Sheets("Feuil1").Range("A1") - 4) To (Sheets("Feuil1").Range("A1") + 4) MsgBox "Drapeau Orange" Case Is < (Sheets("Feuil1").Range("A1") - 4) MsgBox "Drapeau Rouge" Case Is > (Sheets("Feuil1").Range("A1") + 4) MsgBox "Drapeau Rouge" End Select End Sub
-Si "a"-2<"b"<"a"+2 alors drapeau Vert
-Si "a"-4<"b"<"a"+4 alors drapeau Orange
-Si "a"-6<"b"<"a"+6 alors drapeau Rouge
toto = >Abs(x-y) select case toto case 2 .... case 4 .... case 6 .... end select
Case 0 ....
Que se passe t'il si je change la valeur "a" ou "b"
Option Explicit Sub Macro1() Sheets("Feuil1").Select Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets("Feuil2").Select Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets("Feuil1").Select 'Une nouvelle plage Range("A1").Select ActiveWorkbook.Names.Add Name:="Plage1", RefersToR1C1:="=Feuil1!R1C1" Sheets("Feuil2").Select 'Mise en forme conditionnelle Range("A1").Select Selection.FormatConditions.AddIconSetCondition Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .ReverseOrder = True .ShowIconOnly = False .IconSet = ActiveWorkbook.IconSets(xl3Flags) End With With Selection.FormatConditions(1).IconCriteria(2) .Type = xlConditionValueFormula .Value = "=Plage1+2" .Operator = 5 End With With Selection.FormatConditions(1).IconCriteria(3) .Type = xlConditionValueFormula .Value = "=Plage1+4" .Operator = 5 End With Sheets("Feuil2").Select 'Pour se positionner proprement Range("A1").Select End Sub
Dim Toto As Long 'Variables Toto = Abs(Sheets("Feuil2").Range("A1") - Sheets("Feuil1").Range("A1")) Sheets("Feuil2").Range("B1") = Toto Select Case Toto 'Méthode qui fonctionne Case Is <= 2 MsgBox "Drapeau Vert" Case Is <= 4 MsgBox "Drapeau Orange" Case Is > 4 MsgBox "Drapeau Rouge" End Select
Que se passe t'il si je change la valeur "a" ou "b"
Tu as pour cela au moins deux méthodes :
1) utiliser directement les formules de mise en forme conditionnelle
2) utiliser l'évènement Worksheet_Change et la fonction Intersect (par rapport au paramètre Target présent dans Worksheet_Change). Je te conseille cette deuxième procédure, plus souple, moins gourmande et correspondant mieux à toutes tes conditions).
Option Explicit Sub Macro1() Sheets("Feuil1").Select Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets("Feuil2").Select Cells.FormatConditions.Delete 'Supprime les mises en formes conditionnelles Sheets("Feuil1").Select 'Une nouvelle plage Range("A1").Select ActiveWorkbook.Names.Add Name:="Plage1", RefersToR1C1:="=Feuil1!R1C1" Sheets("Feuil2").Select 'Mise en forme conditionnelle Range("A1").Select Selection.FormatConditions.AddIconSetCondition Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .ReverseOrder = True .ShowIconOnly = False .IconSet = ActiveWorkbook.IconSets(xl3Flags) End With If Abs(Sheets("Feuil1").Range("A1") - Sheets("Feuil2").Range("A1")) <= 2 Then With Selection.FormatConditions(1).IconCriteria(2) .Type = xlConditionValueFormula .Value = "=Plage1+2" .Operator = 5 End With End If If Abs(Sheets("Feuil1").Range("A1") - Sheets("Feuil2").Range("A1")) <= 4 Then With Selection.FormatConditions(1).IconCriteria(3) .Type = xlConditionValueFormula .Value = "=Plage1+4" .Operator = 5 End With End If Sheets("Feuil2").Select 'Pour se positionner proprement Range("A1").Select End Sub