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