Conditionner le format dans une mise en forme conditionnelle ...

AlexLeBelge -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je pense que ce je cherche à faire n'est pas possible mais voyons si quelqu'un connais une astuce sympa ... :p

Admettons par exemple qu'on utilise une simple mise en forme conditionnelle pour colorier les cellules qui contiennent une valeur supérieure ou égale à 1 dans une plage (disons pour l'exemple B1:E5).
Ce que j'aimerais c'est que le format de la mise en forme conditionnelle (couleur de police, couleur de fond, ...) soit pilotée par les cellules A1:A5 (soit que ce soit une copie de la mise en forme soit qu'on y écrive par une chaine de caractère le code couleur à appliquer. L'objectif serait de pouvoir (sans dupliquer la règle et sans aller la modifier à chaque fois) changer la couleur à posteriori .... Des idées ? :D

Configuration: Windows / Firefox 89.0

2 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Si j'ai bien compris, c'est tout a fait possible mais avec un part de VBA si tu as quelques connaissances

    0
    1. AlexLeBelge
       
      Salut Mike.
      Quelle est ta solution avec VBA ?
      Si c'est simple et élégant pourquoi pas ... après j'avais l'intention de donner la main sur le fichier à d'autres personnes qui aurons peut être du mal si il faut aller remettre le nez dans une macro ^^.
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Dans l'exemple en pièce jointe, j'ai créé la plage des couleurs A2:A8 Couleurs
    et créé un Champ nommé Couleurs avec cette formule
    =DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A$1:$A$8))


    pour que la mise en forme s'efface si la cellule est vide j'ai créé une MFC toute simple =B2=""
    format/Remplissage/Acune couleur
    la plage de travail Ma_Plage B2:J17

    la part BVA dans les propriétés de la feuille (clic droit sur l'onglet/Visualiser le code)
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect([Ma_Plage], Target) Is Nothing Then
       On Error Resume Next
       Target.Interior.ColorIndex = [Couleurs].Find(Target, LookAt:=xlWhole).Interior.ColorIndex
       Target.Font.ColorIndex = [Couleurs].Find(Target, LookAt:=xlWhole).Font.ColorIndex
       Target.Font.Bold = [Couleurs].Find(Target, LookAt:=xlWhole).Font.Bold 'Inclus le gras
      End If
    End Sub 


    en fonction de la saisie dans ta plage de travail, la MFC dupliquera les critères des cellules A2:A8
    https://www.cjoint.com/c/KFdjHR3yiCF
    0
    1. AlexLeBelge
       
      Sympa !
      Merci pour ton temps je vais partir de ça pour essayer d'aboutir à ce que je veux faire. ;)
      En effet, ce n'est pas encore tout à fait ça.
      Si tu changes la mise en forme d'une de tes cellules dans la plage "couleurs" ça ne va pas actualiser la mise en forme de ce qui a déjà était fait. Par ailleurs si tu inscris des "*" ou des "??" ça se met sur la mise en forme jaune (ça franchement c'est juste pour le faire remarquer : ça ne me pose aucun problème) ;).
      0
      1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147 > AlexLeBelge
         
        Re,

        tu peux remplacer le code VBA par une boucle

        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        For Each cellule In Range("B2:J17")
        On Error Resume Next
           cellule.Interior.ColorIndex = [Couleurs].Find(cellule, LookAt:=xlWhole).Interior.ColorIndex
           cellule.Font.ColorIndex = [Couleurs].Find(cellule, LookAt:=xlWhole).Font.ColorIndex
           cellule.Font.Bold = [Couleurs].Find(cellule, LookAt:=xlWhole).Font.Bold
            Next
        End Sub
        0