MACRO CARTE DE CHALEUR - CODE TROP LONG

Bonjour à tous.

C'est mon premier post ici, je me lance.

Je cherche à raccourcir un macro trop longue car j'ai le message d'erreur suivant "Erreur de compilation: procédure trop grande"

Effectivement le code est assez long mais c'est une répétition de l'élément ci dessous (80 répétitions).

Je cherche en fait a créer une carte de chaleur.

Je test la valeur d'une cellule qui correspond à une zone. Si elle est égale à 1 alors la zone (forme libre) prend une couleur, si elle est égale à 2 une autre couleur et ce jusque 10.

Est ce que vous connaissez un moyen de raccourcir le code ci dessous ?

Je ne sais pas si je suis clair

Merci

'H49 Freeform 30

If Range("H49").Value = 1 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(255, 255, 255)

End With

End If

If Range("H49").Value = 2 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(153, 102, 101)

End With

End If

If Range("H49").Value = 3 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(167, 89, 89)

End With

End If

If Range("H49").Value = 4 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(180, 76, 77)

End With

End If

If Range("H49").Value = 5 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(192, 64, 65)

End With

End If

If Range("H49").Value = 6 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(205, 51, 51)

End With

End If

If Range("H49").Value = 7 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(218, 38, 39)

End With

End If

If Range("H49").Value = 8 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(229, 25, 26)

End With

End If

If Range("H49").Value = 9 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(242, 12, 12)

End With

End If

If Range("H49").Value = 10 Then

ActiveSheet.Shapes.Range(Array("Freeform 30")).Select

With Selection.ShapeRange.Fill

.ForeColor.RGB = RGB(254, 0, 0)

End With

End If

Salut tjaillet,

bienvenue sur le forum!

Tu complètes la première ligne avec les RGB correspondant à chaque valeur de Range("H49") avec l'exigence que ces valeurs doivent être continues à partir de 1 : chance, j'en ai déjà mis trois!

.ForeColor s'occupe du reste!

sRGB = Choose(Range("H49").Value, RGB(255, 255, 255), RGB(153, 102, 101), RGB(167, 89, 89))
ActiveSheet.Shapes.Range(Array("Freeform 30")).Select
With Selection.ShapeRange.Fill
    .ForeColor.RGB = sRGB
End With

A+

Bonjour,

Je ne trouve pas le code trop long, je pense que l'erreur est ailleurs mais voila une code raccourci :

Sub Test()

    With ActiveSheet.Shapes("Freeform 30")

        Select Case Range("H49").Value

            Case 1: .Fill.ForeColor.RGB = RGB(255, 255, 255)
            Case 2: .Fill.ForeColor.RGB = RGB(153, 102, 101)
            Case 3: .Fill.ForeColor.RGB = RGB(167, 89, 89)
            Case 4: .Fill.ForeColor.RGB = RGB(180, 76, 77)
            Case 5: .Fill.ForeColor.RGB = RGB(192, 64, 65)
            Case 6: .Fill.ForeColor.RGB = RGB(205, 51, 51)
            Case 7: .Fill.ForeColor.RGB = RGB(218, 38, 39)
            Case 8: .Fill.ForeColor.RGB = RGB(229, 25, 26)
            Case 9: .Fill.ForeColor.RGB = RGB(242, 12, 12)
            Case 10: .Fill.ForeColor.RGB = RGB(254, 0, 0)

        End Select

    End With

End Sub

Un grand merci pour votre rapidité. C'est parfait.

Merci

Rechercher des sujets similaires à "macro carte chaleur code trop long"