Bonjour à tous,

Pour plus de lisibilité, je créé ce topic avec les mises à jour qui s'imposent.

J'ai un fichier excel, d'une dizaine d'onglets, qui me sort au final 3 onglets utiles, synthétiques, mis en forme et qu'il faut que j'exporte sur Word.

J'ai regardé l'export avec liaison d'Excel sous Word et j'ai trouvé deux modes de collages plutôt pratiques : Avec liaison - Feuille de calcul Excel ou Avec liaison - Image en mode point.

En tout cas si j'utilise un des deux, que je réduis par les coins le tout pour que ça rentre en largeur ma feuille A4, ça donne quelque chose de plutôt correct et qui se modifie selon ce que je tape sur Excel.

j'ai trouvé sur le net comment faire pour générer les plages nommées comme mes sauts de page (ce qui me permet d'avoir une plage nommé par page Word):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Sub test()
    suppNomsPage "En_tête"
    nommerPages "En_tête"
     suppNomsPage "Descriptif"
    nommerPages "Descriptif"
     suppNomsPage "Carac_tech"
    nommerPages "Carac_tech"
End Sub
 
Sub nommerPages(nomF As String)
    Dim HPB As HPageBreak, numP As Long, nom As String
    Dim pl As Range, lig As Long, col1 As Long, nbCol As Long, derlig As Long
    ActiveWindow.View = xlPageBreakPreview
    With Sheets(nomF)
        On Error GoTo fin
        Set pl = Range(.PageSetup.PrintArea)
        On Error GoTo 0
        col1 = pl.Column: nbCol = pl.Columns.Count: derlig = pl.Row + pl.Rows.Count - 1
        lig = pl.Row
        For Each HPB In .HPageBreaks
            numP = numP + 1
            Set pl = .Cells(lig, col1).Resize(HPB.Location.Row - lig, nbCol)
            nom = nomF & "!page_" & Format(numP, "00")
            pl.Name = nom
            lig = HPB.Location.Row
        Next HPB
        If lig < derlig Then
            numP = numP + 1
            Set pl = .Cells(lig, col1).Resize(derlig - lig + 1, nbCol)
            nom = nomF & "!page_" & Format(numP, "00")
            pl.Name = nom
        End If
    End With
End Sub
 
Sub suppNomsPage(nomF As String)
    Dim nom As Name
    For Each nom In ActiveWorkbook.Names
        If Left(nom.Name, Len(nomF) + 6) = nomF & "!page_" Then nom.Delete
    Next nom
End Sub
Donc maintenant il ne manque plus qu'à faire une extraction de ces plages nommées sur Word.

Pour ça je verrais bien un code du style
Ouvrir Word,
copier page 1 de la feuille En_tête,
coller sur Word en tant qu'image mode point, (largeur collage = large page Word, serait la cerise sur le gâteau )
si page_02 de en_tête existe, alors copier/coller image mode point à la page 2 du word
puis checker si page_03 existe etc,

sinon passer à l'onglet suivant,
copier page_01 de l'onglet Descriptif, puis coller sur Word à la page suivante
checker si page_02 de descriptif existe, etc

puis passer au dernier onglet Carac_tech
Et idem page_01 copier/coller sur word à la page suivant etc.

Sinon on peut aussi copier/coller sur word puis insérer un saut de page sur word, comme ça on est à la suivante

Si ça peut aider, le collage se fait comme ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
.PasteSpecial Link:=True, DataType:=wdPasteBitmap, Placement:= _
        wdInLine, DisplayAsIcon:=False
Mais c'est tout ce que je sais

Voilà, merci à tous, hésitez pas si je peux éclaircir quelques points