Sub ColorierBarresHistogramme()
    Const FeuilleParam  As String = "Catégories"
    Const GreyOtherBar  As Boolean = False
    
    Dim objChart        As chart
    Dim objSeries       As Series
    Dim i               As Long, j As Long
    Dim wsCat           As Worksheet
    Dim objCatDict      As Object
    Dim lgLastRow       As Long
    Dim strCatName      As String
    Dim boByCategorie   As Boolean
    
    On Error GoTo erreur
    If TypeName(Selection) <> "ChartArea" And TypeName(Selection) <> "PlotArea" Then
        MsgBox "Veuillez sélectionner le graphique (histogramme) à modifier.", vbExclamation
        Exit Sub
    End If
    Set objChart = ActiveChart ' Récupère le graphique sélectionné
    Set wsCat = ActiveWorkbook.Sheets(FeuilleParam)
    Set objCatDict = CreateObject("Scripting.Dictionary") ' Création du dictionnaire
    lgLastRow = wsCat.Cells(70000, "A").End(xlUp).Row
    For i = 2 To lgLastRow
        If wsCat.Cells(i, 1).Value <> "" Then
            objCatDict(Trim(LCase(wsCat.Cells(i, 1).Value))) = wsCat.Cells(i, 2).Interior.Color
        End If
    Next i
    For Each objSeries In objChart.SeriesCollection ' Parcourt toutes les séries du graphique
        strCatName = Trim(LCase(objSeries.Name))
        If objCatDict.exists(strCatName) Then
            objSeries.Format.Fill.ForeColor.RGB = objCatDict(strCatName)
        Else
            For j = 1 To objSeries.Points.Count
                strCatName = Trim(LCase(objSeries.XValues(j))) ' On uniformise la casse et supprime les espaces
                If objCatDict.exists(strCatName) Then
                    objSeries.Points(j).Format.Fill.ForeColor.RGB = objCatDict(strCatName)
                Else
                    If GreyOtherBar Then objSeries.Points(j).Format.Fill.ForeColor.RGB = RGB(200, 200, 200)
                End If
            Next j
        End If
    Next objSeries
    Set objChart = Nothing
    Set wsCat = Nothing
    Set objCatDict = Nothing
    MsgBox "Couleurs mises à jour pour le graphique sélectionné.", vbInformation
    Exit Sub
erreur:
    MsgBox Err.Description & "(" & Err.Number & ")", vbCritical, "Erreur ColorierBarresHistogramme"
End Sub