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 des données excel dans un tableau word [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Billets dans le blog
    1
    Par défaut Insérer des données excel dans un tableau word
    Bonjour amis développeurs et à tout le forum,

    Question à 100 balles sur le fonctionnement des tableaux dans word. Je voudrais copier des cellules d'un classeur excel dans un tableau word.
    Le but est de pouvoir garder le résultats des cellules du classeur excel les unes en dessous des autres dans ce tableau.
    Dans une macro vba, j'utilise ce code pour faire le lien entre word et excel :
    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
        Dim DocWord As Word.Document
        Dim Chemin, lettre_col_offre, lettre_col_qté, lettre_col_art, lettre_col_fin As String
        Dim qté, ligne, i_ligne, col_offre, col_qté, i_fin As Integer
     
        'Récupération indice ligne du tableau + colonne quantité + colonne offre
        i_ligne = Application.Match("Elément", Worksheets(nom).Columns(1), 0)
        i_fin = Application.Match("fin", Worksheets(nom).Columns(1), 0)
        col_qté = Application.Match("Qté", Worksheets(nom).Rows(i_ligne & ":" & i_ligne), 0)
        col_offre = Application.Match("Désignation paragraphe offre", Worksheets(nom).Rows(i_ligne & ":" & i_ligne), 0)
     
        'Récupération des indices en "lettre" des colonnes qté et offre (ex indice "lettre" : "A")
        lettre_col_art = Split(Worksheets(nom).Columns(col_offre + 5).Address(ColumnAbsolute:=False), ":")(1)
        lettre_col_offre = Split(Worksheets(nom).Columns(col_offre + 6).Address(ColumnAbsolute:=False), ":")(1)
        lettre_col_qté = Split(Worksheets(nom).Columns(col_offre + 7).Address(ColumnAbsolute:=False), ":")(1)
     
        Chemin = Environ("USERPROFILE") & "\Mes documents\Offre2017"
     
        'Ouvre le document Word
        Set DocWord = GetObject(Chemin & "\test.docx")
     
        DocWord.Application.Visible = True
     
        'Copie les données dans excel
        Worksheets(nom).Range(lettre_col_offre & i_ligne & ":" & lettre_col_qté & i_fin).Copy
        'Colle la désignation offre dans Word
        DocWord.Range(Start:=0, End:=1).PasteSpecial
        Application.CutCopyMode = False
    Je rencontre un problème à partir de cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DocWord.Range(Start:=0, End:=1).PasteSpecial
    Lorsque la macro est appelée plusieurs fois, les données ne s'insèrent pas à la suite mais dans la première case du tableau.
    Quel serait le code pour pouvoir obtenir une insertion des données excel à la suite ?

    Je me débrouille avec VBA Excel mais je suis un peu novice avec VBA sur Word.
    J'ai cherché du code sur le forum mais je ne pense pas l'utiliser correctement. Pour info, la macro doit se déclencher dans excel.

    Merci d'avance pour vos retours,
    Cordialement,
    BDA53

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Perso, j'ai beaucoup galéré sur les échanges Excel -> Word.

    Maintenant, je m'en tiens à 2 méthodes.

    Soit il s'agit de données éparses disséminées dans un texte ou semées ici et là : dans ce cas, je passe par des bookmark.

    Soit il s'agit de données de masse façon tableau (comme ça semble être ton cas) et, dans ce cas, je crée un fichier type (pour ne pas dire "modèle" qui a une signification particulière) avec un embryon de tableau vide d'une seule ligne (avec les format qui vont bien pour ce que je souhaite y déposer).
    Avec une brutale boucle For To, je copie cette ligne vierge de tableau Word autant de fois qu'il y a de ligne de données dans Excel en y transférant à chaque fois les données avec un simple = (pas de copy) du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DocuWord.Tables(1).Rows(WLigne).Cells(1).Range.Text = WSSource.Cells(XLigne, 1).Text
    C'est comme une 2CV : c'est pas beau, c'est pas rapide, mais fabuleusement fiable et robuste.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Billets dans le blog
    1
    Par défaut
    Bonjour menhir et merci pour ton retour,

    Dans la ligne de code que tu as mis en commentaire, WSSource est un objet avec le chemin d'accès du fichier excel ?
    J'obtiens une erreur dans ce bloc de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Pour info i_ligne = 13, i_offre = 0 et col_offre = 4
     For ligne = i_ligne + 1 To Worksheets(nom).Range("AK13").End(xlDown).Row
            i_offre = i_offre + 1
            DocWord.Tables(1).Rows(i_offre).Cells(1).Range.Text = ThisWorkbook.Worksheets(nom).Cells(ligne, col_offre + 6).Text
            DocWord.Tables(1).Rows(i_offre).Cells(2).Range.Text = ThisWorkbook.Worksheets(nom).Cells(ligne, col_offre + 7).Text
     Next ligne
    Voici l'intitulé de l'erreur : "Erreur d'éxécution 5941 : Le membre de la collection requis n'existe pas"

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par BDA53 Voir le message
    Voici l'intitulé de l'erreur : "Erreur d'éxécution 5941 : Le membre de la collection requis n'existe pas"
    Ce n'est pas une erreur de syntaxe mais vraisemblablement une erreur d'indice.
    Il faut que tu vérifies que chaque collection que tu utilises dans cette ligne possède un nombre d'élément correspondant à la valeur de l'indice.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Billets dans le blog
    1
    Par défaut
    Ok je viens de comprendre le problème. En fait avec la ligne de code que tu m'as donnée il faut que le tableau dans word existe déjà.
    Est-ce qu'il y a un code qui permet d'initialiser le tableau avant ? ou un code permettant d'ajouter une ligne dans un tableau sur word ?

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par BDA53 Voir le message
    En fait avec la ligne de code que tu m'as donnée il faut que le tableau dans word existe déjà.
    C'est bien ce que j'avais dit, relis mon message avec plus d'attention.

    Est-ce qu'il y a un code qui permet d'initialiser le tableau avant ?
    Comme je l'ai dit, perso je me fabrique "à la main" un fichier type réutilisable.
    C'est beaucoup plus rapide et souple pour régler les formats.

    un code permettant d'ajouter une ligne dans un tableau sur word ?
    De la même façon qu'à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DocuWord.Tables(1).Rows(WLigne).Range.Copy
    DocuWord.Tables(1).Rows(WLigne).Range.Paste

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

Discussions similaires

  1. [WD-2016] Insérer des données excel dans un tableau word
    Par BDA53 dans le forum VBA Word
    Réponses: 0
    Dernier message: 25/07/2018, 14h19
  2. [2007] Exporter des données excel dans un tableau sous word
    Par Pierrea4564 dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 07/02/2011, 18h06
  3. [XL-2003] Macro pour utiliser des données Excel dans un document Word
    Par Jeremy0269 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2009, 18h58
  4. Insérer des données Excel dans une table ACCESS
    Par anikeh dans le forum Access
    Réponses: 4
    Dernier message: 21/12/2005, 22h42
  5. Insérer des données Excel dans une base Access ?
    Par MaTHieU_ dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2005, 15h11

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