Colorer des lignes en fonction de critères date du jour

Bonjour,

Je souhaite enregistrer pour une association des différents versements de cotisations par période.

Mais, craignant d'avoir un problème de lecture au bout d'un certain nombre d'enregistrements, je souhaiterai codifier la possibilité de colorer les opérations d'une même journée.

Mon classeur disposera d'au moins 12 feuilles (12 mois). Je souhaiterai qu'à chaque fois que j'activerai une feuille prévue pour l'enregistrement (journal mensuel de saisie donc), cette propriété se mette en route...

Alors, nul en VBA que je suis, je demande votre aide.

Je joins mon fichier exemple...

Merci d'avance!

Jeanba

Hello,

Je me pose sur ta question, juste une remarque la colonne jour contient des numéros. Dans ton explication tu parles de la date du jour.

Il faudrait nous donner une correspondance.

Quand c'est 1 ça fait quoi ?

Quand c'est 2 ça fait quoi ?

Quand c'est 3

Etc...

Est-ce que cela correspond à lundi 1, mardi 2 ?

Ton problème est pas complexe en vba, il faut juste la logique que tu souhaites obtenir à la fin, pour que l'on puisse créer ta macro.

Au plaisir.

Bonjour monesofar 13,

Merci pour cette réponse rapide!

Non, il s'agit juste des jours (donc c'est une liste de valeurs comprises entre 1 à 31).

Je vais interdire la saisie de toute autre valeur..

En fait, j'ai besoin juste de 2 couleurs:

Si les opérations de la 1ere journée sont colorées en blanc, celles du jour suivant DEVRONT l'être en vert ou toute autre couleur qu'on aura définie.

J'espère avoir été plus clair..

Merci

Re-bonjour,

Ci-joint une proposition.

Bonne journée.


excuse j'ai relu ta proposition,

Je pense que cette version fait ce que tu veux.

Bien reçu, merci.

Mais, je crois qu'on y est pas encore.

En fait, l'idée est la suivante:

J'ouvre ma feuille de saisie.

Je rentre les données à la ligne 1 et dès que je valide la ligne (touche ENTREE ou tabulation), les cellules de la plage A2:D2 (dans mon exemple, se colorent (ici en vert clair). Et tant que la valeur en colonne A est la même, ce sera toujours cette couleur-là pour la plage concernée de chaque ligne. C'est pourquoi au final, la plage A2:D4 est en vert, parce que tous les jours entrés = "1".

Et, dès que je change de jour de saisie (cas à partir de la ligne 5 ou le jour devient = "2"), la plage A5:D5 devient colorée en une autre couleur, ici en blanc.

J'ai comme l'impression de pas être très clair...

Ce que j'essaie de dire, c'est que c'est pas en cliquant sur un bouton de commande "Couleur", mais c'est en fonction de la valeur des cellules dans la colonne A (jour).

Merci par avance de regarder ça s'il te plaît...

Bonjour, la couleur dépends du jour, li c'est un nombre pair : blanc, si c'est un nombre impair : vert.

Ca doit convenir si il n'y a pas de jours qui sautent (exemple si on passe directement du 6 au 8 : les deux lignes seront blanches)

Je pense qu'il serait mieux (bien sûr sans savoir comment m'y prendre tu me diras), de conditionner le changement de couleur en comparant la valeur du jour de la cellule A3 par rapport à celle de la cellule A2. Si la soustraction (A3-A2) <> 0, then la couleur de la plage A3:D3 sera différente de celle de la plage A2:D2, else elle sera la même.

Ceci permet de gérer, il me semble, les soucis de week-end et de jours feriés..., non?

Je viens d'essayer quelque chose, ça marche pas.

Voici l'algorithme dans ma tête:

  • Tant que la valeur de la cellule de la colonne A2 à la fin du fichier = "", il se passe rien
  • Dès que l'utilisateur entre une valeur qui doit obligatoirement être comprise entre 1 à 31, alors, la comparaison suivante ce fait:
1) en première ligne (A2), la couleur de la plage A2:D2 pourrait toujours être le blanc

2) en lignes A3 et suivantes, je comparerai toujours la valeur de la cellule A3 d'avec celle de la cellule A2. Si j'ai affaire à des cellules identiques, alors la couleur de la plage A3:D3 sera la même que celle de la plage juste au dessus, sinon, ce sera une autre couleur que j'aurai définie.

3) je boucle tant que les cellules ne seront pas vides.

Merci infiniment!

Hello,

Regarde si cette V3 correspond mieux?

Hello,

On avance, mais pas encore ok.

En effet, la saisie des 2 premières lignes = ok.

Mais, en lignes suivantes, la seule couleur qui continue est la rouge. Or, le changement de couleur devrait se faire chaque fois que le jour change. En d'autres termes, tant que le jour de saisie est le même, la couleur ne varie pas.

J'ai rentré 1 en lignes A2 à A4 et ça a donné le bon résultat.

En lignes A5 à A6, le jour saisi est 2, résultat IMPECCABLE.

En lignes A7 à A9, le jour saisi est 4 et là, je devrais avoir la couleur blanche, mais malheureusement, c'est la rouge qui continue.

De fait, il faut considérer les données saisies en une même journée comme étant une seule pièce comptable et la colorer de la même couleur pour ainsi faciliter la lecture... (voir ci-joint)

Merci encore!

Hello,

Alors pourquoi A7 à A9 devrait être en couleur blanche ? Parce-que il y à 3 chiffres identiques ?

Le programme compare toujours la valeur des cellules entre elles? Donc si elles sont identiques alors rouge?

Sinon on peut ajouter une condition si plus de 3 identiques alors blanc ? Si ça correspond à ce que tu souhaite.

Bonne journée.

Hello,

Désolé pour la réaction tardive.

En fait, ce que je n'arrive pas à bien expliquer est que TOUS LES BLOCS D'ECRITURES AYANT LE MEME JOUR (donc les enregistrements d'une même journée) doivent être identifiés comme tels de telle sorte qu'il soit possible de passer visuellement grâce aux couleurs, d'un enregistrement d'une journée à une autre. Le fait de ficher l'algorithme en disant que si c'est identique blanc ou rouge ne règle pas le souci.

Merci

Hello,

Bon je comprends mieux ton probléme.

Je pense avoir la solution dans cette V4.

Tiens moi au jus.

Hello Très Cher,

Je peux dire que ça marche à merveille!

Maintenant, l'éditeur, y a beaucoup de codes. Je suppose que c'est celui qui est écrit dans le module qui s'exécute, non?

Et puis, je serai bien curieux de voir ton code pour masquer la feuil2 et interdire même son affichage par la procédure Bouton droit ...

Dans tous les cas, je pense pouvoir me débrouiller avec ça.

Merci infiniement!

Je suis vraiment très nul en développement!

En bon partisan du moindre effort que je suis, j'ai copié le code.

Malheureusement, j'ai pas précisé que les 7 premières lignes de ma feuille contiennent des info sur lesquelles on peut pas écrire.

Donc, j'ai fait changer ta boucle à partir de FOR i = 8 to ...

Et j'aimerai que la plage de ligne à colorer parte de la colonne A à K. Mais, là j'y arrive po!

SOS mon cher!

Merci


En clair, c'est cette ligne d'instructions qui bloque le programme. Que signifie t-elle réellement?

[A5].CurrentRegion.Sort Key1:=[A5], Order1:=xlAscending, Header:=xlGuess ' tri

hello,

le copier coller est un bon réflex .

Elle sert à faire un tri dans l'ordre croissant pour tester les valeurs qui sont identiques ligne par ligne.

Pour aller à K:

change la ligne suivante par celle-la

Cells(i, 1).Resize(, 11).Interior.ColorIndex = couleur '11 pour le numéro de colonne

Si c'est déjà rangé en ordre croissant tu peux te passer de cette ligne.

Tu as répondu partiellement à mes dernières interrogations...

D'accord, j'ai le bon reflexe de copier/coller.

Mais, là ça fonctionne po, pourtant, je fais partir la boucle de 8 à ...!!!


Voici ce que j'ai fait de ton code:

Sub Coloriage()

Application.ScreenUpdating = False

' [A5].CurrentRegion.Sort Key1:=[A5], Order1:=xlAscending, Header:=xlGuess ' tri

couleur = 36

For i = 8 To [A65000].End(xlUp).Row

If Cells(i, 1) <> Cells(i - 1, 1) Then couleur = IIf(couleur = 36, 34, 36)

Cells(i, 1).Resize(, 4).Interior.ColorIndex = couleur

Next i

Application.ScreenUpdating = True

End Sub

Question:

[A5] signifie quoi exactement?

Hello,

Essaye d'utiliser les balises de code.

Sub coloriage()
  Application.ScreenUpdating = False
'  [A5].CurrentRegion.Sort Key1:=[A5], Order1:=xlAscending, Header:=xlGuess ' tri
'  couleur = 36
  For i = 8 To [A65000].End(xlUp).Row
     If Cells(i, 1) <> Cells(i - 1, 1) Then couleur = IIf(couleur = 36, 34, 36)
     Cells(i, 1).Resize(, 11).Interior.ColorIndex = couleur 'si tu veux la colonne K
  Next i
  Application.ScreenUpdating = True
End Sub

A5 c'est la cellule 5 de colonne A, en fait tu peux l'enlever cette ligne si ton tri dans l'ordre croissant est déjà effectué.

Hello!

Je me suis pas beaucoup connecté ces temps-ci..

Ecoute, j'ai copier le dernier code et je l'ai inséré dans Thisworkbook de mon projet (qui n'est pas tout à fait la feuille que je t'ai partagé)

Mais, il ne s'exécute pas , alors qu'il le fait très bien sur le fichier que tu m'as envoyé...

Peut-être fallait-il le mettre dans un Module?

Et puis, j'ai vu que si je veux l'exécuter sur les autres feuilles du fichier que tu m'as renvoyé, ça marche pas non plus...

Alors, où faut-il le coller ce code pour qu'il s'exécuter sur n'importe quelle feuille active s'il te plaît?

Bon weeek-end au passage...!

yo,

Aucun code ne doit être dans thisworkbook pour ce que tu demandes.

place ce code dans la feuille de ton choix :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim myrange As Range

    Cells(1, 1).CurrentRegion.Select

    Set myrange = Selection
    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = myrange

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        Call coloriage
        Cells(1, 1).Select

    End If
End Sub

place ce code dans un module :

Sub coloriage()
  Application.ScreenUpdating = False
'  [A5].CurrentRegion.Sort Key1:=[A5], Order1:=xlAscending, Header:=xlGuess ' tri
'  couleur = 36
 For i = 8 To [A65000].End(xlUp).Row
     If Cells(i, 1) <> Cells(i - 1, 1) Then couleur = IIf(couleur = 36, 34, 36)
     Cells(i, 1).Resize(, 11).Interior.ColorIndex = couleur 'si tu veux la colonne K
 Next i
  Application.ScreenUpdating = True
End Sub
Rechercher des sujets similaires à "colorer lignes fonction criteres date jour"