VBA : Couleur de police et lisibilité

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Une demande sotte, peut-être, et (ou) sans solution... mais non vitale :rolleyes: !

Pour une bonne lisibilité, serait-il possible de modifier la couleur de police en fonction de la couleur de fond ?

Exemples :
- police de couleur blanche si couleur de fond obscure ;
- police de couleur noire si couleur de fond claire.

Je vous remercie pour l'aide que vous pourrez m'apporter.

A bientôt :)
 

Pièces jointes

  • 00 - Couleurs de police et de fond.xls
    19 KB · Affichages: 79
  • 00 - Couleurs de police et de fond.xls
    19 KB · Affichages: 83
  • 00 - Couleurs de police et de fond.xls
    19 KB · Affichages: 86
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Bonjour, le Fil, bonjour, Magic_Doctor, Victor21, Dranreb, le Forum,

@ Magic_Doctor :

J'ai "redécouvert" cette discussion vers laquelle job75 m'a orientée… Merci, également, pour le fichier joint.

@ Victor21 :

2 x 2 ?

Parfois je trouve 4, parfois je pense 7 :p

J'avoue ne pas toujours trouver la solution d'une simple opération :confused:… et ne parviendrai jamais, par conséquent, à exploiter la solution proposée dans le lien fourni :( !

@ Dranreb :

Je ne peux utiliser le fichier zippé :( et j'obtiens ce message :

attachment.php


Quant au premier fichier joint (.xls), c’est, là, une pure merveille : un énorme MERCI :D.

Je vous remercie tous, chaleureusement, pour vos interventions respectives.

A bientôt :):)
 

Pièces jointes

  • Pas de couleur - Copie.JPG
    Pas de couleur - Copie.JPG
    19.2 KB · Affichages: 237

Dranreb

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Bonjour.
Ce message ne peut apparaître que lorsque vous tentez de l'exécuter, ce qui m'indique que vous pouvez l'extraire du zip.
J'ai revérifié par acquis de conscience, j'ai joint la VB6FR.DLL à l'intention de ceux qui ne l'auraient pas dans leur C:\WINDOWS\system32
Pour autant que je sache, il suffit de l'y ajouter et je ne crois pas qu'elle nécessite un enregistrement en base de registre. Mais bien sûr je n'ai jamais été confronté au problème…
 

DoubleZero

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Re-bonjour,

...Ce message ne peut apparaître que lorsque vous tentez de l'exécuter, ce qui m'indique que vous pouvez l'extraire du zip...

Oui, Dranreb, je peux l'extraire du zip :).

...J'ai revérifié par acquis de conscience, j'ai joint la VB6FR.DLL à l'intention de ceux qui ne l'auraient pas dans leur C:\WINDOWS\system32
Pour autant que je sache, il suffit de l'y ajouter et je ne crois pas qu'elle nécessite un enregistrement en base de registre...

J'ai placé la "VB6FR.DLL" dans C:\WINDOWS\system32 mais le message d'erreur continue d'apparaître :confused: !

Le résultat est certainement le fruit de mon ignorance...

Peu importe : vous m'avez offert un superbe cadeau avec le fichier .xls joint en #14 et je vous en remercie encore :D.

A bientôt :)
 

DoubleZero

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Re-bonjour, re-bonjour, Staple1600 :D,

...Quelle est ta version de Windows?...

A présent, j'ai W 8 :mad::mad::mad::mad:, Système d’exploitation 64 bits.

...Et si essaies Couleurs.exe avec la dll dans le dossier où tu as extrait le zip, que se passe-t-il?

J'obtiens le message mentionné en#16 :(.

Ce n'est pas grave ! Merci beaucoup à toi itou :)

A bientôt :):)
 

Victor21

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Bonsoir à tous;)

Pour faire suite à cette discussion, et en particulier au msg de Magic_Doctor concernant le calcul de HSL (Teinte, Saturation, Luminosité), je joins un fichier incomplet - pas sû traduire en VBA le calcul de la teinte :
=SIERREUR(MAX(SI(Feuil1!$J2=Feuil1!$F2;MOD((Feuil1 !$G2-Feuil1!$H2)/Feuil1!$L2;6)*60;0);SI(Feuil1!$J2=Feuil1!$G2;(((Fe uil1!$H2-Feuil1!$F2)/Feuil1!$L2)+2)*60;0);SI(Feuil1!$J2=Feuil1!$H2;((Fe uil1!$F2-Feuil1!$G2)/Feuil1!$L2+4)*60;0));0)

ni celui de la saturation:
=SI(Feuil1!$L2=0;0;Feuil1!$L2/(1-ABS(2*Feuil1!$O2-1)))
Oui, je sais, je suis une bille en VBA, mais j'essaie de me soigner :)

Je me suis d'autre part aperçu en tatonnant que si l'addition :
est inférieur à 510, il vaut mieux mettre une police blanche, et si elle est supérieure à 459, la police noire est plus lisible.
(00, si ça peut t'être utile... :))

Je livre donc mes élucubrations à vos critiques, et toute idée d'amélioration sera, bien évidemment, la bienvenue.​
 

Pièces jointes

  • CouleursPB.xlsm
    52.6 KB · Affichages: 79

Dranreb

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Bonsoir.
C'est plutôt si 0.3 * EnrgG(R) + 0.59 * EnrgG(V) + 0.11 * EnrgG(B) < 300 …si on ne veut pas de tout le module de calcul de couleurs.
Avec:
VB:
Function EnrgG(ByVal Gris As Double) As Double
Const ExGamma = 222841 / 96323, GLimite = 1307 / 151
Const kEG1 = 1000 ^ (1 / ExGamma) / (GLimite * (ExGamma - 1) + 255), kEG2 = 1000 ^ (1 / ExGamma) - 255 * kEG1
Const ELimite = (GLimite * kEG1 + kEG2) ^ ExGamma, FLinéaire = ELimite / GLimite
If Gris > GLimite Then EnrgG = (Gris * kEG1 + kEG2) ^ ExGamma Else EnrgG = Gris * FLinéaire
End Function
 

Dranreb

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Avec le module cette fois, si la taille de la police est telle que la lisibilité est garantie pour moins de contraste, il peut être intéressant de préserver plutôt un contraste homogène justement. Le calcul peut être celui ci :
VB:
Rem. Calcul couleur police
Enrg = 2000 / (1000 / (Enrg + 1000) - (3 * Enrg > 1000) + 0.25) - 1000: Forc = 1: CalcÉngEAF
SaturationÉng = F0à1xyInt(Min(IIf(P3 = P3Forc, SvF / 1000, Satu), 1), 1 / 3, 0.5): CalcRVBÉng: ForeColor = Couleur
Extrait du code de Couleurs.exe, le Forecolor étant ensuite affecté à tous les contrôles. Angl et Enrg doivent être définis, donc faire au préalable :
Couleur = Cel.Interior.Color: CalcÉngRVB: CalcEAFÉng
Avec :
VB:
Function F0à1xyInt(ByVal X As Double, ByVal XInt As Double, ByVal YInt As Double) As Double
Dim Dét As Double, A As Double, B As Double
If Abs(XInt - YInt) > 2.3283064365387E-10 Then
   Dét = (XInt - YInt)
   A = XInt * (YInt - 1) / Dét
   B = YInt * (XInt - 1) / Dét
   F0à1xyInt = B - (A * B) / (X + A)
Else
   F0à1xyInt = X: End If
End Function
Une fonction dont je me sert très souvent pour toutes sortes de cas de croissances non linéaires.
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Bonsour®
Une demande sotte, peut-être, et (ou) sans solution... mais non vitale :rolleyes: !

Pour une bonne lisibilité, serait-il possible de modifier la couleur de police en fonction de la couleur de fond ?

Exemples :
- police de couleur blanche si couleur de fond obscure ;
- police de couleur noire si couleur de fond claire.

:rolleyes:
si l'on s'en tient à deux couleurs de police (Noire ou blanche)
un examen des recommandations W3C au niveau des Web Safe colors
permet de solutionner (Sauf anomalie de vision : Deutéranopie) simplement ceci à partir du niveau de vert :

VB:
Sub contraste_text()
Dim cellule As Range
For Each cellule In Selection
    cellule.Font.Color = IIf(Int(cellule.Interior.Color / 256) Mod 256 > 128, vbBlack, vbWhite)
Next
End Sub
 

Pièces jointes

  • websafecolors.xlsm
    34.9 KB · Affichages: 57
  • Capture2.JPG
    Capture2.JPG
    27.7 KB · Affichages: 166
  • Capture1.JPG
    Capture1.JPG
    23 KB · Affichages: 204
  • Capture2.JPG
    Capture2.JPG
    27.7 KB · Affichages: 154
  • Capture1.JPG
    Capture1.JPG
    23 KB · Affichages: 184
  • Capture2.JPG
    Capture2.JPG
    27.7 KB · Affichages: 139
  • Capture1.JPG
    Capture1.JPG
    23 KB · Affichages: 134
  • Capture.jpg
    Capture.jpg
    95.7 KB · Affichages: 306
  • Capture.jpg
    Capture.jpg
    95.7 KB · Affichages: 532
  • Capture.jpg
    Capture.jpg
    95.7 KB · Affichages: 560
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA : Couleur de police et lisibilité

Étonné que cela ait une incidence sur les daltoniens car je pensais qu'en dehors de la teinte proprement dite, la somme des luminosité des composantes était plutôt captée (avec réponses différentes aux différentes fréquences) par les bâtonnets de la rétine et non les cônes sensibles à la couleur.
 

Discussions similaires

Réponses
17
Affichages
779

Membres actuellement en ligne

Statistiques des forums

Discussions
312 611
Messages
2 090 226
Membres
104 452
dernier inscrit
hamzamounir