Mises en forme conditionnelle, date VBA
Bonjour,
J'ai un problème de mise en forme conditionnelle dans un calendrier. Je vous explique, dans un classeur que je dois faire il y a deux feuilles:
la "feuille A" est un calendrier excel et la "feuille b" contient des informations sur des affaires. Dans cette "feuille b" on trouve des dates de début et de fin de projet, je souhaite colorier dans le calendrier de ma "feuille a" la durée du projet --> date début < X < date de fin, au moyen de VBA. J'arrive à colorier les cases en fonction de résultats chiffrés mais lorsqu'il s'agit de date je n'arrive pas à mettre de rapport d'égalité.
Je ne peux pas utiliser la mise en forme conditionnelle "classique" car d'autres Macro sont déjà en place.
Merci,
Cyprien
PS: Je ne peux pas joindre le fichier pour des raisons de confidentialité
Bonjour Cyprien, et bienvenue sur le forum,
Sans ton fichier on ne peut pas bien comprendre ta demande (on ne sais même pas à quoi ressemble ton calendrier en feuille a) :p
Donc j'ai essayé de faire comme j'ai pu (en interprétant ta demande)!
Ci-dessous le code et ci-joint le fichier test !
Dans le fichier en [A1] clique sur le bouton pour lancer la procédure ;D
Sub Calendrier()
Dim x As Long, y As Long, Color As Long
Dim Day_Déb As Long, Month_Déb As Long
Dim Day_Fin As Long, Month_Fin As Long
Dim a As Range, b As Range
Cells.Interior.Pattern = xlNone
Columns(34).ClearContents
Color = 4
For x = 2 To Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
If Sheets(2).Cells(x, 5) <> "" And Sheets(2).Cells(x, 6) <> "" Then
Day_Déb = Day(Sheets(2).Cells(x, 5))
Month_Déb = Month(Sheets(2).Cells(x, 5))
Day_Fin = Day(Sheets(2).Cells(x, 6))
Month_Fin = Month(Sheets(2).Cells(x, 6))
Set a = Sheets(1).Rows(1).Find(what:=Day_Déb)
Set b = Sheets(1).Rows(1).Find(what:=Day_Fin)
If Month_Déb = Month_Fin Then
Range(Cells(Month_Déb + 1, a.Column), Cells(Month_Déb + 1, b.Column)).Interior.ColorIndex = Color
Sheets(1).Cells(Range("AH" & Rows.Count).End(xlUp).Row + 1, 34).Interior.ColorIndex = Color
Sheets(1).Cells(Range("AH" & Rows.Count).End(xlUp).Row + 1, 34) = Sheets(2).Cells(x, 1)
Else
Range(Cells(Month_Déb + 1, a.Column), Cells(Month_Déb + 1, 32)).Interior.ColorIndex = Color
For y = Month_Déb To Month_Fin - 1
If Month_Déb + 1 = Month_Fin Then Exit For
Range(Cells(y + 1, 2), Cells(y + 1, 32)).Interior.ColorIndex = Color
Next
Range(Cells(Month_Fin + 1, 2), Cells(Month_Fin + 1, b.Column)).Interior.ColorIndex = Color
Sheets(1).Cells(Range("AH" & Rows.Count).End(xlUp).Row + 1, 34).Interior.ColorIndex = Color
Sheets(1).Cells(Range("AH" & Rows.Count).End(xlUp).Row + 1, 34) = Sheets(2).Cells(x, 1)
End If
End If
Color = Color + 1
Next
'Formule trouver sur https://www.excel-pratique.com/fr/astuces_vba/Day(DateSerial(Year(CDate("01/" & y & "/2018")), Month(CDate("01/" & y & "/2018")) + 1, 1) - 1)_dans_mois.php
'Adapter :
For y = 1 To 12
If Day(DateSerial(Year(CDate("01/" & y & "/2018")), Month(CDate("01/" & y & "/2018")) + 1, 1) - 1) <> 31 Then Range(Cells(y + 1, Day(DateSerial(Year(CDate("01/" & y & "/2018")), Month(CDate("01/" & y & "/2018")) + 1, 1) - 1) + 2), Cells(y + 1, 32)).Interior.Color = 4
Next
End SubRestant à dispo !
Une ligne est égale à un projet ?
J'ai réussi à trouver une solution une solution à mon problème, merci pour votre aide
Cependant je me trouve maintenant face à un autre problème: Les lignes du calendrier sont ajoutées au moyen d'une macro qui les fait correspondre à une ligne de projet. j'ai ajouter ma macro de mise en forme conditionnelle à la première macro. Cependant si je change les dates dans les lignes projet après avoir créer la ligne de calendrier les couleur ne se mettent bien évidement pas à jour et je ne peux pas séparer les deux macros.
comment puis je faire ?
Merci

