VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} ConfigurationColors 
   Caption         =   "Configuration"
   ClientHeight    =   2295
   ClientLeft      =   4125
   ClientTop       =   4470
   ClientWidth     =   5265
   OleObjectBlob   =   "ConfigurationColors.frx":0000
End
Attribute VB_Name = "ConfigurationColors"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub UserForm_Initialize()
    ' Démarre la UserForm au millieu de l'écran où se trouve Excel
    Call StartUpPositionInMiddle(Me)
    
    ' Colorie les frames en fonction des couleurs définies dans l'onglet "CONFIGURATION"
    Call InitializeFramesColor

End Sub

Private Sub StartUpPositionInMiddle(paramUserForm As Object)
    paramUserForm.StartUpPosition = 0
    paramUserForm.Left = Application.Left + (0.5 * Application.Width) - (0.5 * paramUserForm.Width)
    paramUserForm.Top = Application.Top + (0.5 * Application.Height) - (0.5 * paramUserForm.Height)
End Sub

Private Sub InitializeFramesColor()
    Dim WORKSHEET_CONFIGURATION As Worksheet
    Set WORKSHEET_CONFIGURATION = ThisWorkbook.Sheets("CONFIGURATION")

    FrameColor1.BackColor = WORKSHEET_CONFIGURATION.range("C3").DisplayFormat.Interior.color
    FrameColor2.BackColor = WORKSHEET_CONFIGURATION.range("C4").DisplayFormat.Interior.color
    FrameColor3.BackColor = WORKSHEET_CONFIGURATION.range("C5").DisplayFormat.Interior.color
End Sub

Private Sub FrameColor1_Click()
    Call HandleChangeColor(FrameColor1, ThisWorkbook.Sheets("CONFIGURATION").range("C3"))
End Sub

Private Sub FrameColor2_Click()
    Call HandleChangeColor(FrameColor2, ThisWorkbook.Sheets("CONFIGURATION").range("C4"))
End Sub

Private Sub FrameColor3_Click()
    Call HandleChangeColor(FrameColor3, ThisWorkbook.Sheets("CONFIGURATION").range("C5"))
End Sub

Private Sub LabelResetColors_Click()
    Debug.Print "Reset de la configuration des couleurs"
    
    Dim defaultColors(1 To 3) As Long
    Dim CurrentFrame As control
    Dim i As Integer
    For i = 1 To 3
        defaultColors(i) = ThisWorkbook.Sheets("CONFIGURATION").range("D" & i + 2).DisplayFormat.Interior.color
        Set CurrentFrame = Me.Controls("FrameColor" & i)
        CurrentFrame.BackColor = defaultColors(i)
        ThisWorkbook.Sheets("CONFIGURATION").range("C" & i + 2).Interior.color = defaultColors(i)
    Next i
    
    Call UpdateDashboard
End Sub

Private Sub HandleChangeColor(frameColor As frame, rangeColor As range)
    ' Récupère la palette pour alimenter les couleurs personnalisé du color picker
    Dim palette As Variant
    palette = App.getPaletteForColorPicker

    ' Lecture de la précendente couleur sauvegardé dans la feuille "CONFIGURATION"
    Dim previousColor As Long
    previousColor = rangeColor.DisplayFormat.Interior.color

    ' Ouverture du color picker pour demander à l'utilisateur de choisir une nouvelle couleur
    Dim newColor As Long
    newColor = CreatePickerColor(previousColor, palette)
    If newColor <> -1 Then
        ' Applique la nouvelle couleur dans la UserFrame
        frameColor.BackColor = newColor
        ' Sauvegarde la nouvelle couleur dans l'onglet "CONFIGURATION"
        rangeColor.Interior.color = newColor
        ' Appliquer la nouvelle couleur dans le dashboard
        Call UpdateDashboard
    End If
End Sub

Private Sub UpdateDashboard()
    Dim WORKSHEET_CONFIGURATION As Worksheet
    Set WORKSHEET_CONFIGURATION = ThisWorkbook.Sheets("CONFIGURATION")
    Dim WORKSHEET_DASHBOARD As Worksheet
    Set WORKSHEET_DASHBOARD = ThisWorkbook.Sheets("Dashboard")

    ' Mise à jour des couleurs dans l'en-tête du tableau
    WORKSHEET_DASHBOARD.range("C2").Interior.color = WORKSHEET_CONFIGURATION.range("C3").DisplayFormat.Interior.color
    WORKSHEET_DASHBOARD.range("D2").Interior.color = WORKSHEET_CONFIGURATION.range("C4").DisplayFormat.Interior.color
    WORKSHEET_DASHBOARD.range("E2").Interior.color = WORKSHEET_CONFIGURATION.range("C5").DisplayFormat.Interior.color
    
    ' Mise à jour des couleurs dans le corps du tableau (40% plus clair que l'en-tête)
    WORKSHEET_DASHBOARD.range("C3:C12").Interior.color = LightenColor(WORKSHEET_CONFIGURATION.range("C3").DisplayFormat.Interior.color, 0.4)
    WORKSHEET_DASHBOARD.range("D3:D12").Interior.color = LightenColor(WORKSHEET_CONFIGURATION.range("C4").DisplayFormat.Interior.color, 0.4)
    WORKSHEET_DASHBOARD.range("E3:E12").Interior.color = LightenColor(WORKSHEET_CONFIGURATION.range("C5").DisplayFormat.Interior.color, 0.4)
    
    ' Mise à jour des couleurs des series du graphique
    Dim chartObj As ChartObject
    Dim chart As chart
    Set chartObj = WORKSHEET_DASHBOARD.ChartObjects("Graphique1")
    Set chart = chartObj.chart
    chart.SeriesCollection(1).Format.Fill.ForeColor.RGB = WORKSHEET_CONFIGURATION.range("C3").DisplayFormat.Interior.color
    chart.SeriesCollection(2).Format.Fill.ForeColor.RGB = WORKSHEET_CONFIGURATION.range("C4").DisplayFormat.Interior.color
    chart.SeriesCollection(3).Format.Fill.ForeColor.RGB = WORKSHEET_CONFIGURATION.range("C5").DisplayFormat.Interior.color
End Sub

Private Function LightenColor(colorCode As Long, Optional lightenPercentage As Double = 0.2) As Long
    ' Extraire les valeurs RGB
    Dim red As Integer
    Dim green As Integer
    Dim blue As Integer
    red = colorCode Mod 256
    green = (colorCode \ 256) Mod 256
    blue = (colorCode \ 65536) Mod 256
    
    ' Rendre la couleur plus claire
    red = Application.Min(red + lightenPercentage * (255 - red), 255)
    green = Application.Min(green + lightenPercentage * (255 - green), 255)
    blue = Application.Min(blue + lightenPercentage * (255 - blue), 255)
    
    ' Convertir les valeurs RGB en un code couleur
    LightenColor = RGB(red, green, blue)
End Function
