VBA - Echelle de couleurs

mromain

XLDnaute Barbatruc
Bonjour le forum :)

Voici une petite classe qui permet de manipuler des échelles de couleurs. L’exemple joint montre un exemple avec de la cartographie (je n vois pas trop d’autres cas où ça pourrait être utile, mais on ne sait jamais…).

La classe en question (Cls_ColorScale) possède 3 méthodes :
  • InitScale : qui permet d’initialiser l’échelle. Cette méthode possède 3 paramètres.
    Le premier permet de choisir le type de couleur. Trois types sont définis : Arc-en-ciel, Vert-Jaune-Rouge et échelle de gris.
    attachment.php

    Les deux autres servent à définir les bornes inférieure et supérieure de l’échelle.
  • BuildLegendShape : qui sert à créer une forme avec le dégradé de couleur pour la légende.
    Cette méthode prend en paramètre :
    • la direction de la légende (horizontale ou verticale) ;
    • la feuille destination ;
    • le positionnement de la légende (Top, Left, Height et Width).
    La méthode renvoie l’objet Shape créé. Attention, si la feuille destination possède déjà une forme nommée Legend, celle-ci sera supprimée au début de la procédure.
  • GetColor : qui prend une valeur en paramètre et renvoi le code couleur en fonction.

L’exemple joint montre comment utiliser cette classe pour colorier les départements de la carte de France en fonction de valeurs (aléatoires).

A+
 

Pièces jointes

  • Exemple_EchelleCouleurs.xlsm
    108.3 KB · Affichages: 470
  • TypesLegende.png
    TypesLegende.png
    11.8 KB · Affichages: 2 880

Dranreb

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

Bonjour.
Nul doute que je l'aurais combiné avec mon module CouleursCalcul pour des palettes plus riches et des dégradés de luminosités plus justes, tenant compte du gamma des écrans (la couleur à mi chemin étant en général trop sombre, sinon, car la luminosité globale d'une trame fine à égalité de surfaces blanche et noires est plus proche de 186 que de 127,5.).
Mais bien sûr ça pourrait poser un problème d'aisance de pilotage, à moins de limiter les possibilités à une couleur de départ, une autre d'arrivée, plus quelques options.
 

Modeste

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

Bonjour,

Merci Mickaël, pour cette "petite classe" :D
Pour les "amateurs" (dans les 2 sens du terme) comme moi, une petite aide pour ce qui est des paramètres à fournir aux méthodes InitScale et BuildLegendShape serait la bienvenue (soit des "consignes d'utilisation" ou une petite boîte de dialogue :p) (j'ai fini par trouver les enum ... mais ne suis remonté de la mine qu'au bout de 3 jours) :eek:
Ceci étant, je n'en suis pas encore au stade de pouvoir imaginer d'autres contextes d'utilisation ... ne t'empresse donc pas d'ajouter des fonctionnalités supplémentaires!

Quant à l'intervention de Bernard, je n'en ai compris (comme à mon habitude) qu'un pourcentage ridicule, mais je présume qu'on pourrait la considérer comme une sorte de compliment ;) (jusqu'à "Bonjour" inclus, ça allait! Au-delà et par intérêt personnel, j'ai retenu "aisance de pilotage")
 

JCGL

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

Bonjour à tous,

Joli travail MRomain.

Pour tenter d'aider notre ami Luc, j'ai ajouté une petite boite...

A++ mon bon Luc
A+ à tous
 

Pièces jointes

  • Exemple_EchelleCouleurs (1).xlsm
    116.3 KB · Affichages: 345

Dranreb

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

Le module CouleursCalculs permet de calculer des dégradés de couleurs. Je l'utilise souvent pour calculer des palettes de .bmp 256 couleur pour des figures fractales ou des décors d'un labyrinthe.
 

Pièces jointes

  • Couleurs.zip
    64.5 KB · Affichages: 220
  • Couleurs.zip
    64.5 KB · Affichages: 183
  • Couleurs.zip
    64.5 KB · Affichages: 225

mromain

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

Bonjour Luc, Bernard, JCJL :)

Voici un petit détail de l'utilisation :
D'abord, déclarer et créer l'objet, puis l'initialiser :
VB:
'déclaration
Dim colorScale As Cls_ColorScale, couleurRGB As Long
    
    'initialiser l'échelle de couleurs
     Set colorScale = New Cls_ColorScale
    colorScale.InitScale GreenYellowRed, 0, 100
Le premier paramètre de InitScale est une Ce lien n'existe plus qui peut prendre comme valeur :
  • Rainbow (= 1) ;
  • GrayScale (= 2) ;
  • GreenYellowRed (= 3).
Ce paramètre permet donc de choisir le type d'échelle (image du précédent post).

Les deux autres paramètres définissent les bornes de l'échelle. Ici, de 0 à 100.

Ensuite, il faut utiliser la méthode GetColor pour récupérer le code RGB de la couleur d'une valeur donnée.
L'exemple ci-dessous montre comment récupérer la couleur correspondante à la valeur 72 et en faire la couleur de fond de la cellule active.
VB:
    'récupérer la couleur correspondant à la valeur 72
     couleurRGB = colorScale.GetColor(72)
    
    'modifier la couleur de fond de la cellule active
     ActiveCell.Interior.Color = couleurRGB

Et pour finir, la méthode BuildLegendShape permet de créer la légende sur une feuille. Elle prend 6 paramètres :
  • l'orientation de la légende : LeftToRight (horizontale) ou BottomToUp (verticale) ;
  • la feuille destination (sur laquelle la légende sera créée) ;
  • la position et la taille de la légende (Top + Left + Height + Width).

L'exemple ci-dessous montre comment créer une légende horizontale sur la zone "B4:G4" de la feuille "Feuil1" :
VB:
    With ThisWorkbook.Sheets("Feuil1").Range("B4:G4")
        colorScale.BuildLegendShape LeftToRight, .Parent, .Top, .Left, .Height, .Width
    End With

A+
 

Modeste

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

Re,

Dis, mon Jean-Claude, moi j'attendais une vraie boîte de dialogue (pas "juste" une InputBox) avec toutes les options (y compris l'orientation de la légende, le choix de la feuille dans une liste, la possibilité de sélectionner la plage de cellules avec la souris et tout ça ;);) (je plaisante, hein, au cas où tu aurais l'ombre du début d'un soupçon de doute) ... et puis c'était pas pour moi, c'était pour les autres que je demandais! :D


Merci Mickaël pour les compléments qui permettront à ma compréhension de grignoter un degré supplémentaire sur l'échelle de nomdidjukcécompliqué (qui en compte autant que de lignes en Excel, depuis 2007)


Euh ... Bernard, ce n'est pas pour moi que tu as joint ce zip? Dis-moi que c'est juste pour mromain et la postérité!?
En jeune homme bien élevé, j'ai tout de même testé: décompressé l'archive, double-cliqué sur l'exécutable ... et l'alarme incendie s'est déclenchée "ALARME, MENACE POUR VOTRE SYSTÈME" et tout le tintouin! Peuh, me suis-je dit, c'est Bernard: je ne risque rien!
... Et puis, en définitive, "The language DLL 'VB6FR.DLL' could not be found".
Ceci dit il me semble avoir déjà vu un de tes "bébés" dans une autre discussion, il y a déjà un temps où tu évoquais les couleurs fractales. Si ce n'était celui-ci, ce devait être son frère!
... et puis d'abord, moi, j'ai peur dans les labyrinthes!
 

Dranreb

XLDnaute Barbatruc
Re : VBA - Echelle de couleurs

La VB6FR.DLL est fournie dans le zip pour ceux qui ne l'auraient pas sur leur système. Il suffit de l'installer, dans C\WINDOWS\System32 par exemple.
Oui je propose de temps à autres ce petit utilitaire très pratique pour définir des couleurs sympa pour les contrôles dans un Userform notamment. Là c'était pour montrer les couleurs qui peuvent être calculées à partir des informations modifiées dans les TextBox ou par les réglettes, car cet utilitaire utilise le module CouleursCalculs.

Mais "ALARME, MENACE POUR VOTRE SYSTÈME" ?? ne souffrirait-il pas d'allergie ton ordi ? (c'est une réponse immunitaire exagérée). Il ne crée ou modifie qu'un fichier Couleurs.txt sur le même dossier que le programme.

L'utilitaire (et donc le module aussi) permet entre autre de calculer la couleur intermédiaire entre deux autres. On peut y voir que l'intermédiaire entre le magenta RGB(254, 0, 254) et le vert RGB(0, 254, 0) c'est bien le gris RGB(185, 185, 185), plus sombre que le vert mais plus clair que le magenta et non pas RGB(127, 127, 127) carrément plus sombre que le magenta ! Voila ce que je voulais dire avec mon histoire de gamma…
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG