Re,
Voici une procédure que tu peux rattacher à un bouton...
Sub ColorClasses()
Dim dct, shp$, i%, clr&
dct = [PlageDepartements].Value
With Worksheets("Carte")
For i = 1 To UBound(dct)
shp = dct(i, 1)
clr = [LegendeA].Cells(dct(i, 7), 1).Interior.Color
With .Shapes(shp).Fill
.Solid
.ForeColor.RGB = clr
End With
Next i
End With
End Sub
Un peu moins compliqué que ta reproduction de code enregistré. Sache qu'un objet ShapeRange est un regroupement d'objets Shapes, alors quand tu n'en regroupes qu'un seul avec lui-même, tu peux te contenter de traiter directement l'objet.
La méthode Solid de l'objet FillFormat de la forme supprime le dégradé de couleurs antérieur.
Sinon, on parcourt ton tableau, on récupère le nom de la forme, on utilise sa classe pour définir la couleur à partir de la plage Légende, et on applique la couleur au fond de la forme indiquée.
Cordialement.