Problème de mise en forme conditionnelle

Résolu
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 9 oct. 2011 à 12:41
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 11 oct. 2011 à 16:31
Bonjour le Forum,

Je me retourne vers vous une nouvelle fois car je bloque sur un petit problème de mise en forme conditionnelle.

Voici la description du problème :

-Dans une première feuille Excel, j'ai une valeur dans la cellule A1. Une valeur décimale. Ici on va la noter "a" pour simplifier le problème.

-Dans une deuxième feuille Excel, j'ai une valeur dans la cellule A1. Une valeur décimale. Ici on va la noter "b" pour simplifier le problème.

-J'aimerais appliquer une mise en forme conditionnelle à la cellule A1 de ma deuxième feuille avec Excel 2007. Mise en forme avec jeux d’icônes, les 3 drapeaux que propose Excel.

-"b" peut être plus grand que "a" tout comme il peut être plus petit que "a".

-J'aimerais aider l'utilisateur dans sa prise de décision et le guider à faire son choix concernant la valeur de "b".

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


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"

Je suis perdu pour le coup. La 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.


Si vous avez des idées, des conseils je suis preneur.

Bien cordialement,

André qui se casse la tête lol


PS : Je désire programmer la mise en forme conditionnelle sous VBA (Macro Excel). De plus, j'ai bien compris que pour faire appel à une valeur qui se trouve sur une autre feuille il faut nommer la plage. Du coup on peut dire que la cellule A1 de la feuille 1 est une plage nommée "MaPlage"

29 réponses

SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
11 oct. 2011 à 12:51
Me voici de retour...avec de bonnes nouvelles. J'y suis arrivé ENFIN !

J'ai du travailler un peu sur l'objet "sh" de l’évènement "WorkBook_Change" qui me posait problème. J'ai finalement trouvé comment m'en servir astucieusement.

Je suis même allé un peu plus loin car le fait de devoir "appeler" une tierce Macro associée à mon évènement "WorkBook_Change" ne me plaisais pas du tout. J'ai donc tout placé dans mon "WorkBook". Comme sa, plus de problème.
De plus, je ne l'avais pas correctement précisé au début, mais mes feuilles n'existent pas au début de ma Macro. Elles sont créées au fur et à mesure que la Macro principale avance. Donc pas facile d'utiliser l’évènement "WorkSheet_Change" quand les feuilles n'existent pas^^. D’où l'utilisation de l’évènement "WorkBook_Change"

Je post ici le code le plus actualisé ( à placer dans un "WorkBook" et non un "module") :

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


Il ne reste plus qu'un problème que je vois à l'heure actuelle : Si je ne rentre pas un nombre dans ma cellule A1 de ma feuille 1 ou 2, alors sa me génère une erreur avec l'événement "WorkBook_Change". En effet je ne peux pas comparer une lettre à un nombre.

Question : Comment faire en sorte que l’évènement ne se déclenche que si le contenu de ma cellule A1 de ma feuille 1 ET A1 de ma feuille 2 sont des nombres au bon formats ? (avec une virgule et pas un point pour les nombres décimaux)
Ainsi si l'utilisateur entre une chaine de caractère ou par erreur de touche une lettre etc, alors l’évènement n'est pas pris en compte et sa ne fait pas bugger le programme.

Merci pour ces dernières précisions. Mon code sera alors optimisé je pense.

Bien cordialement,

André
3
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
11 oct. 2011 à 16:31
Comme promis me voici de nouveau...

Ayé mon problème est résolu à 100%. Merci à toi aussi Ucfoutu pour ton aide précieuse.

Le code a été testé et il fonctionne bien. A noter que j'ai particulièrement modifié le code pour le rendre plus souple et plus simple d'utilisation.
J'ai divisé le nombre de lignes par 2, mis les paramètres essentiels en variables pour éviter de devoir chercher dans le code la ou il faut changer les valeurs.

Du coup c'est que du bonheur et sa marche !

Je poste ci-après la version définitive du code :

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


Voila, 2 jours pour régler mon problème de drapeaux, mais je suis fière d'avoir pondu ce code avec un peu d'aide je dois l'admettre. Merci à ceux qui m'ont conseillé. C'est sympa de votre part.

Bien cordialement,

André qui a finit de se casser la tête^^


OUUUUUUF !
3
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
9 oct. 2011 à 19:53
Pas beaucoup d'idées on dirait...

C'est l'effet Dimanche ou alors j'ai mal exposé mon problème peut-être ?

N'hésitez pas à demander plus d'infos si besoin est.

Bien cordialement,

André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 oct. 2011 à 20:59
Bonjour,
C'est l'effet Dimanche ou alors j'ai mal exposé mon problème peut-être ?


je crains fort que oui, car ceci :
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


est "informatiquement" incompréhensible

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
9 oct. 2011 à 23:29
Alors comment rendre ceci informatiquement compréhensible ?

La 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.



Enfin si c'est possible bien sur...

André
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 oct. 2011 à 00:47
Bonsoir,

ce que voulait dire ucfoutu c' est qu' à ton avis,que pourrait être la valeur absolue de la
différence entre "SERIEUX" et "COOL" ?

[] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2011 à 07:01
1) une valeur x est comprise entre une valeur y et une valeur z si x est supérieur à y et inférieur à z ==>>
If x > y And x < z Then ..
2) prévoir le cas si = (à mettre dans > (>=) ou dans < (<=))
3) t'intéresser à Select Case,n bien confortable dans certains cas de figure.
surtout pour cette partie :
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"

Avec Select Case, en effet, la première condition vérifiée fait que les autres ne sont même pas "regardées".

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2011 à 07:12
un exemple ?
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

Bien que les 2ème et 3ème cas "englobent le 1er, on "quittera" ainsi sur le 1er cas.
Le tout est de mettre (dans cet exemple) le cas le plus restrictif en premier et le cas le moins restrictif en dernier.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2011 à 07:31
Et intéresse-toi également (et peut-être surtout) à ce qu'est la fonction ABS
Voilà ! tu as maintenant tout entre tes mains pour travailler comme il le faut.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 11:10
Bonjour à tous,

LIBRE_MAX :
que pourrait être la valeur absolue de la
différence entre "SERIEUX" et "COOL" ?


Et bien si je déclare la variable "SERIEUX" et "COOL" comme étant des variables de type "Long" alors sa donne sa : ABS(SERIEUX - COOL)

Ou est le problème ???


Ucfoutu, j'ai suivi ton aide en utilisant "Select Case". Voici le code que je propose :

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



En effet, sa m'affiche bien les 3 cas possibles dans le bon ordre (j'ai bien mis du plus restrictif au moins restrictif). Mais alors ma question est la suivante...A quoi sa me sert d'avoir fait sa maintenant ???

Je veux dire, ici sa m’affiche un message comme quoi je suis drapeau Vert, Orange, ou Rouge. Mais moi je désire une mise en forme conditionnelle par contre.
Je ne cherche pas à avoir un message à l'écran mais bel et bien la petite icône des drapeaux que propose Excel en mode mise en forme conditionnelle. Je veux une info "visuelle". De plus si ma valeur "a" ou "b" change, je veux avoir la nouvelle info en direct par un re-calcul immédiat. La mise en forme conditionnelle le fait très bien.

Que dois-je faire pour retomber sur mes pattes maintenant ?

Merci de votre aide.

André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2011 à 11:31
Déjà (et pour suivre ton exemple donné plus haut) :
-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

veut dire qu'il te suffit d'examiner la valeur absolue de la différence, non ?
=>>
toto = >Abs(x-y)
select case toto
  case 2
   ....
  case 4
   ....
  case 6
   ....
end select

les petits points = tes instruction (pas nécessairement un msgbox) !
Après, ma foi, tu en fais ce que tu veux et comme tu l'entends.
Ce que tu as ici, c'est la manière de déterminer en vue de faire ensuite comme tu l'entends

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2011 à 11:33
pardon ===>>> toto = ABS(x-y) (bien sur)
Et quid si ?>>
Case 0
 ....


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 11:46
Je viens de voir ce lien qui me semble très intéressant car en rapport avec mon sujet. Mais je ne parviens pas à comprendre le fichier Excel.

De plus dans l'exemple du lien, le drapeau se trouve dans une cellule vide alors que moi je désire placer le drapeau dans une cellule contenant déjà une formule de calcul.

Ma demande est-elle simplement réaliste ???

André

PS : Le lien
Mise en forme conditionnelle : drapeaux : Excel - VBA
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 11:51
Merci Ucfoutu pour tes infos supplémentaires.

Je vais manger et je vois sa tout de suite après.

Je sens venir toute fois un problème qui est le suivant : Une fois ma macro lancée et terminée. Que se passe t'il si je change la valeur "a" ou "b" ??? Moi je souhaite un changement automatique des drapeaux en fonction de la valeur des données. J'ai peur que le changement ne soit pas pris en compte automatiquement et qu'il faille relancer la macro à chaque fois. Bon je verrais sa tout de suite après manger.

Je reviens...

Merci Ucfoutu
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 oct. 2011 à 12:09
Bonjour,

A SERIEUXETCOOL:

Ce que je voulais dire c' est que "a" et "b", notés comme tels,ne sont plus des variables mais des chaines de caractères.

c' était juste ça.

Ceci dit, je te laisse entre de bonnes mains pour la suite.

Bonne journée à tous.



[] Ce qui va sans dire. va mieux en le disant.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2011 à 12:41
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).
Vais-y : commence à réfléchir d'abord seul... Ce n'est pas difficile.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 15:12
Pas difficile dis tu Ucfoutu ???

Lol

Allez parce que tu m'a fait rire en disant sa, je vais continuer de chercher encore.

Je post ci-après le code le moins pire actuellement. Il ne fonctionne que dans le cas ou la valeur "b" est plus grande que la valeur "a". Sinon sa ne fonctionne plus.

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


C'est presque ce que je voulais. La je traite bien le cas ou "a" est plus petit ou égal à "b". Mais il me reste encore à traiter le cas "a" plus grand strictement que "b".

Ucfoutu je ne parviens pas à comprendre ta solution. Je ne perçois pas le lien entre "Select Case" et mise en forme conditionnelle.

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



Peux tu me donner un peu plus de conseils ucfoutu ? La je galère pas mal on dirait bien...

André^^
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 15:58
je ne suis pas sur d'avoir raison, mais j'ai le sentiment qu'il faudra coder en VBA 3 fois la mise en forme conditionnelle si l'on utilise ta solution Ucfoutu ???

Du genre :

"Case Is <-2 Then MFC
Case Is <-4 Then MFC
Case Is >4 Then MFC"

Sa va faire lourd non ? Surtout s'il faut en plus ajouter un moyen d'intercepter le changement de valeur de "a" ou "b".

Suis-je dans le vrai ?

Sinon j'ai mis au point une astuce "simple" mais qui fait bricolage. étant donné que la condition intéressante est "ABS("a"-"b")" mais que je ne n'est pas de cellule contenant cette valeur absolue, je peux utiliser la cellule juste à la droite de "b" lui faire calculer la valeur absolue de la différence puis d'y affecter ensuite la mise en forme conditionnelle en masquant le contenue de la cellule. Du coup "presque" ni vu ni connu et j'ai le drapeau avec la valeur de "b".

Pas terrible comme solution ??? Mais bon sa débrouille un peu pour le moment.

André
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 17:25
Tjs pas d'idées en vues ?

Je m'exprime mal ou mon problème est sans solutions ? La je patouille depuis ce matin et j'ai pas franchement trouvé de solution miracle.

Un peu d'aide ou des conseils seraient les bienvenus.

Merci à vous.

André

Ps : N'hésitez pas à posez vos questions si besoin est. Je suis la pour éclaircir les doutes...
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 oct. 2011 à 17:43
J'ai mis au point le code suivant qui fonctionne assez bien. Le seul inconvénient c'est qu'il faut que je relance la macro pour que sa se recalcule automatiquement.

Ma question est simple : Comment pourrais-je améliorer mon code de façon à ce que dès que la cellule A1 de la feuille 1 ou la cellule A1 de la feuille 2 change, alors sa met à jour tout seul ???

Ucfoutu tu m'as parlé de sa :

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).



Voici le code :

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



Merci à ceux qui pourront m'aider sur ce nouveau problème bcp plus simple maintenant.

André
0
Rejoignez-nous