Concatener des cellules ayant des formats de style différent

Bonjour,

J'ai un souci pour concatener des cellules ayant des formats de style différents, tout en conservant le format d'origine.

Exemple:

A1 contient "Bonjour" écrit en gras et rouge

A2 contient " visiteur " écrit en noir

A3 contient " du jour" écrit en bleu.

Je voudrais

A4 = A1&A2&A3 = "Bonjour visiteur du jour", avec "Bonjour" écrit en gras/rouge, et "visiteur" écrit en noir, et "du jour" écrit en bleu .

Le contenu des cellules A1, A2, A3 étant variables, mais leur format constant. C'est à dire, la cellule A1 sera toujours en rouge/gras, et A3 toujours en bleu.

Merci par avance pour vos réponses !

Bonsoir,

Une concaténation en A4 des valeurs des cellules A1 à A3, met bout à bout les valeurs ! La couleur de police des cellules source ne fait pas partie de la valeur de la cellule ! C'est donc la couleur de police appliquée à A4 qui peut être différente, qui sera appliquée au résultat de la concaténation.

Pour avoir le résultat que tu semble souhaiter, ce ne peut être le résultat d'une formule ! Le texte final doit être inséré "en dur", puis repris pour mettre en forme différenciée des fragments de ce texte... Soit du code VBA pour réaliser l'opération...

Bonjour,

comme dit MFerrand, c'est texte en dur dans la cellule sinon pas de couleur possible :

Dim noEvents As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tmp, ch As String, i As Long, j As Long
    If noEvents Then Exit Sub
    If Not Intersect(Target, [A1:A3]) Is Nothing Then
        tmp = [A1:A3].Value
        For i = 1 To 3
            ch = ch & " " & tmp(i, 1)
        Next i
        noEvents = True
        [A4].Value = Mid(ch, 2)
        i = 1
        For j = 0 To 2
            With [A4].Characters(i, Len(tmp(j + 1, 1)) + 1).Font
                .Color = [A1].Offset(j).Font.Color
                .Bold = [A1].Offset(j).Font.Bold
                .Italic = [A1].Offset(j).Font.Italic
            End With
            i = i + Len(tmp(j + 1, 1)) + 1
        Next j
        noEvents = False
    End If
End Sub

Un changement dans A1:A3 est répercuté sur A4. Couleur, gras et italique sont récupérés.

eric

382classeur1.xlsm (18.03 Ko)

Salut Eric !

T'es en forme !!!

Hello MFerrand et Eeric,

Merci pour vos réponses.

J'ai récupéré la pièce jointe et fais des tests. C'est que je souhaite obtenir.

Je n'ai jamais eu l'occasion de développer du VBA. Va donc falloir que je m'y plonge pour comprendre le bout de code et l'intégrer dans mon document Excel.

Je pensais le trouver dans le définition des Macros, mais je dois être nul car je n'y ai rien trouvé.

Merci encore.


Hello,

J'ai refais un test. Mais en spécifiant A1 comme étant le résultat d'une formule. La mise à jour dans A4 ne se fait pas directe. Elle ne se fait que si je modifie le texte des cellules A2 ou A3.

C'est sûrement ce que vous vouliez dire tous les 2. Mais le contenu de l'une des 3 cellules dépendant de l'année cela va être compliqué

@+

T'as vu MFerrand, grillé au poteau

Tiens, tu sais peut-être : une astuce pour faire Join() sur tmp (ou réduire un tableau 2 dimensions en 1 mais sans boucle).

A1 comme étant le résultat d'une formule.

A1 dépend d'une autre cellule qui elle-même etc...

Il faut ajouter ces références (où il y a saisie modifiant A1) dans le test qui déclenche l'exécution de la macro.

Ex :

If Not Intersect(Target, union([C1:E1],[H1],[A2:A3]) Is Nothing Then

eric

Hello Eriiic,

Super ! Merci...

J'ai ajouté l'instruction union (j'ai ajouté une parenthèse fermante ")" que tu avais oubliée ) cela fonctionne !

Y a plus qu'à adapter le truc dans mon document Excel.

Merci encore !

oupsss

A travailller sans filet...

Rechercher des sujets similaires à "concatener ayant formats style different"