XLS : Sélecteur de Couleur

Lu76Fer

XLDnaute Occasionnel
Bonjour,

Il existe une interface pour choisir des dossiers ou fichers qui retourne leurs noms complets : Application.FileDialog. Par contre, il est possible de choisir une couleur à partir de la barre d'outils standard du menu <<Home>> mais il n'est pas possible de faire directement appel à l'interface et de récupérer la valeur de la couleur sélectionnée.
Du coup j'ai codé et partage ma solution, pour pouvoir intégrer une interface de sélection d'une couleur, simple d'utilisation, au sein d'un projet.

SélecteurDeCouleur.jpg


Il y a différente façon d'intéragir, soit en utilisant la souris, soit en basculant sur un contrôle au clavier. La bascule au clavier interdit l'accès aux cellules car dans ce cas les touches flèchés ne sont pas affectées aux même actions. Voici le code qui permet dans une feuille protégée de dé/bloquer l'accès aux cellules de la feuille S_Spectre :
VB:
'Bloquer tout accès aux cellules (attention la suppression fonctionne toujours sur la cellule active)
S_Spectre.EnableSelection = xlNoSelection
'Autoriser à nouveau l'accès aux cellules déverrouillées
S_Spectre.EnableSelection = xlUnlockedCells
<CONTROL> Permet de basculer entre souris & clavier
Dans le mode clavier :
<TAB><SHIFT> Cela donne la possibilité de naviguer entre les 4 zones : l'échelle de luminance, le graphe de couleur (teinte, Saturation), les paramètres RGB et enfin les paramètres TSL.​
<TOUCHES FLECHEES><SHIFT>Sur les graphes les flèches remplacent la souris et la touche <Shift> booste le déplacement.​
Pour les composantes, les touches haut et bas permettent de se déplacer entre les valeurs et les touches droite et gauche font varier la valeur de chaque paramètre en fonction de celui sélectionné. Dans ce dernier cas d'utilisation <Shift> permet également de booster la variation.​
<RETURN> Pour valider son choix et revenir à la feuille ayant lancée l'interface.​
<ECHAP> Pour annuler et sortir en revenant sur la feuille ayant lancée l'interface.
<CLIC-DROIT> Change l'apparence du pointeur du "Spectre" de couleur​

Comment interfacer le sélecteur de couleur avec votre projet Excel ?​

Si vous aviez besoin d'utiliser ce petit outil dans votre projet voici la procédure :
Copier les modules ColorChoice, LibColor et LibTools ainsi que la feuille S_Spectre et adapté le code de ThisWorkbook avec le votre.
Remarque : par défaut, la fermeture du fichier by-pass toute sauvegarde !
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If UserMode Then ThisWorkbook.Saved = True
End Sub
'Pour désactiver cela du coup il suffit de modifier le code ainsi :
Private Sub Workbook_Open()
   'UserMode = True
End Sub

Pour afficher la feuille S_Spectre et lancer le sélecteur il suffit d'appeler la procédure ChooseColor. Par défaut l'application pointe sur la dernière couleur sélectionnée mais si vous passez en paramètre une valeur Long de couleur c'est celle-ci qui sera pointée.
Pour récupérer la valeur sélectionnée il faut que vous implémentiez une procédure ColorChose ainsi :
VB:
Sub ColorChose(lCol As Long)
   'Si lCol = -1 alors pas de choix
End Sub

Paramétrer l'application pour l'ajuster à votre besoin​

Dans le Module LibTools :
REFRESH_TIME = 40 ms de période de raffraichissement, soit une fréquence d'appel de la procédure LoopRealTime de 1000/40 soit 25 fois par seconde.​
TIME_RPT = 200 ms soit 2 dixième de seconde : temps de répétition touche​
MAXSPEED = 500 : détermine la vitesse maximale de "déplacement" au clavier du pointeur (ou d'une valeur)​
SHIFT_QUICK = 50 : gain de vitesse sur la touche de booste <Shift>

J'ai ajouté en annexe toutes les fonctions d'initialisation graphique permettant de générer le "Spectre de couleur", les barres de titre, l'activation de la main du pointeur souris sur les 'CellForms' : InitGraphiques.vbs

Note technique sur les difficultés rencontrées​

J'ai du renoncer à utiliser une grande matrice de 256x256 celules pour mon "Spectre" de couleur car cela génère une erreur liée à une contrainte d'Excel : "Nombre de formats de cellule différents trop élevé".
Pour plus de détail allez voir le sujet à partir de ce lien :​
J'ai pour la même raison dû utiliser des formes de type Rectangle pour l'affichage de l'échelle de lumière, de l'aperçu et de la couleur sélectionnée.​
Afin de réduire le nombre de format différent j'ai utilisé 2x256 cellules pour générer le graphe en couleur. Chaque cellule comportant des dégradés qui permettent d'obtenir une bonne approximation des couleurs souhaitées. La partie haute comporte 10 dégradés soit 11 positions, sur chaque position la couleur est calculée précisement et elle évolue de façon linéaire jusqu'à la position suivante. La partie basse ne comporte qu'un dégradé soit 2 positions.
 

Pièces jointes

  • InitGraphiques.txt
    2.1 KB · Affichages: 2
  • ColorChooser_v1-0.xlsm
    185.3 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
J'ai aussi une ébauche d'un nouveau système pour des critères de choix encore différents
 

Pièces jointes

  • CouleurCMJN.xlsm
    259.9 KB · Affichages: 4

Lu76Fer

XLDnaute Occasionnel
Bonsoir.
Voir mon classeur CouleurCls.xlsm qui a d'autres interfaces.
Bonjour,
Je suis sûr de trouver des éléments techniques intéressant dans votre projet comme toujours et je remarque qu'il y a toujours une approche très scientifique.
De mon côté, mon projet comporte plein de point technique mais pourrait être simplifié par l'utilisation d'un UserForm et d'une simple image pour afficher le "Spectre" de couleur.
Merci pour votre attention !
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 090
Membres
111 416
dernier inscrit
philipperoy83