Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XLS : Sélecteur de Couleur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 :
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

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 !
 
Bonsoir ou Bonjour suivant l'heure,

Une bidouille personnelle qui m'aide bien

Une fois en mémoire, on peut coller le code dans les propriétés BackColor ou ForeColor du Projet

Si cela peut servir à qq
 

Pièces jointes

Dernière édition:
Bonsoir AR MOR,
Bonsoir ou Bonjour suivant l'heure,

Une bidouille personnelle qui m'aide bien

Une fois en mémoire, on peur coller le code dans les propriétés BackColor ou ForeColor du Projet

Si cela peut servir à qq
Merci pour ce partage de code mais je ne comprend pas le besoin d'utiliser la méthode Copy dans ton code :
VB:
With USF_COULEURS.TextBox1 ' On met en mémoire le code de la couleur
    .SelStart = 0: .SelLength = Len(USF_COULEURS.TextBox1): .Copy
    Debug.Print .Value 'Ajout de code
End With
On peut stocker la valeur .Value dans une variable ...
 
Mon CouleurCls.xlsm a aussi des copies du code couleur hexadécimal dans le presse papier pour pouvoir le coller ensuite soit dans du code soit dans la fenêtre de propriétés pour une propriété couleur d'un contrôle.
 
Un peu mieux:

Merci d'avoir regardé! 🙂

Voici une variante un peu plus expéditive avec "MouseMove"

A noter que si le Label1 clignote un peu,
vous pouvez mettre le DrowBuffer de l'usf à 1 000 000 au lieu de 32000 ou 64000.
 

Pièces jointes

Mon CouleurCls.xlsm a aussi des copies du code couleur hexadécimal dans le presse papier pour pouvoir le coller ensuite soit dans du code soit dans la fenêtre de propriétés pour une propriété couleur d'un contrôle.
Je comprends mieux du coup, le but étant de récupérer la couleur choisie pour la coller dans son projet.
 
Bonjour.
J'ai du nouveau concernant des sélecteurs de couleurs.
Bonjour Dranreb,
En testant votre appli, j'ai vu qu'il manquait PtrSafe pour la déclaration dans le module UfmMsg :
VB:
Private Declare PtrSafe Function MessageBeep Lib "user32.dll" (ByVal wType As Long) As Long
Bonne nuit !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…