Copier un texte multilignes avec mise en forme

6 réponses
Avatar
Apitos
Bonjour =C3=A0 tous,

Comment recopier, depuis Excel, un texte compos=C3=A9 de plusieurs lignes, =
dans Word tout en gardant/reproduisant la mise en forme

Merci d'avance.

Cette demande repose sur le code fourni dans ce lien :

https://groups.google.com/forum/#!starred/microsoft.public.fr.excel/61_RHUL=
L9Hc

Exemple :

http://www.cjoint.com/c/FIttPLY7Yji

6 réponses

Avatar
MichD
Bonjour,
Dans ton fichier Excel, tu dois ajouter la référence suivante dans la
fenêtre VBA / Outils / références : "Microsoft word xx"
Dans le code de ta macro, tu crées une instance de Word mais tu ne
rends pas cette instance visible...elle est cependant en mémoire vive.
Tu n'as qu'à ajouter une ligne de code pour voir le résultat de ta
macro.
'----------------------------------------------
Sub ExcelToWord()
' Code à titre d'exemple
Dim Plg As Word.Range
With Sheets(1)
Texte = .[A5] & .[B5] & vbCrLf & _
.[A6] & .[B6] & vbCrLf & _
.[A7] & [B7]
End With
'Création du fichier Word
Set wd = CreateObject("Word.Application")
wd.Visible = True ' <<<<========= Ligne ajoutée
'L'application Word visible ou non
Set Dc = wd.Documents.Add
Set Plg = Dc.Range
With Plg
'--- Texte multilignes
.Paragraphs.Add
.Collapse Direction:=wdCollapseEnd
.Text = Texte
.Font.Size = 12
.Font.Bold = True
.Paragraphs.Add
.ParagraphFormat.Alignment = wdAlignParagraphLeft
End With
End Sub
'----------------------------------------------
MichD
Avatar
MichD
MichD a exprimé avec précision :
Bonjour,
Dans ton fichier Excel, tu dois ajouter la référence suivante dans la fenêtre
VBA / Outils / références : "Microsoft word xx"
Dans le code de ta macro, tu crées une instance de Word mais tu ne rends pas
cette instance visible...elle est cependant en mémoire vive. Tu n'as qu'à
ajouter une ligne de code pour voir le résultat de ta macro.
'----------------------------------------------
Sub ExcelToWord()
' Code à titre d'exemple
Dim Plg As Word.Range
With Sheets(1)
Texte = .[A5] & .[B5] & vbCrLf & _
.[A6] & .[B6] & vbCrLf & _
.[A7] & [B7]
End With
'Création du fichier Word
Set wd = CreateObject("Word.Application")
wd.Visible = True ' <<<<========= Ligne ajoutée
'L'application Word visible ou non
Set Dc = wd.Documents.Add
Set Plg = Dc.Range
With Plg
'--- Texte multilignes
.Paragraphs.Add
.Collapse Direction:=wdCollapseEnd
.Text = Texte
.Font.Size = 12
.Font.Bold = True
.Paragraphs.Add
.ParagraphFormat.Alignment = wdAlignParagraphLeft
End With
End Sub
'----------------------------------------------
MichD

En passant, lorsque tu crées une instance d'une application comme Word,
ce n'est pas parce que tu ne l'as pas rendu visible qu'elle n'existe
pas. Regarde dans le gestionnaire de tâches, le nombre de fois
qu'apparaît l'exécutable WinWord dans la fenêtre. Ce décompte
représente le nombre de fois que tu as créer une instance de Word sans
la fermer.
MichD
Avatar
Apitos
Bonjour MichD, le forum,
Le problème est que le texte était copié en brut sans format age :
- Gras et souligné pour les mots en gauche (DT, DO, Mois) plus les deu x points devant.
- Les deux point ne sont pas alignés verticalement.
- Le mois en lettre n'est pas formaté en nom propre (Première let tre en majuscule)
Avatar
isabelle
bonjour,
Sub ExcelToWord2()
' référence à Microsoft word xx
Dim Plg As Word.Range
With Sheets(1)
Rng = .Range("A5:B7").Copy
End With
Set wd = CreateObject("Word.Application")
wd.Visible = True
Set Dc = wd.Documents.Add
Set Plg = Dc.Range
With Plg
.Paste
.Tables(1).ConvertToText Separator:=wdSeparateByTabs
End With
Application.CutCopyMode = False
End Sub
isabelle
Le 2016-09-21 à 15:25, Apitos a écrit :
Bonjour MichD, le forum,
Le problème est que le texte était copié en brut sans formatage :
- Gras et souligné pour les mots en gauche (DT, DO, Mois) plus les deux points devant.
- Les deux point ne sont pas alignés verticalement.
- Le mois en lettre n'est pas formaté en nom propre (Première lettre en majuscule)
Avatar
isabelle
tu pourrais aussi remplacer
.Tables(1).ConvertToText Separator:=wdSeparateByTabs
par
.Tables(1).ConvertToText Separator:=" "
isabelle
Le 2016-09-22 à 10:56, isabelle a écrit :
bonjour,
Sub ExcelToWord2()
' référence à Microsoft word xx
Dim Plg As Word.Range
With Sheets(1)
Rng = .Range("A5:B7").Copy
End With
Set wd = CreateObject("Word.Application")
wd.Visible = True
Set Dc = wd.Documents.Add
Set Plg = Dc.Range
With Plg
.Paste
.Tables(1).ConvertToText Separator:=wdSeparateByTabs
End With
Application.CutCopyMode = False
End Sub
isabelle
Le 2016-09-21 à 15:25, Apitos a écrit :
Bonjour MichD, le forum,
Le problème est que le texte était copié en brut sans formatage :
- Gras et souligné pour les mots en gauche (DT, DO, Mois) plus les deux points
devant.
- Les deux point ne sont pas alignés verticalement.
- Le mois en lettre n'est pas formaté en nom propre (Première lettre en
majuscule)
Avatar
isabelle
si tu veut garder l'objet tableau mais que les bordures de celui-ci ne soient
pas visible
modifie la section With Plg..................End With
par:
With Plg
.Paste
For Each aBorder In .Tables(1).Borders
aBorder.Visible = False
Next aBorder
End With
isabelle
Le 2016-09-22 à 12:27, isabelle a écrit :
tu pourrais aussi remplacer
.Tables(1).ConvertToText Separator:=wdSeparateByTabs
par
.Tables(1).ConvertToText Separator:=" "
isabelle