4 votes

Texte en gras dans une formule de concaténation

J'aimerais pouvoir mettre en gras un ou deux mots spécifiques dans ma phrase lors de l'utilisation d'une formule de concaténation. Voici un exemple.

enter image description here

La première phrase utilise la formule de concaténation. La deuxième phrase est tapée et formatée manuellement. Existe-t-il un moyen d'avoir ce formatage dans la formule de concaténation sans avoir à le faire manuellement à chaque fois ?

Veuillez noter qu'il ne s'agit que d'un exemple et qu'il se peut que je doive l'utiliser pour mettre en gras une chaîne de trois mots consécutifs dans une autre phrase. Si une règle générale était fournie avec laquelle je pourrais travailler à l'avenir, ce serait formidable !

Je maîtrise assez bien les formules, mais je n'ai jamais utilisé VBA. Cependant, je soupçonne que la solution à ce problème ne peut être trouvée qu'en utilisant VBA. Soyez indulgent si une solution VBA est requise, car il me faudra du temps et des efforts pour la mettre en place et la comprendre.

Merci pour votre temps et votre aide.

Editer :

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String, str4 As String, str5 As String, str6 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"
    str4 = "Fourth string "
    str5 = "Fifth string "
    str6 = "Sixth string"

    Range("A1").Value = str1 & str2 & str3 & str4 & str5 & str6 'concatenate strings

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

Comment pourrais-je étendre la partie finale pour rendre les quatrième et sixième cordes plus grasses ?

9voto

Pᴇʜ Points 16920

Vous ne pouvez pas mettre en forme des caractères individuels dans le texte d'une cellule si cette cellule contient une formule.
Excel ne le permet pas.


Solution de contournement

La seule solution consiste à écrire le texte de la cellule sous forme de texte constant (avec VBA) au lieu d'une formule (si cela répond à votre besoin).

Vous pouvez ensuite formater des caractères individuels avec :

Range("A1").Characters(Start:=1, Length:=10).Font.Bold = True

Ainsi, pour formater partiellement une chaîne de caractères, vous pouvez adapter l'exemple suivant

Public Sub ExampleConcatenate()
    Dim str1 As String, str2 As String, str3 As String
    str1 = "First string "
    str2 = "Second string "
    str3 = "Third string"

    Range("A1").Value = str1 & str2 & str3 'concatenate strings

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(str1) + 1, Length:=Len(str2)).Font.Bold = True
End Sub

Pour un plus grand nombre de sous-chaînes, il serait plus facile d'utiliser un tableau.

Public Sub ExampleConcatenate()

    Dim SubStrings As Variant
    SubStrings = Array("First string ", _
                       "Second string ", _
                       "Third string ", _
                       "Fourth string ", _
                       "Fifth string ", _
                       "Sixth string")

    Range("A1").Value = Join(SubStrings, "")

    'Note array counting starts with 0 not 1 so "First string" is SubStrings(0)

    'format bold starts 1 character after str1 and is as long as str2
    Range("A1").Characters(Start:=Len(SubStrings(0)) + 1, Length:=Len(SubStrings(1))).Font.Bold = True
    'format sub string 4
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + 1, Length:=Len(SubStrings(3))).Font.Bold = True
    'format sub string 6
    Range("A1").Characters(Start:=Len(SubStrings(0)) + Len(SubStrings(1)) + Len(SubStrings(2)) + Len(SubStrings(3)) + Len(SubStrings(4)) + 1, Length:=Len(SubStrings(5))).Font.Bold = True

End Sub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X