OVH Cloud OVH Cloud

Chaine de caractères avec italiques et droites

4 réponses
Avatar
philpell
Bonjour,
A partir d'un tableau contenant par exemple 3 colonnes contenant du
texte, j'aimerais cr=E9er dans une 4=E8me colonne une nouvelle cha=EEne
comportant les mots des 3 colonnes mais avec les deux premiers en
italiques et le dernier en lettre droites. Je n'y arrive pas par VBA,
alors que c'est possible si on le fait manuellement dans la cellule.
En effet la propri=E9t=E9 "italic" se rapporte =E0 l'objet range et non
pas =E0 la chaine de caract=E8res.
Est-ce qu quelqu'un a une solution =E0 ce probl=E8me ?
Merci

4 réponses

Avatar
AV
En supposant en A2:C10 ( à adapter) les 3 champs à concaténer en D2:D10

Sub zzz()
For i = 2 To 10
x1 = Cells(i, 1): x2 = Cells(i, 2): x3 = Cells(i, 3)
n1 = Len(x1): n2 = Len(x2): n3 = Len(x3)
With Cells(i, 4)
.Value = x1 & x2 & x3
.Characters(Start:=1, Length:=n1 + n2).Font.FontStyle = "Italique"
.Characters(Start:=n1 + n2 + 1, Length:=n1 + n2 + n3).Font.FontStyle =
"Normal"
End With
Next
End Sub

AV
Avatar
michdenis
Bonjour Phil,

Il y a aussi ceci : ;-)

'-------------------------------
Sub test()
Dim Rg As Range, R As Range, C As Range
Dim M As String, S As Range
With Worksheets("Feuil1")
Set Rg = .Range("A1:C" & .Range("A65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
For Each R In Rg.Rows
For Each C In R.Cells
M = M & C.Text
Next
Set S = Rg(R.Row, Rg.Columns.Count + 1)
S.Resize(Rg.Rows.Count).Font.Italic = False
Application.EnableEvents = False
With S
.Value = M
.Characters(1, Len(Rg(R.Row, 1) & Rg(R.Row, 2))).Font.Italic = True
End With
Application.EnableEvents = True
M = ""
Next
End Sub
'-------------------------------


Salutations!




a écrit dans le message de news:
Bonjour,
A partir d'un tableau contenant par exemple 3 colonnes contenant du
texte, j'aimerais créer dans une 4ème colonne une nouvelle chaîne
comportant les mots des 3 colonnes mais avec les deux premiers en
italiques et le dernier en lettre droites. Je n'y arrive pas par VBA,
alors que c'est possible si on le fait manuellement dans la cellule.
En effet la propriété "italic" se rapporte à l'objet range et non
pas à la chaine de caractères.
Est-ce qu quelqu'un a une solution à ce problème ?
Merci
Avatar
AV
Si je puis me permettre....
Le temps d'exécution de ta méthode est carrément rédhibitoire sur quelques
milliers de lignes....
;-)

AV
Avatar
michdenis
Bonjour AV,

| est carrément rédhibitoire

Tu n'y vas pas avec le dos de la cuillère ! ;-))
C'est vrai que le temps d'exécution est "légèrement" plus lent ;-)
bien que cet aspect ne faisait pas parti des préoccupations de
l'auteur .... mais tu avoueras que l'écriture d'une telle macro
est un "maudit" bon excercice quant à la manière de travailler
avec des variables objet ...!

Je suppose que si tu avais été obsédé par le temps d'exécution de ta macro,
tu aurais pris soin de déclarer tes variables, empêcher le rafraichissement
des cellules ....parce sur quelques dizaines de milliers de lignes, ce serait
un avantage très significatif ... ;-)

Tu imagines ce que cela pourrait donner avec la nouvelle version d'excel si
ce type de macro devait s'exécuter sur 500 000 lignes ;-))

Serait-ce une manière pour excel d'instaurer une pause-café à ses utilisateurs ?



Salutations!





"AV" a écrit dans le message de news: %
Si je puis me permettre....
Le temps d'exécution de ta méthode est carrément rédhibitoire sur quelques
milliers de lignes....
;-)

AV