Mise en page/export Excel sur Word

Résolu
Bonjour à tous !

Alors je vais peut-être vous donner du fil a retorde mais je sens qu'il y a truc à creuser avec ce que je souhaite faire. o_O

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

J'ai vu comment faire une impression, assez brute des onglets qui m’intéressent.

Comme je voulais aussi avoir mes onglets sur PDF voire Word, j'ai regardé l'export avec liaison d'Excel sous Word.
Et à partir de là, il y a peut-être beaucoup plus efficace à faire, ça je ne sais pas :p

En tout cas 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.
Par la suite je peux modifier la source des liaison pour adapter le word avec un autre version du fichier Excel.

Le problème (on y vient) c'est que ce que j'ai à mettre sur mon word prend parfois plusieurs pages et parfois non. (ça varie en fonction des équipements sélectionnés/cachés)
Je vois que sur word, le lien se fait via une zone d'impression. Du coup je me dis qu'il faudrait que la zone d'impression fasse tout pile une page A4, ou fasse un maximum de 25 lignes par exemple)

En pièce jointe, mon fichier Excel simplifié et le fichier Word: https://www.cjoint.com/c/IGsoUhB3rSP

Comme faire varier cette zone d'impression pour que le résultat sur Word fasse la longueur d'une page puis qu'une autre soit créer (ou est vide par défaut) dès que la zone d'impression précédente devient trop longue ?

Merci à tous ! :)

6 réponses

  1. Peut être
    Repose ta question sur le forum dédié à Word, tu devrais quelqu'un pour t'aider
    1
    1. Contributeur
      Bonsoir.

      Si les ingénieurs et les informaticiens ont pris la peine de créer des logiciels distincts, c'est pour offrir à l'utilisateur des outils adaptés à un usage précis ; en l'occurrence :
      • Tableurs = Calculs, graphiques, opérations complexes, tris et filtres ...
      • Traitements de texte = Documents rédigés (lettres, rapports, fiches, mémoires, tableaux, formulaires) ...
      • Bases de données = Classements, listes, requêtes, rapports ...
      • Gestion d'image = Création/modification de dessins, peinture, croquis, plans 2D-3D
      • Traitement de photos = Retouches, transformations, recoloration, arrière-plans ... etc.

      - Si tu as de gros tableaux de calculs, il faut les diffuser sous forme de fichiers Excel, Numbers ou Calc.
      - Si tu as un rapport de stage à présenter, même s'il contient beaucoup d'illustrations, réalise-le avec Publisher, Word, Writer, PowerPoint ou Pages, mais pas avec Access, Paint ou Calc
      - Si tu as d'énormes photos de plusieurs Mo avec des millions de pixels, il faut les garder au format JPEG, PNG, BMP, TIFF ou même GIMP ... etc.

      Donc si tu as une feuille Excel de plus d'une page, n'essaie pas de l'insérer dans un fichier PowerPoint ou Word : le résultat sera forcément décevant !
      0
      1. Bonjour Raymond,

        Merci de me partager votre point de vue.

        Je me suis peut-être mal exprimée mais ce n'est pas des gros tableur que j'ai à transposer sur Excel, juste une présentation synthétique en A4.
        Après si Microsoft (et les autres développeurs de logiciel de traitement) s’embêtent à faire en sorte que leur application s'imbrique c'est pas pour rien je pense ^^

        D'ailleurs, en lisant d'autres post, j'ai l'impression que c'est faisable avec du VBA, mais je serai incapable de le faire :/

        En gros j'ai 3 onglets :

        - Le premier fait 1 à 2 pages
        - Le deuxième fait de 1 à 15 pages, facilement identifiable (l'utilisateur va faire en sorte que chaque page se termine au même endroit (par exemple chaque ligne 70 fait une nouvelle page : 70, 140, 210, etc)
        - Le troisième onglet comme le premier fait de une à deux pages

        Dans le Word, les onglets doivent être dans l'ordre.

        Ce serait top d'avoir la génération du fichier Word avec un macro, j'ai vu d'autres personnes y arriver avec moins de 10 lignes de code.

        Comme ça pas de changement de source à faire puisque j’obtiens un nouveau fichier Word à chaque fois. D’ailleurs le fichier Word aura le même nom que le fichier Excel.
        0
    2. Bonjour à vous deux

      Et si tu enregistres ton fichier Excel en PDF ?

      Cdlmnt
      Via
      0
      1. En effet ce serait possible, ça sort plutôt bien, mais j'ai quand même quelques inconvénients de tailles : par exemple si je veux rajouter un paragraphe simple, je dois fusionner les cellules → aller dans format de cellule → alignement → justifier .. C'est hyper chiant ^^ puis je peux pas rajouter de sommaire automatique
        Je peux pas rajouter ce que je veux aussi facilement que sur Word. Avec Word je vais pouvoir facilement gérer mes numéros de page, mes en-têtes, ajouter des sauts de page, rajouter des images, etc
        0
    3. Contributeur
      Dommage : Nous, on ne sait pas faire !
      Essaie sur un autre site ...
      0
      1. Quand je passe par l'enregistreur de macro sous Word et que je fais le coller en mode point j'obtiens ça

            Selection.PasteSpecial Link:=True, DataType:=wdPasteBitmap, Placement:= _
        wdInLine, DisplayAsIcon:=False


        Y a peut-être quelque chose à en tirer ? ^^
        0
        1. Petit mise à jour, après plusieurs recherches sur différents forum j'ai effectivement vu que c'était possible.

          Etape 1 : je génère des plages nommées de même dimension que mes saut de pages Excel

          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
          fin:
          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

          Etape 2 : Je copie chacune de ces plages et je les colle dans un Word généré pour l'occasion :
          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:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
          ' .PasteSpecial Link:=True, DataType:=wdPasteEnhancedMetafile, _
          ' Placement:=wdInLine, DisplayAsIcon:=False
          .TypeParagraph
          .InsertBreak Type:=7
          End With

          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,
          .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 'vous pouvez jouer sur les marges pour améliorer la lecture
          Set obj = Nothing
          Set newObj = Nothing

          End Sub


          Voilà :')

          Il me reste "plus qu'a" ajuster la dimension des objets collés
          0