Modifier la couleur du texte avec une formule

Bonjour à tous,

Je travail sur la création de plannings automatisés.

Je remplis une base de données, les valeurs sont ensuite reportées dans un planning.

En simplifiant, la formule que j'utilise est =G2&E2&F2&H2

Je voudrais que la couleur de G2, E2 et F2 reste noir, en taille 11

Par contre, j'aimerais que H2 soit en rouge taille 9 (Dans la même cellule, évidemment)

Existe-t-il une solution du genre =G2&E2&F2&(H2\'color'=red;'Police'=9) ?

J'ai trouvé des débuts de solutions en passant par des macros, mais n'étant pas l'utilisateur final de l'outil et ne maitrisant pas assez le VBA, je n'ai pas approfondi car je ne souhaite pas passer par des macros.

Je joint une version très simplifiée du planning (par rapport à celui que j'ai créé) pour que vous puissiez mieux comprendre.

Merci d'avoir pris le temps de lire.

Bonsoir,

Si tu veux éviter VBA, il te faut sortir l'expression que tu veux mettre en rouge et taille 9 dans une autre cellule que tu formates en conséquence.

Et même avec VBA, tu peux mettre dans un format différent une partie de texte, comme tu peux le faire manuellement, mais pas une partie de texte renvoyé par une formule.

Je réfléchissais à une méthode susceptible d'intervenir sous forme de fonction (soit du VBA transparent en ce sens qu'on n'a pas l'impression de l'utiliser), mais qui en tout état de cause serait plus lourde que la solution que j'indique au début (car nécessitant un emplacement pour conserver la formule, un autre pour afficher le résultat "en dur", et un troisième pour la fonction intervenant...)

Cordialement

Ferrand

Bonsoir Ferrand,

Tout d'abord, merci pour ta réponse.

Ensuite désolé mais ta solution ne me convient pas du tout pour de nombreuses raisons.

Je t'en donne quelques unes

  • les codes couleurs que je désire utiliser dans ma version finale diffèrent suivant le commentaire (retard écrit en bleu, absent en rouge, malade en vert...)
  • j'ai 3 intervention le matin (idem aprem, soir et nuit) ce qui m'amène avec ta solution à 24 lignes pour une seule semaine. (Sans ces fichus commentaires, j'arrive à faire tenir les 3 interventions du matin dans la même cellule, du coup, tout tient sur 4 lignes)
  • les plannings sont imprimés et distribués aux clients/salariés et, afin de les faire tenir sur une feuille A4, (avec la solution des 24 lignes) je masque les lignes vides... Mais il faut penser à les démasquer lorsqu'elles contiennent une valeur. (Et comme les plannings sont souvent modifiés, il faut revérifier tous les plannings régulièrement...)

Bref, comme je le craignais, la seule solution pour mon cas, c'est de faire une macro avec, comme tu l'indique, 3 lignes par période. Mais comme 2 seront masquées, il n'en restera qu'une à ajuster en hauteur.

Encore merci d'avoir répondu, bonne soirée et à bientôt (novice en VBA, je risque de repasser par ici)

Sous réserve d'une réflexion lus approfondie (car je n'ai pas regardé tous les détails), il me semble que tu y gagneras à abandonner les formules. Tu peux faire faire les calculs par VBA qui a l'avantage alors de fournir un résultat en valeur et peut le mettre en forme à la suite de l'affectation.

Bon courage

Merci de l'info.

Je maîtrise mieux les formules que le VBA.

Dans un premier temps j'essaierai de faire le copier/coller les valeurs et mise en forme avec une macro, puis par la suite je verrai pour faire comme tu dis.

De toute façon, il n'y a pas d'urgence, pour le moment on se débrouille pour faire les plannings sans et on y arrive très bien (mais pas très rapidement)

Avec un peu de chance, une mise à jour Excel intégrera un jour la mise en forme d'une partie d'une formule...

Bref je m'écarte un peu du sujet, pour le moment sans solution apparemment.

Avec un peu de chance, une mise à jour Excel intégrera un jour la mise en forme d'une partie d'une formule...

Ah ! J'ai quelques doutes car ça se joue sur les formats de cellules. On dispose de divers formats numériques mais aucune diversité pour le texte.

Plus, on peut personnaliser les formats mais pas en inventer de nouveaux (ou en programmer par VBA, c'est à dire créer des symboles nouveaux de formats qui seraient pris en compte par Excel, comme pour les définitions d'arcs, latitudes, longitudes... pour lesquels aucun format spécifique n'est prévu, et on est contraint de détourner des formats existants).

Si j'ai un conseil, en abordant VBA ne fais pas l'erreur de vouloir l'utiliser comme tu utilises le tableur (et oublie l'enregistreur de macro qui justement ne fait que reproduire les manipulations effectuées sur le tableur). VBA fonctionne en dehors, mieux et plus vite. La démarche type est de prélever les données, les traiter hors tableur, restituer les résultats à la fin.

Si tu procèdes à l'opération à la main, en laissant de côté la formule : je prends telle donnée ici si elle répond à telle condition, je la pose là, je prends telle autre là-bas si condition..., je la concatène à la première, etc. A la fin tu auras le processus qu'il suffit de traduire en code en respectant une syntaxe, qu'il n'y aura plus, éventuellement, qu'à améliorer avec les outils dont VBA dispose (boucles, fonctions...).

Cordialement

Une illustration VBA, en procédure évènementielle déclenchée au changement de nom.

La macro ne suit pas vraiment mes conseils précédents car ton tableau est préparé pour utiliser une formule, et j'ai suivi le trajet de la formule. Mais cela démontre bien comment VBA fait le même calcul et affectant la valeur à la fin en tant que chaîne, peut simultanément la traiter (ayant prélevé le caractère de départ et la longueur du texte à modifier au passage).

Et une condition suppplémentaire peut permettre de varier la couleur du texte.

Cordialement

Ferrand

Waouh ! C'est génial !

J'avais essayé de faire avec le bouton "enregistrer une macro" pour voir comment s'écrivait le changement de couleur d'une partie du texte, mais ça ma donné :

With ActiveCell.Characters(Start:=10, Length:=5).Font
        .Name = "Calibri"
        .FontStyle = "Normal"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .Color = -16776961
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With

Donc pas adaptable à toutes les cellules... (à cause du (Start:=10, Length:=5).)

J'ai survolé la macro que tu as créée, je n'en comprend pas la moitié... Mais je vais faire des recherches.

Un Grand Merci à toi, ta Macro me fait une très bonne base pour travailler (mais pas aujourd'hui...)

L'enregistreur lorsque tu enregistres une modification minime va reprendre l'énumération de toutes les propriétés, y compris celles que tu n'as pas touché et qui sont à leur valeur par défaut. Tu peux ne garder que ce sur quoi tu es intervenu et éliminer le reste qui ne changera pas.

Ça fait partie des méfaits de l'enregistreur : tu te retrouves avec une masse de code inutile, et en débutant tu ne sais jamais très bien lequel est à garder.

Tu trouveras facilement à interpréter le code, il suit le trajet de la formule. La modification est définie par le dimensionnement de la partie à modifier : Characters(car. de départ dans la chaîne, nb car. à modifier) qui sont calculés en constituant la chaîne. Deux autres petits écarts : remplacement de tes espaces par des Chr(10) [=aller à la ligne] car dans quelques cas un caractère de la 2e ligne remontait sur la première ; et (ça c'est un petit piège) dans ta concaténation pour faire la recherche, la date se trouve convertie en nombre dans le tableur puisque c'est la valeur que retient Excel, mais VBA gère les 2 aspects parallèlement et il faut convertir pour passer de l'un à l'autre, d'où la conversion en entier long (CLng). Ça c'est un aspect sur lequel on peut buter un moment...

D'ailleurs facile de buter ! J'ai galéré un moment (j'avais que la moitié du tableau qui se servait) avant de voir que j'avais inversé lignes et colonnes à un endroit, et en corrigeant j'ai propagé l'inversion ailleurs... !

J'ai aussi nommé (Clé) la colonne A de ta plage de recherche. Si tu réutilises ce tableau, il sera utile de la nommer en champ dynamique pour ne plus avoir à modifier.

Cordialement

Rechercher des sujets similaires à "modifier couleur texte formule"