Couleur des caracteres d'une ligne en fonction de la date

Résolu/Fermé
SteamXIII Messages postés 7 Date d'inscription mercredi 26 août 2015 Statut Membre Dernière intervention 8 septembre 2015 - 26 août 2015 à 05:04
SteamXIII Messages postés 7 Date d'inscription mercredi 26 août 2015 Statut Membre Dernière intervention 8 septembre 2015 - 31 août 2015 à 05:52
Bonjour tout le monde,

Je suis un débutant en Excel/VBA et je suis un peu perdu.
J'ai dans une colonne excel un certain nombre de dates, de couleur d'écriture noire basique (numéro 0 dans le répertoire des couleurs). Je voudrais que lorsque ces dates sont antérieures de 4 mois ou plus à la date d'aujourd'hui, la police d'écriture de toute la ligne correspondant a ces dates passe automatiquement de noire à rouge (0 à 3 dans le répertoire).
J'ai essayé avec le Conditional Formatting, mais je n'arrive à l'appliquer seulement que ligne par ligne, ce qui n'est pas pratique.

J'utilise la formule: =TODAY()>EDATE(G4,4)

J'aimerais après cette étape pouvoir compter le nombre de cellules dont la date est inscrite en rouge. Après quelques recherches/bafouillements, j'ai fais ce petit programme qui fonctionne plus ou moins:

Function CountRedDates(Cell)

Dim RedColor
Dim Numberofdates As Integer
Dim i As Integer, j As Integer

Numberofdates = 0
RedColor = Range("a134").Font.Color

For i = 4 To 3000
    For j = 7 To 7
    If Cells(i, j).Font.Color = RedColor Then
    Numberofdates = Numberofdates + 1
    End If

    Next j
Next i
CountRedDates = Numberofdates
End Function


Mais le programme ne s'exécute pas automatiquement, je dois cliquer sur la formule de la cellule puis sur Entrée pour rafraichir le résultat. Que faut il ajouter pour que le programme rafraichisse continuellement ?
Lorsqu'une date passe de noire à rouge, le compteur s'incrémente et lorsqu'une date passe de rouge à noire, le compteur décrémente ce qui est correct. Mais lorsqu'on supprime directement une date en rouge, le compteur ne décrémente pas. Une solution ?
A voir également:

2 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
26 août 2015 à 07:40
Bonjour,

Une solution sans VBA.

Pour passer les lignes en rouge lorsque la date est antérieure de 4 mois ou plus à la date d'aujourd'hui, tu peux utiliser une mise en forme conditionnelle.

Pour compter les cellules dont la date est inscrite en rouge, tu peux utiliser la fonction SOUS.TOTAL et filtrer avec la couleur de police.

https://www.cjoint.com/c/EHAfMzdqiwv

A+
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
26 août 2015 à 08:51
En réponse à ton questionnement :

1) La modification de couleur de police n'est pas un évènement qui est détecté par l'application.
Tu peux utiliser un autre évènement, par exemple Worksheet.SelectionChange qui permet de détecter un changement de sélection dans la feuille de calcul.
Par contre, le comptage ne sera effectué qu'après modification de la couleur puis changement de sélection. Le rafraichissement est automatique mais n'est pas directement induit par la modification de couleur.

2) Lorsque tu supprimes directement une date en rouge, le compteur ne décrémente pas parce que le format de la cellule n'est pas modifié (la couleur de police reste rouge).
Tu dois donc indiquer dans le programme que le comptage ne doit pas être effectué si la cellule est vide.

Exemple de code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Numberofdates As Integer
Dim i As Integer
For i = 4 To 3000
If Cells(i, 7).Font.ColorIndex = 3 And Cells(i, 7) <> "" Then
Numberofdates = Numberofdates + 1
End If
Next i
Range("A1").Value = Numberofdates
End Sub


A+
0
SteamXIII Messages postés 7 Date d'inscription mercredi 26 août 2015 Statut Membre Dernière intervention 8 septembre 2015
27 août 2015 à 04:11
Bonjour Gyrus,

Merci pour cette réponse rapide et efficace.

Effectivement, je n'avais pas pensé à la non-detection du changement de police.
La fonction SOUS.TOTAL est une bonne alternative, l'inconvénient est qu'elle oblige de cacher les autres dates qui restent en noires.

Pour le programme, je ne comprends pas, je n'ai aucun résultat lorsque je l'insére en tant que module dans ma feuille excel ?
Le compte devrait pourtant apparaitre dans la cellule A1 non ?
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > SteamXIII Messages postés 7 Date d'inscription mercredi 26 août 2015 Statut Membre Dernière intervention 8 septembre 2015
27 août 2015 à 07:09
Bonjour,

Si tu as placé le code dans le module de la feuille, la procédure doit se lancer à chaque changement de sélection dans la feuille.

Attention, il ne faut pas que la couleur de police soit générée par une mise en forme conditionnelle. Ne sachant pas pour quelle solution tu as opté pour appliquer cette mise en forme (procédure ?), je ne peux pas t'en dire d'avantage.

Voici un exemple :
https://www.cjoint.com/c/EHBe5nERnb1

Si besoin, fais comme moi et joins un exemple.

A+
0
SteamXIII Messages postés 7 Date d'inscription mercredi 26 août 2015 Statut Membre Dernière intervention 8 septembre 2015
27 août 2015 à 10:29
Ah, c'est donc le noeud du problème. Je vais essayer d'être plus clair dans ma demande, pour visualiser le résultat que j'aimerais obtenir, voici un exemple:

https://www.cjoint.com/c/EHBif4L5pS3

Trois étapes:
1) Dans la liste de tous les produits (Feuille 1), les produits étant en fonctionnement depuis 4 mois ou plus doivent voir leur police de ligne devenir rouge et non noire.

2) Une cellule de la feuille 1 doit indiquer le nombre de produits qui sont en fonctionnement depuis 4 mois ou plus (On peut donc utiliser le fait que les lignes correspondantes soient rouges, si c'est plus simple qu'avec la date)

3) Les Feuilles 2-3-...-13 correspondent a une evolution mensuelle. Dans chacune de ces feuilles, deux tableaux. Exemple avec Janvier 2015:
- Un tableau correspondant a tout les produits en fonctionnement depuis 4 mois ou plus avant Janvier 2015
- Un tableau correspondant a tous les produits en fonctionnement avant Janvier 2015

Le but final est que je remplisse seulement la premiere feuille avec les nouveaux produits. Tout le reste se ferait automatiquement (Le passage au rouge après 4 mois, le calcul du nombre de produits en rouge et le remplissage des feuilles 2 a 13 qui "piochent" les lignes necessaires dans la feuille 1)

Dans l'exemple excel, j'ai ajouté la mise en forme conditionelle pour l'étape 1 et le programme que tu as concocté pour l'étape 2. Cependant comme tu l'as fais remarqué, il n'est apparemment pas possible de lier les deux.

J'espère être comprehensible et que ceci est faisable, merci de se pencher sur ma demande en tout cas !
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
28 août 2015 à 07:44
Bonjour,

Ton fichier en retour
https://www.cjoint.com/c/EHCfQHjFEO1

Point 1 :
j'ai conservé la MFC avec la formule =AUJOURDHUI()>MOIS.DECALER($G4;4)

Point 2 :
j'ai utilisé la formule
=SOMMEPROD((G4:G9<MOIS.DECALER(AUJOURDHUI();-4))*(G4:G9<>"")*1)

Point 3 :
j'ai regroupé le traitement des différents mois sur une seule feuille (Test).
Le choix du mois est effectué avec une liste déroulante en F4.
L'évènement Worksheet.Change est utilisé pour détecter la modification de valeur de F4.
La procédure associée effectue les deux filtrages de données (filtre avancé).
Les zones de critères et la liste de choix du mois sont dans les lignes masquées 1,2 et 3.

A+
0
SteamXIII Messages postés 7 Date d'inscription mercredi 26 août 2015 Statut Membre Dernière intervention 8 septembre 2015
31 août 2015 à 05:52
Bonjour Gyrus,

Cela me semble absolument parfait !

Un grand merci pour cette précieuse aide.
0