Changer la couleur d'une cellule si le texte contient

Bonjour à tous et toutes,

Je me permets de venir vous embêter car malgré la lecture de plusieurs sujets je n'arrive pas à trouver la solution à mon malheur.

Je vous expose le problème:

En colonne I et J de mon fichier j'ai besoin de "chercher" si le texte contient "*ROU*" et si tel est le cas de colorer la case en rouge, idem avec "BL" et colorer en bleu etc etc mais sans passer par les conditions.

Dans mes deux colonnes les textes ne contiennent pas seulement ROU ou BL mais sont souvent précédés d'informations variables

XXX ROU et d'informations également après soit XXX ROU XXX.

J'espère avoir été clair n'hésitez pas si cela n'est pas le cas à me le dire pour que je vous apporte des précisions

Merci en tous cas pour votre aide.

Bonjour et bienvenue,

Pour faciliter les réponses, il est bon de mettre soit un fichier exemple soit le fichier original anonymé.

Est-ce que tu souhaites une réponse en passant avec du VBA ou avec des MFC ?

Cordialement

Re,

Je t'ai fait un exemple VBA à adapter à ton problème.

Il faut écrire les mots dans la colonne K et mettre une couleur dans la colonne d'à côté.

Consulte ce lien pour le choix des couleurs

https://www.excel-pratique.com/fr/vba/couleurs

Bonne suite

Cordialement

Si le mot clé n'est pas dans la colonne tu vas avoir un message d'erreur.

Nouvelle version:

cordialement

Bonjour,

et merci pour la réponse désolé en effet j'aurais du vous mettre un exemple.

Je vais tester d'adapter votre fichier a ma situation merci encore

rebonjour,

Bon en fait même avec votre exemple j'arrive pas à adapter à ma situation.

Voici un fichier "exemple" en pièce jointe, dans l'idéal je voudrais mettre un bouton associé à une macro pour "vérifier" les lignes de la colonne I et de la colonne J jusqu'a la première ligne vide et dès qu'il trouve la valeur *RED* par exemple il colorie le fond en rouge idem avec BL pour bleu...

J'espère être suffisament clair.

Merci encore et bonne journée

32essai.xlsm (9.06 Ko)

Une question!

Est-ce que l'écriture sera toujours sous la même forme 2 caractères suivis de RED ou BL?

J'attends ta réponse avant d'y regarder.

Oui 4 caractères variables en comptant un espace devant et derrière 7 caractères variables également en comptant aussi un espace.

Merci encore

Ok!

Je fais comme tout à l'heure j'ai créais une légende où tu attribueras les couleurs?

A tester!

J'ai commenté la procédure pour te guider.

Bonne soirée

37couleurcadi49.xlsm (21.36 Ko)

Merci beaucoup c'est exactement cela.

Seul problème qui est entièrement lié à ma personne je me suis trompé en fait le format dans la colonne I ne contient pas d'espace on a plutôt 01:BLU test.

J'ai essayé d'adapter le code en cherchant les : mais je coince :/

Désolé pour la perte de temps et merci encore.

Cordialement

Nouvelle procédure. Tu remplaces l'ancienne par celle-ci:

Il suffisait en fait de faire la recherche sur ":" au lieu de " " (l'espace). Il n'y a qu'une ligne qui change.

Option Explicit
Sub Couleurs()
'Déclaration des variables
Dim c As Variant, Coul As Variant, Espace As Byte, Tiret As Byte, Fond As Byte
Dim Couleur As String

On Error GoTo ErreurCouleur '.................................................Déclaration en cas d'erreur
With ActiveSheet ' ...........................................................avec la feuille active
   For Each c In .Range("I2:J" & .Range("I" & Rows.Count).End(xlUp).Row) '....Parcours les cellule I2:J jusqu'à la dernière ligne
      Espace = InStr(c, ":") + 1 '............................................recherche la position du 1er espace
      Tiret = InStr(c, "-") - 1 '---------------------------------------------recherche la position du tiret
      Couleur = Mid(c, Espace, Tiret - Espace) '..............................attribut lemot clé "couleur"
      With Sheets("BaseCouleurs") ' ..........................................avec la feuille Basecouleur
         For Each Coul In .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row) '...parcours les cellules de A2 jusqu'à la drnière ligne de la colonne A
            If Coul = Couleur Then '..................................................teste s'il y a égalité
               c.Interior.ColorIndex = .Range("B" & Coul.Row).Interior.ColorIndex '...attribut la couleur de la légende à la cellule étudiée
            End If ' .................................................................fin de test
         Next '.......................................................................Fin de boucle
      End With ' .....................................................................fin de avec
   Next '.............................................................................Fin de boucle
End With '........................................................................... fin de avec
Exit Sub

'Gestion des erreurs
ErreurCouleur:
MsgBox "L'écriture des couleurs n'est pas respectée. Revoir la cellule " & c.Address
ActiveSheet.Range(c.Address).Select

End Sub

Cordialement

Merci pour la réponse,

j'ai en effet essayé de modifier la valeur par : mais j'obtiens systématiquement le message d'erreur "L'ecriture... Revoir la cellule".

En me relisant je pense que cela est lié au fait que dans la colonne I certaines cellules disposent de 2 :.

Exemple:

XX: RED VVVV:YY

Avez-vous une idée?

Merci encore

Si les cellules ne correspondent pas au format, tu as ce message.

Si la cellule correspond, elle est traité.

Il faut deux caractères suivis de deux points soit xx:RED

Est-ce que j'ai mal compris la problématique ?

Cordialement

J'ai mis les cellules au bon format.

18couleurcadi49.xlsm (21.80 Ko)

Non non vous n'avez pas mal compri seulement moi qui me suit trompé dans le format initial.

Comme expliqué plus haut le format est plus:

XX:RED VV

il ne s'agissait pas d'un espace avant et après mais de : avant et un espace après

J'ai voulu modifier le code en remplaçant " " par ":" et "-" par " " mais malgré cela j'ai toujours la fenetre m'indiquant un problème de forme.

Par ailleurs j'ai voulu modifier le range pour se focaliser essentiellement sur la colonne I la J étant en fait inutile.

Merci encore

A force de modif j'ai réussi à obtenir le résultat souhaité, merci encore.

Dernière question, je n'ai aplliqué la formule qu'a ma colonne I la colonne J étant différente dans la forme "XX:RED"

Comment faire pour réaliser la même opération sur celle-ci ?

Merci encore

Re,

Ben tu vois, tu t'y mets. C'est bien, félicitations!

img1

Dans la procédure, tu as deux boucles for each

L'une avec c comme variable et une avec coul comme autre variable.

Celle en vert (c) englobe celle qui est en rouge. Ce qui veut dire que la première boucle for each c ....passe en revue les cellules de la colonne I et J. Elle prend la première cellule I2 et elle extrait le mot clé, le mémorise dans la variable couleur. Le mot clé contenu dans la variable couleur est comparé dans la deuxième boucle encadrée en rouge avec la variable coul.

S'il y a égalité, c (de la première boucle ) prend la valeur de la couleur située en colonne B de la feuille BaseCouleur.

et on boucle jusqu'à ce que toutes les cellules comprises entre I2 et J23 soient comparées.

Voilà ce que fait la macro.

Donc pour répondre à ta question (tu as peut être déjà deviné la réponse) si le format n'est pas différent, la macro fonctionne pour la colonne J également.

En revanche,si le format est différent, il faut adapter le code.

Si tu as besoin d'aide, il faut mettre en ligne ton fichier original après l'avoir anonymé.

Bonjour,

merci encore pour ce retour, j'ai en effet trouvé la réponse à force de chercher (je confirme ca rentre petit à petit).

Dernère petite question cependant, si plusieurs cellules sont vides ( ca arrive parfois) dans ce cas j'obtiens le message d'erreur sur la vérification de la cellule cependant est-il possible de mettre avant une condition et dire si la cellule est vide alors ...

J'ai tenté de mettre un "On error resume next" pour passer outre mais le fait d'avoir des cellules vides entraine une suppression des colonnes.

Merci d'avance

Ca se passe dans la gestion de l'erreur

Ajoute cette ligne dans la gestion de l'erreur.

If c = "" Then Resume Next
'Gestion des erreurs
ErreurCouleur:
If c = "" Then Resume Next
MsgBox "L'écriture des couleurs n'est pas respectée. Revoir la cellule " & c.Address
ActiveSheet.Range(c.Address).Select
Rechercher des sujets similaires à "changer couleur texte contient"