Coloriser plus de 3 conditions

Résolu/Fermé
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 - 6 janv. 2008 à 17:10
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 - 26 janv. 2008 à 07:19
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

13 réponses

dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
8 janv. 2008 à 00:34
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
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
21 janv. 2008 à 21:38
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
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
21 janv. 2008 à 22:02
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
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
22 janv. 2008 à 04:18
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
22 janv. 2008 à 07:25
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
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
22 janv. 2008 à 11:03
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
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
22 janv. 2008 à 11:15
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
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
22 janv. 2008 à 11:51
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
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
24 janv. 2008 à 14:07
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
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
24 janv. 2008 à 14:41
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
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
24 janv. 2008 à 19:17
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
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
24 janv. 2008 à 21:25
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
aldéric76 Messages postés 303 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 13 juillet 2024 7
26 janv. 2008 à 07:19
amicalement
0