Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Problème de mise en forme condtionnelle

SERIEUXETCOOL

XLDnaute Occasionnel
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"
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

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é
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

Je pourrais déposer un fichier Excel en effet. M'enfin déposer un fichier Excel contenant une valeur dans la feuille 1 et une autre valeur dans la feuille 2...voila quoi^^

C'est plus un problème de logique il me semble. Je n'arrive pas à traduire infomatiquement ces conditions la :


André
 

TempusFugit

XLDnaute Impliqué
Re : Problème de mise en forme condtionnelle

Bonjour


Il semble normal que celui qui pose la question, prenne le temps de créer un fichier exemple pour illustrer le problème qu'il rencontre.
Cela permets à ceux qui tentent de répondre de mieux comprendre la situation.
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

De retour...

Bien je vois que le fichier Excel est demandé par plusieurs personnes, alors j'en mets un en pièce jointe.

Sa me semblais "stupide" de déposer un fichier Excel contenant uniquement 2 valeurs. Du coup j'ai mi une macro qui illustre mon problème. Il suffit de changer la valeur de la feuille 2 puis de lancer la Macro. Et on voit tout de suite si on est drapeau Vert ou Orange ou Rouge.

Bien évidement, la solution que je propose en Macro ne m'intéresse pas du tout. Je recherche à faire la même chose mais en utilisant une mise en forme conditionnelle appliquée à la cellule A1 de la feuille 2.


Merci à ceux qui pourront m'aider.

Je reste disponible pour d'éventuelles questions.

André

Ps : Le fichier Excel "Drapeau" est un 2007 et il contient la mise en forme conditionnelle.
Le fichier Excel "Macro1"est un 2003 mais la mise en forme conditionnelle n'est pas prise en charge sur cette version. Je vous laisse les 2 documents.
 

Pièces jointes

  • Macro1.xls
    43.5 KB · Affichages: 113
  • DRAPEAU.xlsm
    17.9 KB · Affichages: 160
  • Macro1.xls
    43.5 KB · Affichages: 117
  • Macro1.xls
    43.5 KB · Affichages: 116

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

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
 

Pièces jointes

  • L3CTRO-v02.xlsx
    17.8 KB · Affichages: 99

JCGL

XLDnaute Barbatruc
Re : Problème de mise en forme condtionnelle

Bonjour à tous,

Je n'ai pas XL 2010 sous la main mais voici un exemple XL 2003 avec un drapeau WingDings

A+ à tous
 

Pièces jointes

  • JC MeFC.xls
    58.5 KB · Affichages: 145
  • MeFC.PNG
    22.5 KB · Affichages: 170
  • JC MeFC.xls
    58.5 KB · Affichages: 147
  • MeFC.PNG
    22.5 KB · Affichages: 152
  • JC MeFC.xls
    58.5 KB · Affichages: 135
  • MeFC.PNG
    22.5 KB · Affichages: 160

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

JCGL je ne parviens pas à comprendre ton fichier Excel. Il ne devrait pourtant y avoir que 2 valeurs : "a" et "b" ???
Comment fais tu pour faire apparaître cette fenêtre, car moi je ne la trouve pas sur mon Excel 2007.

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.

Code Visual Basic :

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


Merci pour vos lumières.
André
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

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

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

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 ???

Voici le code :

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é
 

JCGL

XLDnaute Barbatruc
Re : Problème de mise en forme condtionnelle

Bonjour à tous,

Il me semble que cela n'est pas possible avec le Jeu d’Icônes :

Un jeu d’icônes permet d’annoter et de classer des données en trois à cinq catégories séparées par une valeur seuil. Chaque icône représente une plage de valeurs. Par exemple, dans le jeu 3 Jeu d’icônes de flèches, la flèche verte orientée vers le haut représente les valeurs les plus élevées, la flèche jaune horizontale les valeurs du milieu et la flèche rouge orientée vers le bas les valeurs les plus basses.

Vous pouvez choisir d’afficher les icônes uniquement pour les cellules répondant à une condition ; par exemple, afficher une icône d’avertissement pour les cellules en dessous d’une valeur critique et aucune icône pour les cellules au-dessus. Pour ce faire, masquez les icônes en sélectionnant Aucune icône de cellule dans la liste déroulante des icônes en regard de l’icône lorsque vous définissez les conditions. Vous pouvez également créer votre propre combinaison de jeux d’icônes ; par exemple, une coche « symbole » verte, un « feu » jaune et un « drapeau » rouge.


A + à tous
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

Personnellement je ne suis pas très doué en Macro Excel. Mais néanmoins même sans savoir programmer je sens que ma demande n'est pas si terrible. De plus maintenant que j'ai fourni un code qui fonctionne pratiquement je reste convaincu que sa peut le faire sans problème.

Le seul hic à mon code, c'est qu'il faut réactualiser sans cesse le code dès lors que la cellule "a" de la feuille 1 ou "b" de la feuille 2 ont changées. Il me semble que pour palier à ce problème, il suffirait d'utiliser correctement l'événement "Worksheet_Change" avec la fonction "Intersect" pour que sa change automatiquement. Mais comme je l'ai dit plus haut, je ne suis pas programmeur. Donc je vais devoir m'entrainer avec l'utilisation de cet événement puis l'appliquer à mon exemple si sa fonctionne.

A la suite de sa, mon code sera 100% opérationnel et puis voila quoi^^

Donc pour moi, ce n'est pas impossible. Et même si mon code ne permet pas de résoudre mon problème, j'ai ma solution numéro 2 qui fonctionne très bien. Je l'ai mentionnée dans les précédents posts.

Donc sa devrait le faire. Un peu de patience encore...

Si quelqu'un maitrise la "Whorsheet_Change" je suis preneur lol.

André
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Problème de mise en forme condtionnelle

Merci JCGL pour ton aide.

J'ai suivis tes conseils et je suis arrivé à 2 codes possibles qui fonctionnent. Mais il ne sont pas opérationnels à 100%.

Voici le premier code :

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    Call Macro1
  End If
End Sub

Je colle ce code dans la feuille 1 ET la feuille 2. Sa marche bien. L'inconvénient de cette méthode est que dans mon cas à moi, je pars d'un classeur Excel ne contenant qu'une seule feuille au début. Ensuite via une macro je créer 2 nouvelles feuilles. Et je dois placer ce fameux code dans les deux nouvelles feuilles qui viennent d'être créées via la macro.

Bilan comment dois-je m'y prendre pour placer ce code dans une feuille qui n'existe pas à l'ouverture du classeur Excel mais qui est créée en cours de route ???

La je bloque, et je ne trouve pas de pistes. Comment fait-on cela ?


Enfin une autre solution que j'ai mis en place. C'est une petite variante de la solution précédente. Je me suis dit, puisque je ne dispose pas des deux feuilles au début de la macro alors je vais essayer de travailler avec le seul élément présent à l'ouverture d'un classeur...Le Workbook !

Voici le deuxième code :

Code:
Option Explicit

'Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'If Target.Address = "$A$1" Or Target.Address = "$A$1" Then
'    Call Macro1
'        MsgBox "Vous venez de modifier la cellule " & Target.Address & _
'        " (" & Target.Value & ")"
'  End If
'End Sub

La encore sa marche bien. Sa marche même mieux que le code précédent. C'est plus simple à coder et plus logique en fait. Malheureusement, sa ne fonctionne que si je travaille sur la cellule "A1" pour les deux feuilles ! C'est à dire que si j'utilise "A1" de la feuille 1 et "C4" de la feuille 2 sa ne fonctionne plus. Il faut pour cela que j'intègre le nom des feuilles respectives.

Mais je ne sais pas faire cela ! Et sa m'agace. Je me casse la tête dessus depuis des heures maintenant. Comment fait-on cela ???

Alors en cherchant des solutions pour mon problème j'ai créé le code suivant qui fonctionne bien lui aussi.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Value = Sheets("Feuil2").Range("A1") Or Target.Value = Sheets("Feuil1").Range("A1") Then
    Call Macro1
        MsgBox "Vous venez de modifier la cellule " & Target.Address & _
        " (" & Target.Value & ")"
  End If
End Sub

Le problème c'est que je ne veux pas un "Target.Value" mais un "Target.Address" car je ne sais pas pourquoi mais sa fonctionne moins bien en "Target.Value". Et je ne sais pas faire avec "Target.Address".


En conclusion :

Il suffit de corriger cette expression pour que le code fonctionne bien. Le travail est mâché à 90 %. Ce n'est plus qu'un problème de syntaxe maintenant.

Code:
If Target.Address = "'Feuil1'!$A$1" Or Target.Address = "'Feuil2'!$A$1" Then


Merci de votre aide. Je pensais que c'était un problème simple, mais finalement il est bien plus compliqué qu'il n'en a l'air !

André
 

Discussions similaires

Réponses
5
Affichages
155
Réponses
2
Affichages
72
Réponses
3
Affichages
295
Réponses
4
Affichages
227
Réponses
19
Affichages
936
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…