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.
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 :
<CONTROL> Permet de basculer entre souris & clavier
Dans le mode clavier :
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.
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
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 !
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 :
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 :
Comment éviter l'erreur "Nombre de formats de cellule différents trop élevé"
Bonjour, Une connaissance sur les limitations d'affichage Excel sur les cellules pourrait vous évitez le déclenchement de cette erreur même si le plafond de verre est très élevé depuis la sortie d'Excel 2007 : > Cette erreur se déclenche lorsque vous avez utilisé trop de format différent ou...
excel-downloads.com
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.