Anthonymctm
XLDnaute Occasionnel
Bonjour à tous !
Dans le but de progresser sur ma macro d'export Excel sur Word, je cherche à avancer petit à petit.
Au stade où j'en suis j'arrive à exporter les bons éléments !
(Je créer d'abord des plages nommées selon la mise en page prévu sur excel, puis je copie-colle avec liaison ces plages nommées sur Word)
Voici le code actuel :
Je souhaiterais maintenant régler la largeur de mes exportations
Il faudrait que mes objets collés fasse la même largeur que la largeur de ma page Word. (Ca peut se faire en copiant "l'entre-marge" actuel ou en indiquant directement la largeur en valeur)
Je souhaite modifier la largeur parce que la largeur de ma source ne change pas, contrairement à sa longueur.
Donc en gardant les proportions et en adaptant la largeur, on tombe juste.
Avec l'enregistreur de macro Word j'obtiens des lignes intéressantes :
Mais qui évidemment ne fonctionne pas si je l'insère dans ma macro
Je précise que j'ai peu d'aptitude à la création de macro, j'arrive juste à modifier/adapter des bouts de code existants.
Dans le but de progresser sur ma macro d'export Excel sur Word, je cherche à avancer petit à petit.
Au stade où j'en suis j'arrive à exporter les bons éléments !
(Je créer d'abord des plages nommées selon la mise en page prévu sur excel, puis je copie-colle avec liaison ces plages nommées sur Word)
Voici le code actuel :
VB:
Function exist(feuille As String, nom As String) As Boolean
exist = False
On Error Resume Next
x = Sheets(feuille).Range(nom).Address
If Err.Number = 0 Then exist = True
On Error GoTo 0
End Function
Sub export_excel_to_word()
Dim obj As Object
Dim newObj As Object
Dim sh As Worksheet
Dim myFile
Set obj = CreateObject("Word.Application")
obj.Visible = True
Set newObj = obj.Documents.Add
' newObj.PageSetup.LeftMargin = CentimetersToPoints(1)
' newObj.PageSetup.RightMargin = CentimetersToPoints(1)
For n = 1 To 3
If exist("En_tête", "page_" & Format(n, "00")) Then
ThisWorkbook.Worksheets("En_tête").Range("page_" & Format(n, "00")).Copy
With obj.Selection
.PasteSpecial Link:=True, DataType:=wdPasteEnhancedMetafile, _
Placement:=wdInLine, DisplayAsIcon:=False
.TypeParagraph
.InsertBreak Type:=7
End With
'Selection.InlineShapes(1).LockAspectRatio = msoTrue
'Selection.InlineShapes(1).Width = 498.9
End If
Next
For n = 1 To 15
If exist("Descriptif", "page_" & Format(n, "00")) Then
ThisWorkbook.Worksheets("Descriptif").Range("page_" & Format(n, "00")).Copy
With obj.Selection
.PasteSpecial Link:=True, DataType:=wdPasteEnhancedMetafile, _
Placement:=wdInLine, DisplayAsIcon:=False
.TypeParagraph
.InsertBreak Type:=7
End With
End If
Next
For n = 1 To 5
If exist("Carac_tech", "page_" & Format(n, "00")) Then
ThisWorkbook.Worksheets("Carac_tech").Range("page_" & Format(n, "00")).Copy
With obj.Selection
.PasteSpecial Link:=True, DataType:=wdPasteEnhancedMetafile, _
Placement:=wdInLine, DisplayAsIcon:=False
.TypeParagraph
.InsertBreak Type:=7
End With
End If
Next
Application.CutCopyMode = False
myFile = Replace(ActiveWorkbook.Name, "xlsm", "docx") 'remplacer "docx" par l'extension qui convient, si nécessaire
newObj.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & myFile
MsgBox "Export vers Word terminé", vbInformation + vbOKOnly, "Export vers Word"
obj.Activate
Set obj = Nothing
Set newObj = Nothing
End Sub
Je souhaiterais maintenant régler la largeur de mes exportations
Il faudrait que mes objets collés fasse la même largeur que la largeur de ma page Word. (Ca peut se faire en copiant "l'entre-marge" actuel ou en indiquant directement la largeur en valeur)
Je souhaite modifier la largeur parce que la largeur de ma source ne change pas, contrairement à sa longueur.
Donc en gardant les proportions et en adaptant la largeur, on tombe juste.
Avec l'enregistreur de macro Word j'obtiens des lignes intéressantes :
Code:
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Width = 498.9
Mais qui évidemment ne fonctionne pas si je l'insère dans ma macro
Je précise que j'ai peu d'aptitude à la création de macro, j'arrive juste à modifier/adapter des bouts de code existants.