Coloriser plus de 3 conditions

Résolu
Bonjour,
j'ai cherché un peu partout mais n'ai pas trouvé de réponse à ce problème
je suis sur qu'il est accessible en vba, mais dans ce domaine j'avoue que je suis limite: nul...
bref,
je voudrais que mes cellules se colorise en fonction de l'heure entrée dedans.
donc, de 00h00 à 23h59 : 24 couleurs

bien sur j'ai vu des tas de réponses en passant par la mise en forme conditionnelle, mais le problème est la restriction des 3 conditions.

merci par avance
Configuration: Windows XP
Internet Explorer 6.0

13 réponses

  1. merci encore à tout ceux qui ont la gentillesse de prendre quelques minutes pour rendre services au "bleu" j'espère pouvoir vous rendre la pareille un jour
    amicalement
    0
    1. je te remercie du temps que tu as passé sur mon problème.
      j'ai reussi à bidouiller ton code et à obtenir ce que je voulai
      je te le montre et le mets à disposition de tout ceux qui serait dans la même attente
      amicalement

      Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

      'S'exécute automatiquement à chaque changement de valeur de cellule
      'Voir l'aide de VBA Worksheet_Change

      CouleurSelonHeure Target

      End Sub
      Private Sub CouleurSelonHeure(Cellule)

      Dim iHeure As Integer
      Dim listcolor As Variant
      listcolor = Array(RGB(255, 223, 223), RGB(223, 255, 223), RGB(223, 255, 255))
      On Error GoTo Fin:

      iHeure = Hour(Cellule) 'On récupère l'heure de la cellule sélectionnée

      Cellule.Interior.Color = listcolor(iHeure)

      Fin:
      End Sub
      0
      1. Il faut utiliser la méthode Colors, elle est très bien décrite dans l'aide

        Elle permet de modifier les ColorIndex en leur attribuant des valeurs RGB. Tu peux donc passer a 26 couleurs et supprimer le hachurage pour l'après-midi.

        Colors n'est valable que pour le classeur actif donc il faut définir ces couleurs à l'activation du classeur

        Private Sub Workbook_Activate()
        'On va supposer que les 14 premières conviennent
        ThisWorkbook.Colors(15) = RGB(25, 30, 35)
        End Sub

        Pour définir les couleurs, utilise Paint avec couleur/Modifier les couleurs/Définir les couleurs personnalisées et modifie les valeurs de Rouge, Vert(G), Bleu
        0
        1. t es un vrai chef...
          et moi un bourricot, du coup ton code fonctionne à merveille mais, je ne sais pas comment le modifier pour pouvoir faire le choix moi même de la couleur associée au créneau horaire
          merci encore pour ton aide
          amicalement
          0
          1. On y arrive

            Le code suivant doit être copié dans ThisWorkBook

            Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

            'S'exécute automatiquement à chaque changement de valeur de cellule
            'Voir l'aide de VBA Worksheet_Change

            CouleurSelonHeure Target

            End Sub
            Sub CouleurSelonHeure(Cellule)

            'La liste des ColorIndex est donnée dans l'aide de VBA ColorIndex,Propriété

            Dim iHeure As Integer
            On Error GoTo Fin:

            iHeure = Hour(Cellule) 'On récupère l'heure de la cellule sélectionnée

            'On est limité à 14 couleurs dont le noir et le blanc
            'On va donc distinguer Matin et Après-midi

            If iHeure < 12 Then 'Matin
            Cellule.Interior.ColorIndex = iHeure + 3
            Else
            iHeure = iHeure - 12 'Après-Midi
            Cellule.Interior.ColorIndex = iHeure + 3
            Cellule.Interior.Pattern = xlPatternLightHorizontal 'C'est à mon avis le plus lisible
            End If
            Fin:
            End Sub
            0
            1. J'ai contourné la restriction de format

              Private Sub Worksheet_Change(ByVal Target As Range)

              'S'exécute automatiquement à chaque changement de valeur de cellule
              'Voir l'aide de VBA Worksheet_Change

              CouleurSelonHeure Target

              End Sub
              Sub CouleurSelonHeure(Cellule)

              'La liste des ColorIndex est donnée dans l'aide de VBA ColorIndex,Propriété

              Dim iHeure As Integer
              On Error GoTo Fin:

              iHeure = Hour(Cellule) 'On récupère l'heure de la cellule sélectionnée

              'On est limité à 14 couleurs dont le noir et le blanc
              'On va donc distinguer Matin et Après-midi

              If iHeure < 12 Then 'Matin
              Cellule.Interior.ColorIndex = iHeure + 3
              Else
              iHeure = iHeure - 12 'Après-Midi
              Cellule.Interior.ColorIndex = iHeure + 3
              Cellule.Interior.Pattern = xlPatternLightHorizontal 'C'est à mon avis le plus lisible
              End If
              Fin:
              End Sub

              Désolé à la lecture on ne voit pas les indentations. La structure du code serait plus claire

              Limites :
              Tu dois recopier ce code pour chaque feuille
              0
              1. Essayes ce code

                Private Sub Worksheet_Change(ByVal Target As Range)

                'S'exécute automatiquement à chaque changement de valeur de cellule
                'Voir l'aide de VBA Worksheet_Change

                If Target.NumberFormat = "hh:mm" Or Target.NumberFormat = "h:mm" Then 'On ne colorie pas les autres formats que les formats "Heure"
                CouleurSelonHeure Target
                End If

                End Sub
                Sub CouleurSelonHeure(Cellule)

                'La liste des ColorIndex est donnée dans l'aide de VBA ColorIndex,Propriété

                Dim iHeure As Integer

                iHeure = Hour(Cellule) 'On récupère l'heure de la cellule sélectionnée

                'On est limité à 14 couleurs dont le noir et le blanc
                'On va donc distinguer Matin et Après-midi

                If iHeure < 12 Then 'Matin
                Cellule.Interior.ColorIndex = iHeure + 3
                Else
                iHeure = iHeure - 12 'Après-Midi
                Cellule.Interior.ColorIndex = iHeure + 3
                Cellule.Interior.Pattern = xlPatternLightHorizontal 'C'est à mon avis le plus lisible
                End If

                End Sub

                Rq: Les cellules doivent être au format Heure
                0
                1. additif au message precedent:
                  apres mure reflexion, le tableau serait plus clair sans que les lignes à droite des horaires soient colorisés.
                  donc en fait je n'ai plus besoins que d'une chose, c'est de ne pas etre obligé de faire la manip sur chaque cellule
                  merci encore
                  amicalement
                  0
                  1. t'es trop fort et en plus rapide...
                    ca marche tip top
                    le problème est que j'ai mal expliqué ce que je voulais EXACTEMENT
                    méa-culpa
                    donc je souhaite que les cellules horaires se colorisent automatiquement ou à défaut que je puisse selectionner l'ensemble des cellules pour les coloriser par la macro via un bouton personnalisé par exemple.
                    houla ais-je été clair?
                    je récapitule:
                    j'ai créé un bouton et lui ai affecté la macro que tu m'as proposé.
                    lorsque je selectionne une cellule contenant un horaire et que je lance la macro, ca fonctionne mais je suis obligé de me taper toute les cellules une par une. De plus, à droite de la cellules contenant l'heure, je doit mettre une description qui doit se coloriser de la couleur de l'horaire lui correspondant.
                    bon du coup je suis pas sur d'avoir été beaucoup plus clair...
                    j'espère que tu m'auras tout de même compris et merci encore
                    amicalement
                    0
                    1. Au temps pour moi, il y avait 2 erreurs dans le code.

                      Tu peux faire sauter Option Explicit, d'autre par il faut remplacer Dim iHeure As int par Dim iHeure as Integer

                      Rq les .... correspondent à la suite de ton code
                      0
                      1. désolé de ne pas avoir repondu plus vite mais vacances et stage.
                        bien, j'ai essayé ta macro mais malheureusement je n'ai pas reussi à la faire fonctionner.
                        as tu une autre idée?
                        merci
                        amicalement
                        0
                        1. Salut

                          Voila un début de solution. Désolé je n'ai pas excel sous la main avec cette bécane, je n'ai donc pas pu la tester, mais cela devrait ressembler à cela

                          Crée une macro

                          Sub CouleurSelonHeure

                          Option Explicit

                          dim iHeure As int

                          iHeure=Hour(Selection) 'On récupère l'heure de la cellule sélectionnée

                          Select Case iHeure
                          Case Is = 0
                          Selection.Interior.ColorIndex = 27
                          Case Is = 1
                          Selection.Interior.ColorIndex = 43
                          Case Is = 2
                          Selection.Interior.ColorIndex = 31
                          Case Is = 3
                          Selection.Interior.ColorIndex = 10
                          .....
                          End Select

                          End Sub

                          Crée un bouton dans ta feuille et affecte lui cette macro

                          Cela t'oblige à appuyer sur le bouton à chaque fois mais c'est la première chose qui m'est venue à l'idée.
                          0