Changement de couleurs dans excel

Résolu
Bonjour,
encore un tableau tarabiscoté !!!
Je dois gerer un circuit de formation et chaque fois que j'avance dans la procédure le titre doit changer de couleur . Comment faut il faire ?
Je joins le fichier demo
https://www.cjoint.com/?0bFpxpOSpgQ

Merci de votre aide

12 réponses

  1. mise en forme conditionnelle.
    0
    1. Le problème de la mise en forme conditionnelle, c'est que mon tableau doit se derouler progressivement : je m'explique.
      1. je réalise donc une croix
      2. je facture une autre croix et la premiere case doit changer de couleur sans que j'enlève la première croix
      3. je conteste (meme chose)
      4. tout est ok
      Donc a chaque fois il faut changer la couleur sans enlever la croix
      Y a t-il une solution miracle ?
      Merci d'avance
      0
      1. et en plus je n'ai que trois possibilités de couleurs et il m'en faut quatre
        Faut il passer par une macro et alors là je ne suis pas forte du tout
        0
      2. A force de bidouiller j'ai trouvé quelque chose : en mettant les mises en formes conditionnelles dans le sens inverse, les couleurs changent. Mais je n'ai que 3 solutions et il m'en faut 4
        0
    2. Contributeur
      Bonsoir,

      une proposition :
      Private Sub Worksheet_Change(ByVal Target As Range)
          Dim col As Long, couleurs As Variant
          couleurs = Array(vbBlue, vbRed, vbGreen, vbYellow)
          If Target.Column < 2 Or Target.Column > 5 Then Exit Sub
          For col = 5 To 2 Step -1
              If LCase(Cells(Target.Row, col)) = "x" Then
                  Cells(Target.Row, 1).Interior.Color = couleurs(col - 2)
                  Exit For
              End If
          Next col
          If col = 1 Then Cells(Target.Row, 1).Interior.ColorIndex = 0
      End Sub


      eric
      0
      1. Super ta macro ça marche, mais il faut que je la comprenne pour l'adapter à un tableau qui fait une 50ène de colonnes et ou quand on arrive à certaine colonne le titre change de colonne. Meme tableau que dans l'exemple mais avec des colonnes entre. De toute manière il va bien falloir que je comprenne les macros un peu mieux que ça.
        Enfin si je n'y arrive pas ou si tu as un tuyau merci d'avance et merci encore.
        0
        1. J'ai vraiment besoin d'un coup de main, car ce n'est pas simple du tout pour moi. Donc comment adapter la macro pour un tableau + grand avec des colonnes entre.
          Merci d'avance
          0
      2. Contributeur
        Bonsoir,

        J'ai modifié pour que ce soit plus simple pour toi :
        - au début du code tu saisis dans les arrays() les colonnes titres, et celles de début et fin de tes plages. Ici 2 plages de définies, tu peux en ajouter d'autres.
        - les couleurs ne sont plus en dur dans le code mais récupérées dans les en-têtes des colonnes. Plus visuel pour choisir et plus simple pour modifier ces couleurs (il faudra revalider les x finaux concernés si tu modifies les couleurs après saisie).

        Private Sub Worksheet_Change(ByVal Target As Range)
            Dim cTitres, cdebuts, cfins
            Dim pl As Long, col As Long, ok As Boolean
            ' saisir les n° des colonnes des plages à contrôler
            cTitres = Array(1, 8) 'colonnes titre
            cdebuts = Array(2, 9) ' colonnes début des plages
            cfins = Array(5, 12) ' colonnes fin des plages
            
            ' détection si dans plages
            For pl = 0 To UBound(cTitres)
                If Target.Column >= cdebuts(pl) And Target.Column <= cfins(pl) Then Exit For
            Next pl
            If pl > UBound(cTitres) Then Exit Sub
            
            ' recherche "x"
            For col = cfins(pl) To cdebuts(pl) Step -1
                If LCase(Cells(Target.Row, col)) = "x" Then
                    Cells(Target.Row, cTitres(pl)).Interior.ColorIndex = Cells(1, col).Interior.ColorIndex
                    ok = True
                    Exit For
                End If
            Next col
            If Not ok Then Cells(Target.Row, cTitres(pl)).Interior.ColorIndex = xlNone
        End Sub
        

        couleurTitre.xls

        eric
        0
        1. bonjour,
          le fichier que tu m'as envoyé marche super mais comme je suis difficile !!! c'est encore plus compliqué !! Dans mon tableau on a une colonne de titre et de temps en temps une colonne qui lorsque l'on met une croix dessus change la couleur du titre....
          Je met le fichier joint
          Merci
          https://www.cjoint.com/?0ciifBnURBkci d'avance
          0
          1. Contributeur
            c'est sûr que c'est embêtant...
            0
            1. Bonjour,
              Y a t-il une solution à mon problème ou cela est il impossible à faire ?
              Merci
              0
              1. Contributeur
                Bonjour,

                et de temps en temps une colonne ...
                Laquelle? Si il y a un problème il faut que ce soit reproductible et que tu donnes les manip pour pour le reproduire.
                De plus ton tableau ne correspond pas à celui du début, et il n'y pas de code dedans.
                Désolé, je ne peux pas tout deviner...

                eric
                0
                1. Toute mes excuses si je ne suis pas très claire mais il est difficile d'expliquer quelque chose que l'on voit evident puisque on l'a mis en piste.
                  Je vais tenter d'etre compréhensible.
                  Mon tableau est le meme que le premier sauf que j'ai rajouté des colonnes entre les colonnes ou la croix change la couleur du titre. Dans ces colonnes entre des données n'ayant aucune incidence sur la couleur du titre. Dans la macro que tu m'as fait les colonnes se suivent, effectivement c'est le premier modèle que j'avais envoyé, mais je pensais que les plages apparaitraient séparées dans la macro et que je pourrais adapter à mon modèle.
                  Donc pour plus de précision, les plages qui doivent changer la couleur du titre sont les plages qui ont un titre avec une couleur entre parenthèse.
                  Merci d'avance
                  0
                  1. Contributeur
                    Ce sont les colonnes 4, 7, 10 et 14 avec leur titre en colonne 1.
                    Il suffit donc de saisir ces paramètres :
                        ' saisir les n° des colonnes des plages à contrôler 
                        cTitres = Array(1, 1, 1, 1) 'colonnes titre 
                        cdebuts = Array(4, 7, 10, 14) ' colonnes début des plages 
                        cfins = Array(4, 7, 10, 14) ' colonnes fin des plages 
                    

                    A moins que j'ai mal compris qcq chose ?

                    eric
                    0
                2. Super, ça marche génial, merci beaucoup
                  0