mise en forme conditionnelle d' un seul mot d'un texte .

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 !

dindin

XLDnaute Occasionnel
Bonjour le forum

j'ai dans la colonne B le mot "Machin" qui se répéte de temps en temps dans les cellule de cette colonne.
ce mot de 5 lettres est le 1 er mot d'un texte (chaque texte est dans une cellule à part environ 240 caractère).
Comment faire en VBA ou autre pour le mettre automatiquement en :
Police : Arial en gras
taille : 14
couleur police : rouge
il faut que le reste du texte ne change pas (arial /12/noir/non gras).
Ex: Machin hjgfvhgecjhaehjrcvae erhc g erhcjkerc jkrch&irhcjk&hrcj&erc jhirchjkaerhcjkrhc jrhcj&rhcjk&hrcjk&h"rfiù& .
Merci de votre aide
 
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Bonjour,

Ci-joint une version générale qui applique les modifs où que soit le mot dans la ligne.
Code:
Sub Test()
For Each X In Columns(2).SpecialCells(xlCellTypeConstants, 23)
    If X.Value Like "*Machin*" Then
        With X.Characters(Start:=InStr(1, X.Value, "Machin"), Length:=6).Font
            .Name = "Arial"
            .FontStyle = "Gras"
            .Size = 14
            .Color = -16776961
        End With
    End If
Next
End Sub
 
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Merci Gareth pour le code .
il fonctionne sauf qu'à chaque fois je quitte une cellule , il se bloque tout (car il vérifie à chaque fois toutes le cellule de la colonne ). comment faire pour qu'il ne vérifie que la cellule en cours pas toute les cellule .
merci
 
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Bonjour dindin, salut Gareth,

ce mot de 5 lettres est le 1er mot d'un texte.

Si c'est bien le 1er mot alors dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'il y a des titres en ligne 1
Dim r As Range, test As Boolean
Set r = Intersect(Target, Range("B2", [B65536].End(xlUp)))
If r Is Nothing Then Exit Sub
If r.Row = 1 Then Exit Sub 'si le tableau est vide
test = LCase(r) Like "machin*"
For Each r In r
  With r.Characters(1, IIf(test, 6, 9 ^ 9)).Font
    .Name = "Arial"
    .Bold = test
    .Size = IIf(test, 14, 12)
    .ColorIndex = IIf(test, 3, xlAutomatic)
  End With
Next
End Sub
J'ai supposé une ligne de titres.

Edit : la boucle est nécessaire en cas d'entrées multiples, par copier/coller par exemple.

A+
 
Dernière édition:
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Re,

Si maintenant Machin ou machin peut être n'importe où :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'il y a des titres en ligne 1
Dim r As Range, pos As Long
Set r = Intersect(Target, Range("B2", [B65536].End(xlUp)))
If r Is Nothing Then Exit Sub
If r.Row = 1 Then Exit Sub 'si le tableau est vide
pos = InStr(LCase(r), "machin")
For Each r In r
  With r.Characters(IIf(pos, pos, 1), IIf(pos, 6, 9 ^ 9)).Font
    .Name = "Arial"
    .Bold = pos
    .Size = IIf(pos, 14, 10)
    .ColorIndex = IIf(pos, 3, xlAutomatic)
  End With
Next
End Sub
A+
 
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Bonjour Job75
votre code fonctionne bien mais il empeche de mettre manuellement un autre mot en rouge gras taille 14.
un mot restera en noir meme aprés modification manuelle.
Pouvez vous l'adapter
Merci d'avancer.
 
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Bonjour dindin,

Alors utilisez ce code, mais il y aura un inconvénient :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'il y a des titres en ligne 1
Dim r As Range, pos As Long
Set r = Intersect(Target, Range("B2", [B65536].End(xlUp)))
If r Is Nothing Then Exit Sub
If r.Row = 1 Then Exit Sub 'si le tableau est vide
For Each r In r
  pos = InStr(LCase(r), "machin")
  If pos Then
    With r.Characters(pos, 6).Font
      .Name = "Arial"
      .Bold = True
      .Size = 14
      .ColorIndex = 3
    End With
  End If
Next
End Sub
Inconvénient => tapez "machin", validez, puis remplacez le "ch" par "t", validez => le mot reste en rouge.

Nota : dans mon post précédent j'avais mal placé pos = InStr(LCase(r), "machin")

A+
 
Dernière édition:
Re : mise en forme conditionnelle d' un seul mot d'un texte .

Re,

L'inconvénient de la solution précédente me gêne 🙂

Alors voici une solution, un peu compliquée, qui l'évite :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'il y a des titres en ligne 1
If Target.Column <> 2 Or Target.Row = 1 _
  Or Target.Count > 1 Then Exit Sub
Dim cel As Range, pos As Long, L As Long
Application.EnableEvents = False
Set cel = ActiveCell
Application.Undo
pos = InStr(LCase(Target.Text), "machin")
L = Len(Target.Text)
Application.Undo
cel.Select
Application.EnableEvents = True
If pos Then
  With IIf(L = 6, Target, Target.Characters(pos, 6)).Font
    .Name = "Arial"
    .Bold = False
    .Size = 12
    .ColorIndex = xlAutomatic
  End With
End If
pos = InStr(LCase(Target.Text), "machin")
If pos Then
  With Target.Characters(pos, 6).Font
    .Name = "Arial"
    .Bold = True
    .Size = 14
    .ColorIndex = 3
  End With
End If
End Sub
Par contre les entrées multiples ne sont plus traitées...

A+
 
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

Réponses
6
Affichages
158
Réponses
25
Affichages
604
Retour