Petite macro de mise en forme

J

jca06

Guest
Bonjour à tous,

Je m'essaye aux macro avec plus ou moins de réussite.

A titre d'exemple, j'ai du mal à savoir ce qui cloche dans le code qui suit.

Mise en scène : dans une feuille Rappel, j'indique une date en B14, nommée effet et j'ai un tableau avec différentes dates en B18 à B25.
Je souhaite mettre une couleur de fond dans la cellule au dessus de celle testée si la cellule testée est supérieure à la date d'effet, et ce au moment de la saisie d'une date d'effet.

Voila ce que ça donne :
Private Sub Worksheet_Change(ByVal effet As Date)
Dim Dates As Range
Let Dates = Range(b18, b25)
Let effet = b14
For Each Cells In Dates
If Cells.Value > effet Then
Offset(-1, 0).Interior.ColorIndex = 8
Next Cells
End Sub

Merci de me dire, sans vous moquer, où est le problème.
 
R

Robert

Guest
Bonjour,
En premier lieu il faut éviter de modifier le prototype des fonction et routines ...
Private Sub Worksheet_Change(ByVal effet As Date)
doit rester
Private Sub Worksheet_Change(ByVal Target As Range)

Ensuite déclaration des variables
Dim Dates As Range ' C'est bon
Dim effet As Range 'il faut le faire

Récupération des données
Let Dates = Range(b18, b25)
C'est
Set Dates = Range("b18:b25")

de la même façon on récupère la date d'effet
Set effet = Range("b14")

Attention Cells est réservé
For Each Cells In Dates 'En erreur
Next Cells

For Each Cell In Dates 'OK
Next Cell

Pour le test des valeurs, il faut comparer des choses de même propriété
If Cell.Value > effet.Value Then

'L'assignation de la couleur ...
Cell.Offset(-1, 0).Interior.ColorIndex = 8


ATTENTION: dans tu oublie également de replacer les dates qui sont correctes à une autre valeur de couleur.....

@+Robert
 
J

jca06

Guest
Merci Robert,

J'ai suivi tes instruction à la lettre et j'en ai compris la plupart.
Je pensais qu'il fallait spécifier la variable de date d'effet pour que l'exécution ne se fasse qu'à la modification de cette cellule, mais je crois comprendre en définitive que l'instuction est lancée à chaque changement.
Autre grosse erreur : j'avais placé ce code dans un module !

Pour rétablir la couleur, j'ai rajouté un Else et un colorIndex = 2.

Merci pour ton aide, j'ai rassemblé pas mal d'informations sur les macros en peu de temps mais il me manque de la pratique pour tout bien comprendre.

Heureusement que j'ai découvert ce site, et heureusement qu'il y a des gens comme toi et @Thierry et les autres !

Merci encore
 

Discussions similaires

Réponses
8
Affichages
142

Statistiques des forums

Discussions
312 488
Messages
2 088 841
Membres
103 972
dernier inscrit
steeter