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 :

Insérer un Tableau excel dans Word via VBA depuis Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut Insérer un Tableau excel dans Word via VBA depuis Excel
    Bonjour,

    je cherche désepérément comment insérer une plage de cellules excels dans un document word.

    L'important est de conserver le format des cellules dans le document word.

    En attachement un exemple créé manuellement par insertion de l'image du tableau.

    Merci pour votre aide.

    Godz.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  2. #2
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Voici un exemple qui colle une plage avec liaison au point d'insertion du document actif de Word. (Il faut au préable que Word soit ouvert et que, dans le projet VBA d'excel, la référence à la librairie de Word soit cochée).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("a1:c5").Copy
        Word.Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine
    L'enregsitreur de macros sous Word permet de visualiser facilement le code à générer dans Excel...

    Ok?
    "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...
    ---------------

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Pierre, (on est presque voisins, je suis à Baelen)

    merci pour ta réponse mais je calle encore un peu.

    Je ne sais pas comment déterminer/établir le point d'insertion dans Word.

    Voici mon code actuel :
    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
     
       Windows("2008 1Q Bonuszahlung.xls").Activate
        Sheets("A").Select
        'Fields(1) : premier champ du document Word
        'Insertion du contenu de la cellule A1 dans le champ.
        WordDoc.Fields(1).Result.Text = Range("D2")
        WordDoc.Fields(2).Result.Text = Range("E2")
        WordDoc.Fields(4).Result.Text = " "
        Windows("bonusziel übersicht 2008.xls").Activate
        Sheets("Adm fin eink").Select
        Range("A2:G27").Select
        Selection.Copy
        Word.Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine
     
        Windows("2008 1Q Bonuszahlung.xls").Activate
        Sheets("A").Select
     
        WordDoc.Fields(5).Result.Text = Range("H2")
        WordDoc.Fields(6).Result.Text = Range("J2")
    Quand j'essaie ce code, le range excel est bien intégré mais au début du document.

    J'ai enregistré une macro dans Word pour me positionner sur un signet à l'endroit voulu, mais je ne sais pas comment exécuter cette macro via excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Goto_Target()
    '
    ' Goto_Target Macro
    '
        Selection.GoTo What:=wdGoToBookmark, Name:="Target"
        With ActiveDocument.Bookmarks
            .DefaultSorting = wdSortByName
            .ShowHidden = False
        End With
    End Sub
    Comment dois-je faire pour me positionner à cet endroit dans mon document word ?
    Et ensuite, comment puis-je mettre à jour (ou delete) ce paste-special avec les données du record excel suivant sans devoir rouvrir le fichier word de base ? (je fais du mail merge).

    Merci beaucoup pour ton aide.

    Godzestla.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Salut voisin...

    Le plus simple est d'utiliser un objet Document issu de la librairie Word.

    Les objets Bookmarks disposent de la propriété Range (à ne pas confondre avec l'objet Range d'Excel...) et cet objet Range dispose de la méthode PasteSpecial.

    Dès lors, tu peux t'inspirer du code suivant, qui mémorise le document "bonjour.doc" (qui doit être ouvert, sinon, il faut l'ouvrir, à la main ou par vba) et qui place respectivement aux signets Excel et Excel1 les plages B10:C20 et F6:H16

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim MonDoc As Word.Document
     
        Set MonDoc = Word.Documents("bonjour.doc")
        Range("b10:c20").Copy
        MonDoc.Bookmarks("excel").Range.PasteSpecial _
            Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine
     
        Range("f6:h16").Copy
        MonDoc.Bookmarks("excel1").Range.PasteSpecial _
            Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine
    [EDIT] Je précise, au vu de ton code (issu de l'enregistreur?) qu'il n'est pas nécessaire et/ou utile de sélectionner les plages que tu souhaites copier. Tu peux les adresser directement, ce qui est plus rapide et donne un code plus lisible. Dans le code que je donne, tu verras que je ne sélectionne pas les plages. J'utilise directement les propriétés et méthodes d'objets Range
    [/EDIT]

    Ok?
    "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...
    ---------------

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Waw,
    c'est juste ce qu'il me fallait. Merci pour la précision et la cohésion.

    Il me manque juste encore un truc pour que :
    * soit le pasteSpecial suivant ecrase le précédent (mailmerge oblige).
    * soit éviter de devoir rouvrir le .doc initial à chaque record excel afin d'accéler le code.

    Est-ce possible ?

    Merci.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  6. #6
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Dans la mesure où tu insères ton tableau comme un caractère, tu peux te servir de la position du signet pour supprimer le caractère qui suit le signet considéré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mondoc.Bookmarks("excel").Range.Start + 1).Delete
    Et tu peux boucler sur les signets qui te servent à insérer tes tableaux
    "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...
    ---------------

  7. #7
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Génial.

    Merci Beaucoup.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Pour Info,

    l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mondoc.Bookmarks("excel").Range.Start + 1).Delete
    ne fonctionnait pas (syntax error). Pas possible de lui faire avaler .Start+1 ou alors je n'ai jamais trouvé où intégrer la parenthèse ouvrante manquante.

    J'ai fait comme ceci et cela fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        'Remove Inserted Contents at "Target" bookmark
        With WordDoc.Bookmarks("Target")
          bookstart = .Start
          Bookend = .End
        End With
     
        Set Myrange = WordDoc.Range(Start:=bookstart, End:=Bookend)
        Myrange.Delete
    Encore merci.

    Thierry.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  9. #9
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Désolé...

    J'ai loupé mon recopiage
    Le bon code était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Characters(WordDoc.Bookmarks("excel").Start + 1).Delete
    en ayant adapté au nom de ton objet "Document Word"...

    L'avantage de ce code est qu'il ne déplace pas le point d'insertion dans le document Word.
    Encore désolé...
    "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...
    ---------------

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Merci et pas de soucis,

    je vais adapter comme tu le recommande. C'est plus léger.

    Bonne journée.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

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

Discussions similaires

  1. D'Excel vers Word via VBA
    Par Juunii dans le forum VBA Project
    Réponses: 17
    Dernier message: 25/05/2015, 20h47
  2. Insertion d'un tableau Excel dans Word via Ole
    Par blondelle dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/12/2008, 10h55
  3. Comment insérer un tableau HTML dans Word ?
    Par SmOkEiSBaD dans le forum Word
    Réponses: 4
    Dernier message: 12/06/2008, 11h10
  4. Réponses: 1
    Dernier message: 05/05/2008, 20h56

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