XL 2019 coloriser une partie du contenu de la cellule

  • Initiateur de la discussion Initiateur de la discussion pascal21
  • Date de début Date de début

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 !

pascal21

XLDnaute Barbatruc
0 produit périmé, 0 Péremption à moins de 30 jours, 0 péremption entre 30 et 60 jours et 0 stock mini atteint
Code:
=P2&" produit périmé, "&Q2&" Péremption à moins de 30 jours, "&R2&" péremption entre 30 et 60 jours"&" et "& I3 & " stock mini atteint"
bonjour à tous
j'ai une cellule avec cette formule qui reprends le contenu de 4 autres cellules comment faire pour que dans la phrase le contenu des cellules soit en rouge
pour que ça donne cela:
exemple:
0 produit périmé,1 péremption à moins de 30 jours, etc....
où les nombres 0 et 1 seraient
indiqués en rouge
merci de votre aide
un vba est toujours possible mais dans ce cas je ne sais pas comment indiquer le format des cellules visées
edit modifié
 
Dernière édition:
Bonjour @pascal21 🙂,

1) De quelle cellule est issu le "stock mini atteint" ?
2) Est-ce trop demandé que d'avoir un tout petit classeur avec deux ou trois exemples ? 😉

Souvent ce type de problème nécessite un peu de VBA et dans ce cas un classeur représentatif est indispensable pour ne pas travailler sur des hypothèses fausses et pouvoir faire des tests de la solution proposée avant de la publier !

edit : bonjour @job75 🙂
 
Dernière édition:
Re @pascal21 , et bonjour à tous les autres 😉.

Voici un code VBA qui devrait faire le coloriage souhaité.
Le code s'exécute automatiquement quand on change une des quatre valeurs.

Le code est dans le module lié à la feuille "Feuil1" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
' les libellés séparés par un crochet fermant "]"
' Attention ! Les libellés doivent être exactement tels qu'ils doivent apparaitre y compris
' les espaces au début et à la fin de chaque libellé (le cas échéant)
Const libelles = " produit périmé, ] péremption à moins de 30 jours, ] péremption entre 30 et 60 jours et ] stock mini atteint"

Dim x$, tVal, tLib, deb&, i&, n&
   If Intersect(Range("r2,s2,t2,k3"), Target) Is Nothing Then Exit Sub     'si aucun stock modifié on quitte la macro
   tLib = Split(libelles, "]")                        ' les libellés sont mis dans un array de base 0 (via un split)
   ReDim tVal(0 To UBound(tLib))                      ' les valeurs sont aussi mises dans un array tVal de base 0
   tVal(0) = [R2]: tVal(1) = [S2]                     ' on y met les valeurs
   tVal(2) = [T2]: tVal(3) = [K3]                     ' on y met les valeurs
   For i = 0 To 3: x = x & tVal(i) & tLib(i): Next    ' on construit le texte à afficher
   [A1] = x                                           ' on affiche le texte
   [A1].Font.ColorIndex = xlColorIndexAutomatic       ' on passe tout le texte en couleur automatique
   [A1].Font.Bold = False                             ' tout le texte n'est pas en gras
   For i = 0 To 3                                                 ' boucler sur les valeurs et les libellés
      n = InStr(1, x, tVal(i), vbTextCompare)                     ' chercher la position n de la valeur i
      With [A1].Characters(Start:=n, Length:=Len(tVal(i))).Font   ' avec le texte débutant à n de longueur celle de valeur i
         .Color = RGB(255, 0, 0)                                  ' on passe en rouge
         .Bold = True                                             ' on passe en gras
      End With
      ' on remplace la valeur et son libellé par des "_" -> pour être certain de trouver la prochaine valeur
      ' et pas une valeur précédente ou une valeur dans un libellé
      x = Replace(x, tVal(i), String(Len(tVal(i)), "_"), 1, 1, vbTextCompare)
      x = Replace(x, tLib(i), String(Len(tLib(i)), "_"))
   Next i
End Sub
 

Pièces jointes

Dernière édition:
Re,
je pensais que le code aurait été plus simple que ça
Excel n'a jamais été conçu comme un traitement de texte.
Les opérations sur le texte d'une cellule prennent beaucoup de temps machine.

Il faut aussi veiller à ne pas modifier le texte en propre de la cellule après le coloriage sinon la mise en forme est toute chamboulée.
Vous coloriez des parties de texte. Puis vous remplacez (via Excel ou VBA) un caractère (même par le même caractère ! ), et hop, la mise en forme du texte devient n'importe quoi.

Dans votre cas, il faut aussi veiller à ce qu'on colorie une valeur de stock et pas une précédente valeur ou une valeur dans un libellé.
Si un stock est égal à 3, comment fais-je pour savoir que si je trouve un "3" pour le colorier, c'est la valeur du stock (que cherche) et non pas le 3 du "30" d'un libellé ?

Tout cela fait un code un peu plus long que ce à quoi on pouvait s'attendre.
 
Dernière édition:
- 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

Retour