mettre un mot ou une série de mots en couleur automatiquement dans un cellule Excel

obelix77

XLDnaute Junior
Bonjour,

Tout est dans le titre.

J’ai besoin que des mots ou des séries de mots spécifiques se mettent en couleur dans une cellule ou une plage de cellules.
Il faut que les seuls mots ou séries de mots voulus soient en couleur; pas toute la cellule; ça, je sais le faire

Dans l'idéal, je souhaiterais mettre en place une macro qui travaillerait sur la cellule ou la plage de cellules sélectionnées.

La macro doit ouvrir une fenêtre à cases multiples :
1 case contenant « texte voulu 1 » suivi d’une case contenant le « code couleur » souhaité
1 case contenant « texte voulu 2 » suivi d’une case contenant le « code couleur » souhaité
1 case contenant « texte voulu 3 » suivi d’une case contenant le « code couleur » souhaité

Les textes doivent pouvoirs commencer et/ou terminer par "*".

Pas de respect de la « CASSE » sur les textes.

Petit problème : je ne maîtrise pas du tout le VBA ... Donc si une âme charitable peut m'aider, ce serait le top.

Ci-joint un fichier dans lequel j’ai simulé le résultat attendu.

Merci et bon week-end
 

obelix77

XLDnaute Junior
Re : mettre un mot ou une série de mots en couleur automatiquement dans un cellule Ex

Tu as parfaitement raison.
Ci-joint un fichier identique à ce que je récupère (pour traduction)
Les nombres de lignes et de colonnes peuvent varier.
Les mots ou série de mots à coloriser aussi peuvent varier.
D’où l'idée d'un formulaire qui se lance et où ce qu'il faut coloriser avec la bonne couleur peut être renseigner.
Un formulaire avec plusieurs choix (4 par exemple), c'est le top.
C'est assez clair maintenant?
Merci
 

Pièces jointes

  • mots_couleur_automatique_cellule_Excel v2.xlsx
    10.4 KB · Affichages: 27

david84

XLDnaute Barbatruc
Re : mettre un mot ou une série de mots en couleur automatiquement dans un cellule Ex

Je ne vois pas l'intérêt d'un formulaire : je ne vois pas ce que cela apporte. De plus tu dis ne pas maîtriser le VBA donc autant aller au plus simple : la liste des phrases à traiter et la liste des mots à colorer.
Ci-joint un premier fichier pour voir : à toi de tester.
A+

Edit : je vois que tu as posté ta demande sur d'autres forums. L'usage veut que tu le précises d'entrée et que tu places un lien vers les autres discussions pour que chacun puisse suivre et ne pas perdre son temps à te fournir une proposition alors qu'elle a déjà été fournie par ailleurs ou que la question est réglée.
 

Pièces jointes

  • mots_couleur_automatique_cellule_Excel v2 (1).xlsm
    21 KB · Affichages: 34
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : mettre un mot ou une série de mots en couleur automatiquement dans un cellule Ex

Bonsoir obelix77,

[...] Serait il possible de déclencher la macro par une commande plutôt que par un double clic? Et qu'elle fonctionne aussi sur une plage de cellule. J'ai l'impression qu'elle ne fonctionne que sur une seule cellule. [...]

Une version v2 qui agit sur une sélection de cellules.

Pour l'inclure dans un fichier:
  • copier le code de module1 du fichier v2 dans un module de votre fichier cible
  • copier la table TableTexteCouleur de ce fichier v2 vers votre fichier cible
  • insérer une forme dans votre fichier cible et lui affecter la macro ColorierTexte() (cliquer-droit sur la forme, menu 'Affecter une macro')
 

Pièces jointes

  • obelix77-mots_couleur-v2.xlsm
    25.7 KB · Affichages: 48
Dernière édition:

david84

XLDnaute Barbatruc
Re : mettre un mot ou une série de mots en couleur automatiquement dans un cellule Ex

Ne pas oublier le traitement des éventuels métacaractères utilisés en expression rationnelle car certains comme le point ou le point d'interrogation servent également de ponctuation :
Code:
Sub CoulCaractere()
Dim oRegExp As Object, oMatches As Object, oMatch As Object
Dim i As Long, Tmot(), Tcoul()
Dim Motif As String, Chaine As String, temp
Dim Data As Range, Liste As Range, C As Range

Set Data = Worksheets("Data").[A1].CurrentRegion
Set Liste = Range("Liste")

Data.Font.ColorIndex = xlAutomatic
ReDim Tmot(1 To Liste.Rows.Count): ReDim Tcoul(1 To Liste.Rows.Count)

Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
  .Global = True: .ignorecase = False: .Pattern = "[\(\)\[\]\.\?\{\}\*\|\\\+\$\^]" 'traitement des métacaractères

  For Each C In Liste
    i = i + 1: temp = C.Text
    If .test(temp) Then
      Set oMatches = .Execute(temp)
      For Each oMatch In oMatches: temp = Replace(temp, oMatch, "\" & oMatch, 1, 1): Next oMatch
    End If
    Tmot(i) = C.Text: Tcoul(i) = C.Font.Color: Motif = Motif & temp & "|"
  Next C
    
  Motif = "(" & Left(Motif, Len(Motif) - 1) & ")"
    
  .Pattern = Motif
    
  For Each C In Data
    Chaine = C.Text
    If .test(Chaine) Then
      Set oMatches = .Execute(Chaine)
      For Each oMatch In oMatches
        C.Characters(Start:=oMatch.firstindex + 1, _
        Length:=oMatch.Length).Font.Color = Application.Index(Tcoul, Application.Match(oMatch.Value, Tmot, 0))
      Next oMatch
    End If
  Next C
  
End With
End Sub
A+
 

Pièces jointes

  • mots_en_couleur.xlsm
    23.1 KB · Affichages: 18
Dernière édition:

obelix77

XLDnaute Junior
Re : mettre un mot ou une série de mots en couleur automatiquement dans un cellule Ex

merci à vous 2, mapomme et david84.

david84, juste une petite question : je n'arrive pas à déterminer où je peux mettre le texte. J'ai constaté que, si je mets du texte n'importe ou dans l'onglet, ça ne marche pas forcement; mais je n'arrive pas à en tirer des conclusions quant aux limites?

Vos solutions sont toutes les 2 au top. Je vais les tester dans tous les sens cette semaine. 1000 mercis

Je fais comment pour clôturer le sujet?

Bonne journée,
 

david84

XLDnaute Barbatruc
Re : mettre un mot ou une série de mots en couleur automatiquement dans un cellule Ex

Bonjour,

je me suis calé par rapport à l'exemple que tu as fourni.
La première cellule traitée par la procédure est donc la cellule A1 de la feuille Data et le reste des données doivent être placées dans les cellules adjacentes de cette feuille :
Code:
Set Data = Worksheets("Data").[A1].CurrentRegion

N'oublie pas dans les autres forums où tu as ouvert cette discussion de placer un lien vers cette discussion.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 214
Membres
103 158
dernier inscrit
laufin