Mise en forme conditionnelle via macro
BOnjour le forum,
J'ai un petit souci au niveau de ma mise en forme conditionnelle.
J'ai utilisé l'enregistreur de macro, qui me donne cela:
Private Sub Worksheet_Activate()
Dim x As Long
x = WorksheetFunction.Max(Range("A" & Rows.Count).End(xlUp).Row, Range("B" & Rows.Count).End(xlUp).Row, _
Range("C" & Rows.Count).End(xlUp).Row, Range("D" & Rows.Count).End(xlUp).Row, Range("E" & Rows.Count).End(xlUp).Row, _
Range("F" & Rows.Count).End(xlUp).Row, Range("G" & Rows.Count).End(xlUp).Row, Range("H" & Rows.Count).End(xlUp).Row, _
Range("I" & Rows.Count).End(xlUp).Row, Range("J" & Rows.Count).End(xlUp).Row, Range("K" & Rows.Count).End(xlUp).Row, _
Range("L" & Rows.Count).End(xlUp).Row, Range("M" & Rows.Count).End(xlUp).Row, Range("N" & Rows.Count).End(xlUp).Row, _
Range("O" & Rows.Count).End(xlUp).Row, Range("P" & Rows.Count).End(xlUp).Row, Range("Q" & Rows.Count).End(xlUp).Row, _
Range("R" & Rows.Count).End(xlUp).Row)
Range("N2:R" & x).FormatConditions.AddIconSetCondition
Range("N2:R" & x).FormatConditions(Range("N2:R" & x).FormatConditions.Count).SetFirstPriority
With Range("N2:R" & x).FormatConditions(1)
.ReverseOrder = False
.ShowIconOnly = False
.IconSet = ActiveWorkbook.IconSets(xl3Signs)
End With
With Range("N2:R" & x).FormatConditions(1).IconCriteria(2)
.Type = xlConditionValueFormula
.Value = "=AUJOURDHUI()-7"
.Operator = 7
End With
With Range("N2:R" & x).FormatConditions(1).IconCriteria(3)
.Type = xlConditionValueFormula
.Value = "=AUJOURDHUI()+7"
.Operator = 7
End With
End Sub
J'ai placé ce code à l'activation de la feuille, mais malheureusement lorsqu'une de mes autres macros écris dans la plage de données, cela n'a aucun effet (lorsque je réactive la feuille). Par contre lorsque j'ajoute une date à la main dans ma plage de données et que je réactive la feuille, je n'ai aucun problème et cela fonctionne. Auriez-vous une explication pour cela?
Et si oui, comment faire pour que cela marche depuis VBA aussi?
Merci d'avance à vous.
Cordialement,
Xcelpowa
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
En recopiant le code tel quel, je n'ai pas de souci sur mon poste.
Un fichier exemple peut être utile (et ça m'aurait évité de tout retaper).
Ci-joint le fichier : sur la feuille F2, macro qui met à jour la cellule "N3" de la feuille F1 (une seule cellule pour test)
Bouben
Bonjour bouben,
Merci pour votre réponse.
Toutes mes excuses pour le fichier, je n'avais pas pensé à en joindre un, car je pensais à une erreur de mon code.
Je ne comprends pas du tout comment cela peut ne pas marcher chez moi, puisque j'ai un userform qui me permet de rentrer la date comme vous l'avez fait avec votre fenêtre de message. Je fais exactement la même chose sur le principe et j'ai beau activer la page ça ne marche pas. Si je double clique sur la cellule où ma date est apparue par contre et que je réactive ensuite la page, cela me fait bien ce que je veux.
C'est à ni rien comprendre!
Est-ce qu'il existe qqch pour faire un double clic automatiquement sur une cellule? Je suis tellement désespéré que je suis prêt à bidouiller comme ça.
Merci en tout cas de votre aide.
Cordialement,
Xcelpowa
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Peut-être en ajoutant à la fin de la copie de la valeur un rafraichissement du fichier
=> ThisWorkbook.RefreshAll
Je ne peux pas tester, n'ayant pas le souci
Bouben
A force de bricoler quelque chose j'ai réussi à m'en sortir.
J'utilise le CDate pour être sûr que j'ai bien une date (pourtant le IsDate me disait bien que oui...)
Et cette fois cela fonctionne. Le problème venait donc sûrement d'un format qui était pourtant bon.
N'empêche que ma bidouille fonctionne donc problème résolu.
En tout cas merci à vous Buben, car vous m'avez donné par votre programme la piste du problème (à savoir pas le code de mise en forme mais bien la valeur déjà présente dans la cellule).
PS:: Je ne connaissais pas le rafraichissement, très pratique également dans mon cas ici, merci
BOnne journée à vous et merci encore.
Cordialement,
xcelpowa