Créer des cartes thermiques interactives, Excel VBA
Voici un code VBA détaillé pour créer des cartes thermiques interactives dans Excel, avec une explication complète.
Étape 1 : Préparer les données
Supposons que vos données sont dans une plage (par exemple, A1:D10), où chaque cellule représente un point de données. L’objectif est d’utiliser un code couleur pour représenter les valeurs dans cette plage, avec des valeurs plus élevées affichées dans une couleur plus intense et des valeurs plus faibles dans une couleur plus claire.
Étape 2 : Définir le code VBA
Voici le code VBA détaillé pour générer une carte thermique interactive en fonction des valeurs dans une plage spécifiée. Il utilise la mise en forme conditionnelle pour appliquer des couleurs en fonction de la valeur dans chaque cellule.
Sub CreateHeatMap()
Dim ws As Worksheet
Dim dataRange As Range
Dim minValue As Double
Dim maxValue As Double
Dim cell As Range
Dim colorScale As ColorScale
' Définir la feuille de calcul et la plage de données
Set ws = ThisWorkbook.Sheets("Feuil1") ' Changez "Feuil1" par le nom de votre feuille réelle
Set dataRange = ws.Range("A1:D10") ' Adaptez la plage à vos données
' Trouver les valeurs minimales et maximales dans la plage
minValue = Application.WorksheetFunction.Min(dataRange)
maxValue = Application.WorksheetFunction.Max(dataRange)
' Supprimer les mises en forme conditionnelles existantes
dataRange.FormatConditions.Delete
' Appliquer une mise en forme conditionnelle avec une échelle de 3 couleurs
With dataRange.FormatConditions.AddColorScale(3)
' Définir la couleur pour la valeur la plus basse (min)
With .ColorScaleCriteria(1)
.Type = xlConditionValueNumber
.Value = minValue
.FormatColor.Color = RGB(255, 255, 255) ' Couleur claire (blanc)
End With
' Définir la couleur pour la valeur médiane (moyenne)
With .ColorScaleCriteria(2)
.Type = xlConditionValueNumber
.Value = (minValue + maxValue) / 2
.FormatColor.Color = RGB(255, 255, 0) ' Jaune (plage intermédiaire)
End With
' Définir la couleur pour la valeur la plus élevée (max)
With .ColorScaleCriteria(3)
.Type = xlConditionValueNumber
.Value = maxValue
.FormatColor.Color = RGB(255, 0, 0) ' Rouge (valeur élevée)
End With
End With
' Ajouter l'interactivité : Ajouter une liste déroulante pour changer dynamiquement l'échelle de couleurs
Call AddInteractivity(ws, dataRange)
End Sub
Sub AddInteractivity(ws As Worksheet, dataRange As Range)
' Créer un ComboBox pour sélectionner le type d'échelle de couleurs
Dim comboBox As Object
Set comboBox = ws.Shapes.AddFormControl(xlDropDown, 10, 10, 150, 20) ' Position et taille
With comboBox.ControlFormat
.AddItem "Échelle de 3 couleurs"
.AddItem "Échelle de 2 couleurs"
.AddItem "Pas d'échelle de couleurs"
.ListIndex = 1 ' Par défaut, échelle de 3 couleurs
End With
' Ajouter un gestionnaire d'événements pour le changement du ComboBox
ws.OnCalculate = "ChangeColorScale"
End Sub
Sub ChangeColorScale()
Dim comboBox As Object
Set comboBox = ActiveSheet.Shapes(1).ControlFormat
' Obtenir l'option sélectionnée dans la liste déroulante
Dim selection As Integer
selection = comboBox.ListIndex
' Réappliquer l'échelle de couleurs correspondante en fonction de la sélection
Select Case selection
Case 1 ' Échelle de 3 couleurs
Call CreateHeatMap
Case 2 ' Échelle de 2 couleurs (version simplifiée)
Call ApplyTwoColorScale
Case 3 ' Pas d'échelle de couleurs
Call RemoveColorScale
End Select
End Sub
Sub ApplyTwoColorScale()
Dim ws As Worksheet
Dim dataRange As Range
Dim minValue As Double
Dim maxValue As Double
' Définir la feuille de calcul et la plage de données
Set ws = ThisWorkbook.Sheets("Feuil1")
Set dataRange = ws.Range("A1:D10")
' Trouver les valeurs minimales et maximales
minValue = Application.WorksheetFunction.Min(dataRange)
maxValue = Application.WorksheetFunction.Max(dataRange)
' Supprimer les mises en forme conditionnelles existantes
dataRange.FormatConditions.Delete
' Appliquer une échelle de 2 couleurs
With dataRange.FormatConditions.AddColorScale(2)
' Définir la couleur pour la valeur la plus basse (min)
With .ColorScaleCriteria(1)
.Type = xlConditionValueNumber
.Value = minValue
.FormatColor.Color = RGB(255, 255, 255) ' Blanc (valeur faible)
End With
' Définir la couleur pour la valeur la plus élevée (max)
With .ColorScaleCriteria(2)
.Type = xlConditionValueNumber
.Value = maxValue
.FormatColor.Color = RGB(255, 0, 0) ' Rouge (valeur élevée)
End With
End With
End Sub
Sub RemoveColorScale()
Dim ws As Worksheet
Dim dataRange As Range
' Définir la feuille de calcul et la plage de données
Set ws = ThisWorkbook.Sheets("Feuil1")
Set dataRange = ws.Range("A1:D10")
' Supprimer toutes les mises en forme conditionnelles
dataRange.FormatConditions.Delete
End Sub
Étape 3 : Explication du Code
1. Fonction principale – CreateHeatMap
- Feuille et Plage de données : La feuille de calcul (
ws) et la plage de données (dataRange) sont définies, en ciblant les cellules contenant vos données. - Trouver les valeurs minimales et maximales : Les valeurs minimales et maximales dans la plage de données sont utilisées pour définir les limites de l’échelle de couleurs.
- Mise en forme conditionnelle : La méthode
FormatConditions.AddColorScaleest utilisée pour appliquer une échelle de couleurs. Le code applique une échelle de 3 couleurs : - Blanc pour la valeur minimale.
- Jaune pour la valeur médiane.
- Rouge pour la valeur maximale.
2. Interactivité avec ComboBox – AddInteractivity
- Un ComboBox est ajouté à la feuille pour permettre à l’utilisateur de sélectionner l’échelle de couleurs.
- Le ComboBox offre trois options :
1. Échelle de 3 couleurs (par défaut).
2. Échelle de 2 couleurs (simplifiée).
3. Pas d’échelle de couleurs (supprime la mise en forme conditionnelle).
- L’événement
OnCalculateest déclenché lorsque l’utilisateur modifie la sélection dans le ComboBox, appelant ainsi la procédureChangeColorScale.
3. Procédure ChangeColorScale
- Cette procédure vérifie l’option sélectionnée dans le ComboBox et applique l’échelle de couleurs correspondante (ou la supprime).
4. Procédures ApplyTwoColorScale et RemoveColorScale
- La fonction
ApplyTwoColorScaleapplique une échelle de 2 couleurs : blanc pour la valeur minimale et rouge pour la valeur maximale. - La fonction
RemoveColorScalesupprime toute mise en forme conditionnelle existante.
Étape 4 : Exécution du Code
- Exécutez la procédure
CreateHeatMappour initialiser la carte thermique avec des options interactives. - L’utilisateur peut choisir entre différentes échelles de couleurs via le ComboBox, offrant ainsi une expérience interactive de visualisation des données.
Conclusion :
Ce code permet de créer une carte thermique interactive avec VBA dans Excel, permettant à l’utilisateur de modifier dynamiquement l’échelle de couleurs pour la visualisation des données. Grâce à la mise en forme conditionnelle et à l’interactivité via VBA, vous pouvez personnaliser la présentation de vos données et offrir une visualisation plus claire et dynamique.