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.AddColorScale
est 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
OnCalculate
est 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
ApplyTwoColorScale
applique une échelle de 2 couleurs : blanc pour la valeur minimale et rouge pour la valeur maximale. - La fonction
RemoveColorScale
supprime toute mise en forme conditionnelle existante.
Étape 4 : Exécution du Code
- Exécutez la procédure
CreateHeatMap
pour 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.