IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA - Export Excel → Word


Sujet :

Macros et VBA Excel

  1. #21
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    1. Comment on fait un fichier Word modèle ?
      Un modèle Word est sauvé avec un suffixe contenant la lettre (T)emplate (xltx ou xltm) exactement comme les modèles Excel (xltx, xltm).
      Cependant, j'ai opté pour les sauver comme des fichiers classiques (bien plus simples à sauver dans un sous-répertoire de l'application et je les ouvre comme modèle.
    2. Comment on ajoute un signet et comment j'y fais référence dans ma boucle for ?
      Les signets on les crée manuellement (moi ou l'utilisateur) dans Word en leur donnant le même nom que la cellule ou la plage de cellules d'excel qui devra être copiée à la place du signet.
    3. Quand je fais le copier/coller manuel en image métafichier c'est bon sans le collage avec liaison mais c'est pas bon si j'ai le collage avec liaison
      J'utilise le MetaFichier (j'ai donné un exemple dans un des liens) mais je ne fais pas de liaison. Est-ce impératif ?
    4. (d'ailleur je vois que sans liaison il s'appelle Image (métafichier améliroé) alors qu'avec liaison il s'appelle Image (métafichier Windows)
      Effectivement mais la personne qui reçoit un document, qu'en général, je sauve sous format pdf, n'a pas besoin d'un tableau à retravailler et c'est le seul collage special qui m'a donné satisfaction pour conserver le format source.
      J'utilise Excel vers Word pour des contrats, offres, factures, etc. Le destinataire n'a évidemment pas le droit de le modifier d'où la raison pour laquelle je n'ai nullement besoin de liaison.


    [EDIT]
    As-tu essayé la méthode PasteExcelTable ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  2. #22
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Comment on ajoute un signet et comment j'y fais référence dans ma boucle for ?
    Les signets on les crée manuellement (moi ou l'utilisateur) dans Word en leur donnant le même nom que la cellule ou la plage de cellules d'excel qui devra être copiée à la place du signet.
    Mes plages nommées ont parfois le même nom, ce sera leur localisation dans différents onglets qui permettent de les distinguer.

    Et après, je ne vois toujours pas ce que je dois rajouter sur ma macro


    Quand je fais le copier/coller manuel en image métafichier c'est bon sans le collage avec liaison mais c'est pas bon si j'ai le collage avec liaison
    J'utilise le MetaFichier (j'ai donné un exemple dans un des liens) mais je ne fais pas de liaison. Est-ce impératif ?
    Oui plutôt, s'il ya des ajout sur le Word qui se font, et il y en aura à chaque fois, impossible de modifier les données d'Excel et que ce soit repris sur Word s'il n'y a pas de lien. A moins de régénérer un Word avec la macro mais on perd tout ce qui a déjà été fait.


    (d'ailleur je vois que sans liaison il s'appelle Image (métafichier améliroé) alors qu'avec liaison il s'appelle Image (métafichier Windows)
    Effectivement mais la personne qui reçoit un document, qu'en général, je sauve sous format pdf, n'a pas besoin d'un tableau à retravailler et c'est le seul collage special qui m'a donné satisfaction pour conserver le format source.
    J'utilise Excel vers Word pour des contrats, offres, factures, etc. Le destinataire n'a évidemment pas le droit de le modifier d'où la raison pour laquelle je n'ai nullement besoin de liaison.
    Oui la c'est pas pour la personne destinataire, c'est pour l'utilisateur que la liaison sera utile.

    L'idéale serait une liaison sans màj automatique, ça fait buguer / ramer mon fichier Excel.


    NB : J'ai vérifié 3 fois pour être sûr, quand je passe en liaison:False, la macro ne fonctionne plus, je me retrouve avec 3 fois le collage de la page_01 du premier onglet.

    Le collage manuel métafichier amélioré fonctionne bien, mais pas dans ma macro (et l'inconvénient de garder la liaison persiste du coup)

  3. #23
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    As-tu essayé la méthode PasteExcelTable ?
    Je viens d'essayer, mais non c'est pas bon du tout, après avoir regardé la syntaxe sur google, j'ai utilisé ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .PasteExcelTable _
     LinkedToExcel:=True, _
     WordFormatting:=False, _
     RTF:=True
    Mais ya aucune mise en forme qui va ^^'

  4. #24
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Bon, finalement je me suis résigné à réduire mes colonnes et ma police jusqu'à trouver les bons réglages.

    Maintenant, le copier/coller me met tout directement à la bonne taille !

    Sur mon fichier Word, j'aimerais rajouter le numéro de page en pied de page.

    J'ai essayé avec l'enregistreur de macro mais ça n'a pas fonctionné une fois sur mon Word.

    Quelqu’un voit comment faire ça ?

  5. #25
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sur mon fichier Word, j'aimerais rajouter le numéro de page en pied de page.
    J'ai essayé avec l'enregistreur de macro mais ça n'a pas fonctionné une fois sur mon Word.
    Qu'est-ce qui ne fonctionne pas ? Il serait important d'être plus précis
    • Tu reçois un message d'erreur et si oui lequel ?
    • La procédure n'effectue pas ce que tu attends ?



    Si tu pouvais publier le code que tu as essayé et qui pose problème cela permettrait de mieux t'aider
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #26
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Je ne rappelle plus quel code j'avais essayé de faire, alors je renouvelle l'expérience, mais ça m'a l'aire différent de la dernière fois

    La tu vois ce que me sort l'enregistreur de macro:

    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
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    '
        If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
            ActiveWindow.Panes(2).Close
        End If
        If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        Application.Templates( _
            "C:\Users\Mitch\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéro normal*3").Insert Where:=Selection.Range, _
            RichText:=True
        ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    End Sub
    J'ai essayé d'insérer ce bout de code vers la fin de ma macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        Application.Templates( _
            "C:\Users\Mitch\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéro normal*3").Insert Where:=Selection.Range, _
            RichText:=True
        ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    La macro totale donne :
    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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    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
    ' obj.Selection.ParagraphFormat.LeftIndent = (20)
          With obj.Selection
            .PageSetup.TopMargin = (50)
            .PageSetup.LeftMargin = (17.5)
            .PageSetup.RightMargin = (20)
            .PageSetup.BottomMargin = (20)
        End With
     
    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
            .InsertBreak Type:=6
            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:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
            .InsertBreak Type:=6
            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:=wdPasteBitmap, _
          Placement:=wdInLine, DisplayAsIcon:=False
            .InsertBreak Type:=6
            End With
        End If
    Next
     
          If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        Application.Templates( _
            "C:\Users\Mitch\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéro normal*3").Insert Where:=Selection.Range, _
            RichText:=True
        ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
     
     
       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
    Et à l'exécution, j'ai un message d'erreur "Propriété ou méthode non gérée par cet objet".
    Je commence à avoir l'habitude de ce message
    Je suppose que c'est un problème de déclaration ?

    En tout cas ça me surligne la première ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then

  7. #27
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    J'ai supprimé les conditions if, qui n'ont pas l'aire utiles pour ce que je souhaite faire

    J'ai modifié le activeWindow par obj.selection en me disant que c'est ce qui est utilisé dans ma macro pour coller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     obj.Selection.ActivePane.View.SeekView = wdSeekCurrentPageFooter
        Application.Templates( _
            "C:\Users\Mitch\AppData\Roaming\Microsoft\Document Building Blocks\1036\16\Built-In Building Blocks.dotx" _
            ).BuildingBlockEntries("Numéro normal*3").Insert Where:=Selection.Range, _
            RichText:=True
        obj.Selection.ActivePane.View.SeekView = wdSeekMainDocument
    Mais ça me met le même message en surlignant la première ligne

Discussions similaires

  1. [Toutes versions] export excel vers word erreur 6028
    Par galzinc dans le forum Excel
    Réponses: 2
    Dernier message: 14/08/2009, 12h58
  2. VBA Export Excel vers Access
    Par rabihm81 dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/05/2009, 13h54
  3. VBA - Export Excel vers PPT - pb de couleur
    Par Neodyme dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/09/2008, 10h43
  4. [VBA-Word] Exportation Excel vers Word
    Par le_sonic dans le forum VBA Word
    Réponses: 6
    Dernier message: 20/12/2006, 17h18
  5. [VBA-E] : Excel et word (Zone d'impression)
    Par Geoffray dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/06/2006, 12h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo