1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| Option Explicit
'--- demande référence Microsoft Word xx.x Object Library
Dim appWord As New Word.Application
Dim docWord As New Word.Document
Sub Passage_Excel_Word()
'--- crée un nouveau document Word dans l'application Word
With appWord
.Visible = True
Set docWord = .Documents.Add
.Activate
End With
Range("B:B,C:C").EntireColumn.Hidden = True '-- masque les colonnes B et C
ExportBloc "Projets en montage", "1-Montage"
ExportBloc "Permis déposés", "2-PCD"
ExportBloc "Permis obtenus", "3-PCO"
ExportBloc "Chantiers démarrés", "4-chantier"
'--- enregistre le document Word
With docWord
.SaveAs ThisWorkbook.Path & "\Test.doc", Allowsubstitutions:=True '--- à adapter
'.PrintPreview '--- aperçu avant impression
End With
'--- réinitialise
Set docWord = Nothing
Set appWord = Nothing
ActiveSheet.UsedRange.AutoFilter '--- supprime le filtrage
Range("B:B", "C:C").EntireColumn.Hidden = False '-- affiche les colonnes masquées
End Sub
Private Sub ExportBloc(sTitre As String, sPhase As String)
'--- dans Word on ajoute une ligne de titre avec une mise en forme
With appWord.Selection
.TypeText Text:=sTitre
.HomeKey Unit:=wdLine
.EndKey Unit:=wdLine, Extend:=wdExtend
.ParagraphFormat.Alignment = wdAlignParagraphLeft '--- ou wdAlignParagraphCenter
With .Font
.Name = "Arial"
.Size = 16
.Bold = True
End With
'--- filtre et copie le tableau Excel dans le presse papier
With ActiveSheet.UsedRange
.AutoFilter Field:=4, Criteria1:=sPhase '--- filtre sur 4e champ du tableau
.SpecialCells(xlCellTypeVisible).Copy '--- copie les lignes visibles (filtrées)
End With
'--- colle le tableau dans Word sans liaison
.EndKey Unit:=wdLine
.PasteSpecial Link:=False, DataType:=wdPasteRTF, Placement:=wdInLine, DisplayAsIcon:=False
'--- ajuste la taille des colonnes
Dim w()
Dim col
Dim i As Integer
i = 0
'tableau des largeurs de colonnes de sortie
w() = Array(175, 55, 30, 45, 45, 45, 45, 48)
With docWord.Tables(docWord.Tables.Count)
For Each col In .Columns
col.SetWidth ColumnWidth:=w(i), RulerStyle:=wdAdjustNone
i = i + 1
Next
End With
.TypeParagraph
.TypeParagraph
End With
End Sub |
Partager