bonjur
Voici ce que je te propose
Au moment de colorier
Tu crée trois table rouge vert et bleue avec les valeurs que tu souhaites
tu utiliseras la valeur du nom (1,2,3,4) pour indexer ces tables et affecter le rgb à ton shape
tu peux utilser ce principe pour les autres mises en couleur
Sub Histo(Fl As String, L As Single, T As Single, W As Single, H As Single, Nom As String, Txt As String, lg As Long, Optional cl As Long = 0)
Dim sh As Object, lig As Long, i As Long, couleur As Double
    rcouleurs = Array(0, 0, 250, 0, 0)
    vcouleurs = Array(0, 0, 0, 250, 90)
    bcouleurs = Array(0, 250, 0, 0, 125)
    With Sheets(Fl)
        couleur = .Range("A" & lg).Interior.Color
        Set sh = .Shapes.AddShape(msoShapeRoundedRectangle, L, T, W, H)
        
        With sh
      
        .Fill.ForeColor.RGB = RGB(rcouleurs(CDbl(Nom)), vcouleurs(CDbl(Nom)), bcouleurs(CDbl(Nom)))
        .Line.ForeColor.RGB = RGB(160, 160, 160)
            '.Fill.ForeColor.RGB = IIf(cl = 0 Or cl = 16777215, couleur, cl)
            '.Line.ForeColor.RGB = RGB(160, 160, 160)
            .Fill.Transparency = 0.3
        
            .Name = "_" & Nom
            .TextFrame2.HorizontalAnchor = msoAnchorCenter
            With .TextFrame2.TextRange.Characters
                .Text = Txt
                .Font.Size = 9
                .Font.Fill.ForeColor.RGB = &H353535
            End With
            .OnAction = "Fiche"
        End With
    End With
End Sub