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 :

Code VBA - export synthèse excel sous format word [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Par défaut Code VBA - export synthèse excel sous format word
    Bonjour tout le monde,

    Je bloque depuis un moment sur un problème et je n'arrive pas à trouver de solution. Je fais donc appel à vos lumières.

    J'ai compilé un code qui me permet en fonction du nombre de feuille sur un fichier Excel de copier sur un Word des tableaux de feuilles nommées de 1 à beaucoup. Ce sont ces tableaux qui m'intéressent avec un saut de page entre chaque tableau copié. Cela me permet de faire une synthèse rapide sur Word et l'intégrer dans un rapport.

    Pour le moment j'ai réussi à me débrouiller tant bien que mal. Mais je bloque sur deux problèmes :

    - le premier : c'est que je n'arrive pas à faire des sauts de pages "classiques". J'ai réussi à faire des sauts de sections mais le code pour le saut de page ne fonctionne pas je ne sais pas pourquoi.
    .InsertBreak Type:=wdPageBreak ne fonctionne pas alors que .InsertBreak Type:=wdSectionBreakNextPage fonctionne.


    - Le deuxième et la je n'ai pas d'idée c'est de réussir à exporter le graphique de synthèse sous le format image dans le tableau exporté sous word.

    J'ai du mal à expliquer mes besoins donc je vous transmets mes fichiers tests.

    Je vous mets en copie le fichier excel avec ce que j'ai pu mettre en place pour le moment "exemple fichier".
    Le rapport que j'arrive à exporter pour le moment avec mon code actuel "export rapport actuel".
    Ce que j'aimerai obtenir comme rapport final "rapport final".
    Mon code d'export se trouve dans le module 4.

    Je sais qu'il serait possible de faire un copié collé de l'image mais je ne préfèrerai pas car le rapport word doit pouvoir être modifié par l'usager.

    J'espère être clair dans ma demande et je vous remercie pour le temps que vous voulez bien y passer et vos futures réponses.

    Bien cordialement,
    Rofou13.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rofou13 Voir le message
    Bonjour,

    • En phase de développement, vous devriez coder en référençant Microsoft Word, et travailler avec des variables object en late binding une fois que votre code est au point. Nb : En late binding, il vous faut utiliser les valeurs numériques des paramètres et pas les wd...
    • Pour le saut de page, il faut d'abord aller en fin de document avec un EndKey.
    • Si vos tableaux sont toujours identiques, c'est la cellule 43 qui doit récupérer le graphique.



    A tester :
    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
     
     
    Sub Export_word_Modifie()
     
    Dim WordApp As Word.Application, WordDoc As Word.Document ' Cocher la référence Microsoft Word
    'Dim WordApp As Object, WordDoc As Object  ' A utiliser une fois votre document mis au point
    Dim nbf As Long
    Dim I As Integer, NbTab As Integer
     
        nbf = ActiveWorkbook.Sheets.Count
        I = 0
     
        On Error Resume Next
     
        Set WordApp = CreateObject("Word.Application")
        With WordApp
            .Visible = True
            Set WordDoc = .Documents.Add
        End With
     
        With WordDoc
            With .Styles("Normal").ParagraphFormat
                .SpaceBefore = 0
                .SpaceBeforeAuto = False
                .SpaceAfter = 0
                .SpaceAfterAuto = False
                .LineUnitBefore = 0
                .LineUnitAfter = 0
            End With
            .Styles("Normal").NoSpaceBetweenParagraphsOfSameStyle = False
            With .Styles("Normal")
                .AutomaticallyUpdate = False
                .BaseStyle = ""
                .NextParagraphStyle = "Normal"
            End With
        End With
     
        For I = 1 To nbf
            If Sheets(I).Range("A1").Value = "à exporter" Then
               With WordApp.Selection
     
                    Sheets(I).Range("R23:U58").Copy
                    .Paste
                    .EndKey unit:=6
                    .InsertBreak Type:=7
               End With
            End If
        Next
     
        NbTab = 1
        For I = 1 To nbf
            If Sheets(I).Range("A1").Value = "à exporter" Then
               Sheets(I).Shapes("Groupe 01").Copy
               WordDoc.Tables(NbTab).Range.Cells(43).Range.Paste
               NbTab = NbTab + 1
            End If
        Next
     
     
        Sheets("Typologie").Select
     
        Application.CutCopyMode = False
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
     
        MsgBox "Export Word Ok", , "Succès"
     
    End Sub
    Voilà ce que vous devriez obtenir :
    Pièce jointe 596389
    Dernière modification par Invité ; 23/04/2021 à 06h14.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Par défaut
    Bonjour Eric,

    Merci pour ta réponse

    Effectivement le code pour le saut de page fonctionne.


    Par contre je ne suis pas du tout familier avec la notion de late blinding :/

    Pouvez vous me guider sur la référence microsoft word à cocher ? ou peut être me transmettre le fichier avec le bon référencement ?
    Je n'ai pas vu de code dans le fichier word que vous avez transmis mais je regarde surement au mauvais endroit.

    La finalité me convient parfaitement sinon.

    Merci d'avance pour votre aide.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rofou13 Voir le message
    Je n'ai pas vu de code dans le fichier word que vous avez transmis mais je regarde surement au mauvais endroit.
    C'est normal, c'était juste pour montrer le résultat obtenu.

    Pour la référence à cocher, la version 16 n'est pas forcément la vôtre.

    Si votre outil doit être utilisé sur des postes qui n'ont pas la même version que la vôtre, alors une fois votre code au point, vous transformez vos variables Word en variables Object et vous décochez la référence Word. De cette manière, vous n'aurez pas d'incompatibilité de version, au moins avec ce code.

    Pièce jointe 596399

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Par défaut
    Merci pour toutes vos réponses !!!

    Pierre, je n'ai pas bien saisi les subtilités des différents modes de binding cependant la solution d'Eric fonctionne sur plusieurs ordis.

    Je pense que nous avons tous la même base de données et que cela fonctionne sur l'ensemble des ordinateurs formatés par la société.

    Merci encore une fois pour la solution apportée.

    Je vous souhaite une bonne journée.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Late Binding veut dire que l'on ne référence pas la bibliothèque que l'on manipule et donc que l'on travaille avec des objets non typés.

    Pour moi, cela n'a d'intérêt que si d'autres personnes que toi doivent travailler avec ton "application" car tu n'es pas certain qu'ils ont la même bibliothèque que celle que tu utilises. Si le code VBA n'est exécuté que sur ton poste, que tu sois en phase de développement ou de production, je te conseille de cocher la bibliothèque Microsoft Word (outils/Références) et de travailler en Early Binding. Ca n'a alors pas de sens de basculer en Late Binding par la suite. Selon la taille de ton projet, c'est chronophage, accidentogène et ça rend la maintenance plus ardue. Il ne faut pas perdre que lorsque l'on bascule de Early binding en Late Binding, on doit passer en revue tout son code à la recherche des constantes que l'on doit modifier en valeurs, puis TOUT retester Yerk yerk... Avec une bonne architecture de code, on peut y arriver "sans trop de soucis"... Avec ce que je vois habituellement comme "solutions" sur le forum, ça risque d'être assez rock 'n roll.

    Late Binding: Dim App As Object... Set Doc = CreateObject("Word.Application")

    Early Binding: Dim App as Word.Application


    Avec le Early Binding, tu disposes de l'aide à la saisie, tu peux utiliser les constantes wd, etc...

    Si tu dois convertir ton code en Late Binding, je te conseille de garder une version Early Binding pour la maintenance (en fonction, bien entendu, de la taille de ton projet)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide Code VBA export Data Excel vers Powerpoint
    Par bus_analyst dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/03/2017, 15h47
  2. [XL-2010] Exportation des données sous format excel
    Par mariem deve dans le forum Excel
    Réponses: 2
    Dernier message: 08/05/2013, 12h35
  3. Réponses: 2
    Dernier message: 16/04/2012, 16h15
  4. exporter des données sous format excel en php
    Par legide dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2009, 09h12
  5. Exporter ma datagrid sous format EXCEL
    Par zaineb.z dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/06/2008, 16h35

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