XL 2010 Mise en forme de quelques caractères sur formule

max.lander

XLDnaute Occasionnel
Bonjour à tous,


Je souhaite appliquer une mise en forme sur les derniers caractères d'une cellule.
Cela peut paraître simple mais le hic c'est que la cellule contient une formule.


Je pense que l'exemple en PJ parle de lui même.


Si vous avez des idées je suis preneur.

Merci,
 

Pièces jointes

  • MFC - POLICE - XDL.xlsm
    59.2 KB · Affichages: 48

Chris401

XLDnaute Accro
Bonjour

Un essai avec ce code à placer dans la feuille OP
Au changement de la valeur de la cellule A11, la formule est mise en place en B11:H11
Elle est ensuite copiée en valeur ce qui permet de mettre les caractères entre parenthèses en couleur
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$11" Then
For Each c In Range("B11:H11")
        c.Font.ColorIndex = 1
        c.FormulaArray = _
         "=IFERROR(INDEX(Type,MATCH(1,(Ref=RC1)*(Montage=R10C),0)),"""")"
        c.Value = c.Value
        x = InStr(c, "(")
        y = InStr(c, ")")
            c.Characters(x, y).Font.ColorIndex = 3
    Next c
    End If
End Sub
 

Chris401

XLDnaute Accro
Re

Essaye :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$11" Then
For Each c In Range("B11:H11")
On Error Resume Next
        c.Font.ColorIndex = 1
        c.FormulaArray = _
         "=IFERROR(INDEX(Type,MATCH(1,(Ref=RC1)*(Montage=R10C),0)),"""")"
        c.Value = c.Value
        x = InStr(c, "(")
        y = InStr(c, ")")
        c.Value = Left(c, x - 2) & Chr(10) & Right(c, Len(c) - x + 1) 
        c.Characters(x, y).Font.ColorIndex = 3
    Next c
    End If
End Sub
 

max.lander

XLDnaute Occasionnel
Chris401 merci infiniment ça marche du tonnerre !

Si ce n'est pas trop abusé, il est possible d'adapter le même code pour 10 lignes ?



Sinon j'essayerai de bidouiller pour arriver au résultat

PS: j'ai essayé avec une boucle sans succès :(
 

Pièces jointes

  • MFC - POLICE - XDL.xlsm
    59.1 KB · Affichages: 40
Dernière édition:

max.lander

XLDnaute Occasionnel
Ma boucle ci-dessous mais c'est pas très propre !





VB:
Private Sub Worksheet_Change(ByVal Target As Range)

For i = 11 To 21


If Target.Address = "$A$" & i Then
For Each c In Range("B" & i & ":" & "H" & i)
On Error Resume Next
        c.Font.ColorIndex = 1
        c.FormulaArray = _
         "=IFERROR(INDEX(Type,MATCH(1,(Ref=RC1)*(Montage=R10C),0)),"""")"
        c.Value = c.Value
        x = InStr(c, "(")
        y = InStr(c, ")")
        c.Value = Left(c, x - 2) & Chr(10) & Right(c, Len(c) - x + 1)
        c.Characters(x, y).Font.ColorIndex = 3
    Next c
    End If
   
   
    Next i

Si il y a mieux je prends !
 

Chris401

XLDnaute Accro
Bonjour

Si tes Ref en colonne A sont déjà en place, il vaudrait mieux peut-être que la macro se déclenche au changement de date en B10
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$10" Then
For Each c In Range("B11:H20")
On Error Resume Next
        c.Font.ColorIndex = 1
        c.FormulaArray = _
         "=IFERROR(INDEX(Type,MATCH(1,(Ref=RC1)*(Montage=R10C),0)),"""")"
        c.Value = c.Value
        x = InStr(c, "(")
        y = InStr(c, ")")
        c.Value = Left(c, x - 2) & Chr(10) & Right(c, Len(c) - x + 1)
        c.Characters(x, y).Font.ColorIndex = 3
    Next c
    End If
End Sub
Autrement, en restant sur la modification de la Ref
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A11:A20")) Is Nothing And Target.Count = 1 Then
lg = Target.Row
For Each c In Range("B" & lg & ":H" & lg)
On Error Resume Next
        c.Font.ColorIndex = 1
        c.FormulaArray = _
         "=IFERROR(INDEX(Type,MATCH(1,(Ref=RC1)*(Montage=R10C),0)),"""")"
        c.Value = c.Value
        x = InStr(c, "(")
        y = InStr(c, ")")
        c.Value = Left(c, x - 2) & Chr(10) & Right(c, Len(c) - x + 1)
        c.Characters(x, y).Font.ColorIndex = 3
    Next c
    End If
End Sub
 

max.lander

XLDnaute Occasionnel
Bonjour,

Je me permets de revenir pour encore un petit d'aide, car je rencontre un petit bug :
Je me rends compte que j'ai des ratés.


En effet 1 fois sur 5, la ligne
VB:
 c.Value = c.Value
capture un zéro au lieu du bon résultat...
Pourtant le formule retourne le bon résultat (quand cette ligne est désactivée)


Vous avez une idée ?
 
Dernière édition:

Chris401

XLDnaute Accro
Bonjour

Désolé pour le temps de réponse, je n'ai pas pu me connecter avant.
L'idéal serait de récupérer les heures en même temps que les noms dans ton code Load_Opérateurs
mais je ne sais pas le faire

Peux-tu essayer ce fichier ? Je le teste en avant et en arrière et cela semble "tenir"
 

Pièces jointes

  • Copie de MF OP XLD .xlsm
    57.7 KB · Affichages: 51

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 191
Membres
103 152
dernier inscrit
Karibu