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

VBA Word Discussion :

Créer un tableau Word avec des données Excel


Sujet :

VBA Word

  1. #1
    Membre du Club
    Créer un tableau Word avec des données Excel
    Bonjour à tous,

    J'essai de créer un tableau par le VBA avec des données Excel, en passant par du publipostage.

    J'explique :
    Dans le tableau Excel j'ai plusieurs colonnes et une ligne correspond à une facture
    Exemple :

    N° Facture ! Article 1 ! Article 2 ! Article 3 ! Article 4 ! Article 5 !

    Sauf que je peux avoir seulement la colonne "Article 1" de remplie.

    Cela me donnerais un tableau sous Word avec un nombre de ligne variable.

    Les colonnes "Article" du fichier Excel deviendrons des lignes dans le tableau Word.

    Pourriez-vous m'aider à faire cela ?

    Je tiens a préciser que je ne peux transformer le fichier Excel car il y a un énorme paquet de donnée (plus de 10 000 lignes et 50 colonnes).

    Je vous remercie pour l'aide que vous pouvez me fournir.

    Bonne journée.

  2. #2
    Expert éminent sénior
    Citation Envoyé par Kris41 Voir le message


    Bonjour,

    Vous avez le choix également de générer un fichier Word depuis Excel et de positionner vos articles dans le document via des signets.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  3. #3
    Membre du Club
    Merci pour la réponse.

    Je sens que cela ne va pas être facile, je ne trouve pas beaucoup de tuto bien détaillé.

    J'ai dans le fichier des données de publipostage qui apparaissent selon condition.

    Est que cela est possible également avec la génération de fichier sous excel ?

    Il faut que je me penche sur la question tout de même car vraiment pratique.

  4. #4
    Expert éminent sénior
    Citation Envoyé par Kris41 Voir le message

    Regardez si cette discussion peut vous être utile : importer-tableau-d-excel-sous-word-sous-format-image-partir-word
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  5. #5
    Membre du Club
    Je dois avouer que je ne m'en sort pas du tout avec cette programmation.

    Dans la logique du travail a faire, je sélectionne les lignes du fichier Excel pour produire les documents Word correspondant. Donc je devrais ouvrir le document Word plusieurs fois.
    Par exemple si je sélectionne 3 lignes dans le fichiers Excel, le document Word devrait s'ouvrir 3 fois.

    J'intègre les données à utiliser du fichier excel dans le document Word.

    Puis j'enregistre le fichier Word obligatoirement dans un autre nom que celui de la trame qui est utilisé.

    Pour le moment, j'arrive seulement à ouvrir le document Word une seule fois avec le code suivant.

    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
     
    Sub CREEROUVRIRWORD()
     
    CHEMIN = ThisWorkbook.Path & "\"
     
    'Ouverture de l'application word
    Set WORD = CreateObject("Word.Application")
    'ouverture du fichier type
    Set DOCMEMOIRE = WORD.documents.Open(CHEMIN & "ESSAI.docx")
     
    'numéro des colonnes comprenant les données
    champs = Array(1, 18, 20)
    'tableau des signets du fichier type
    signets = Array("REFERENCE", "NTIERS", "DATESAISIE")
    'écriture des signets
    'For Each i In champs
        'DOCMEMOIRE.bookmarks(signets).Range = Sheets("TITRES").Cells(ActiveCell.Row, i)
    'Next
    WORD.Visible = True
     
    End Sub


    Ci-joint les deux fichiers pour un peu plus de compréhension



    Merci par avance de toute l'aide que vous pourrez m'apporter.

  6. #6
    Expert éminent sénior
    Citation Envoyé par Kris41 Voir le message

    Mettez Option Explicit en tête de votre module et déclarez toutes vos variables. Vous ne pouvez pas utiliser des mots réservés pour le nom de vos variables (Word).
    Votre ligne de titre dans le tableau Excel contient des cellules fusionnées, ce n'est absolument pas heureux.
    Il vous faut créer une première procédure qui contiendra une boucle sur les lignes qui vous souhaitez traiter. Dans cette routine, vous créerez l'instance Word (et la supprimerez à la fin).
    Dans une seconde procédure, vous réaliserez la génération de chaque document comme dans votre procédure actuelle. Les données seront transmises par paramètres.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  7. #7
    Membre du Club
    J'ai pris le temps de déclarer toutes les variables mais du coup je suis bloqué sur la première procédure.

    La première procédure doit se passer sur la sélection des lignes.

    J'ai donc utilisé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    With selection


    Mais après je bloque pour dire "pour chaque ligne"

    Voici le code que j'ai instruit pour le moment.

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    Option Explicit
     
    Sub CREEROUVRIRWORDMEMOIRE()
     
    'DECLARATION DE VARIABLE
    Dim CHEMIN As String
    Dim VARNFACTURE As String
    Dim VARANNEETITRE As String
    Dim VARNOMSIEGE As String
    Dim VARCOMPLEMENT As String
    Dim VARADRESSESIEGE As String
    Dim VARSIRETSIEGE As String
    Dim VARNOMFACTURATION As String
    Dim VARADRESSEFACTURATION As String
    Dim VARSIRETFACTURATION As String
    Dim VARAUTITREDELANNEE As String
    Dim VARNTIERS As String
    Dim VARMONTANTORIGINAL As String
    Dim VARDATESAISIE As String
    Dim VARLIBELLE1 As String
    Dim VARQUANTITE1 As Long
    Dim VARPRIX1 As Long
    Dim VARMOIS1 As String
    Dim VARTOTAL1 As String
    Dim VARLIBELLE2 As String
    Dim VARQUANTITE2 As Long
    Dim VARPRIX2 As Long
    Dim VARMOIS2 As String
    Dim VARTOTAL2 As String
    Dim VARLIBELLE3 As String
    Dim VARQUANTITE3 As Long
    Dim VARPRIX3 As Long
    Dim VARMOIS3 As String
    Dim VARTOTAL3 As String
    Dim VARLIBELLE4 As String
    Dim VARQUANTITE4 As Long
    Dim VARPRIX4 As Long
    Dim VARMOIS4 As String
    Dim VARTOTAL4 As String
    Dim VARLIBELLE5 As String
    Dim VARQUANTITE5 As Long
    Dim VARPRIX5 As Long
    Dim VARMOIS5 As String
    Dim VARTOTAL5 As String
    Dim VARCONVERTIONTEXTE As String
    Dim VARNOMBRELIGNE As Integer
    Dim I As Integer
    Dim W As Application
    Dim DOCMEMOIRE As Application
     
    CHEMIN = ThisWorkbook.Path & "\"
     
    With Selection
        For I In Selection
            'Ouverture de l'application word
            Set W = CreateObject("Word.Application")
            'ouverture du fichier type
            Set DOCMEMOIRE = W.documents.Open(CHEMIN & "ESSAI.docx")
     
            VARNFACTURE = Range("A" & I).Value
            VARANNEETITRE = Range("H" & I).Value
            VARNOMSIEGE = Range("I" & I).Value
            VARCOMPLEMENT = Range("J" & I).Value
            VARADRESSESIEGE = Range("K" & I).Value
            VARSIRETSIEGE = Range("L" & I).Value
            VARNOMFACTURATION = Range("M" & I).Value
            VARADRESSEFACTURATION = Range("N" & I).Value
            VARSIRETFACTURATION = Range("O" & I).Value
            VARAUTITREDELANNEE = Range("Q" & I).Value
            VARNTIERS = Range("R" & I).Value
            VARMONTANTORIGINAL = Range("S" & I).Value
            VARDATESAISIE = Range("T" & I).Value
            VARLIBELLE1 = Range("W" & I).Value
            VARQUANTITE1 = Range("X" & I).Value
            VARPRIX1 = Range("Y" & I).Value
            VARMOIS1 = Range("Z" & I).Value
            VARTOTAL1 = Range("AA" & I).Value
            VARLIBELLE2 = Range("AB" & I).Value
            VARQUANTITE2 = Range("AC" & I).Value
            VARPRIX2 = Range("AD" & I).Value
            VARMOIS2 = Range("AE" & I).Value
            VARTOTAL2 = Range("AF" & I).Value
            VARLIBELLE3 = Range("AG" & I).Value
            VARQUANTITE3 = Range("AH" & I).Value
            VARPRIX3 = Range("AI" & I).Value
            VARMOIS3 = Range("AJ" & I).Value
            VARTOTAL3 = Range("AK" & I).Value
            VARLIBELLE4 = Range("AL" & I).Value
            VARQUANTITE4 = Range("AM" & I).Value
            VARPRIX4 = Range("AN" & I).Value
            VARMOIS4 = Range("AO" & I).Value
            VARTOTAL4 = Range("AP" & I).Value
            VARLIBELLE5 = Range("AQ" & I).Value
            VARQUANTITE5 = Range("AR" & I).Value
            VARPRIX5 = Range("AS" & I).Value
            VARMOIS5 = Range("AT" & I).Value
            VARTOTAL5 = Range("AU" & I).Value
            VARCONVERTIONTEXTE = Range("AV" & I).Value
            VARNOMBRELIGNE = Range("BG" & I).Value
     
     
            DOCMEMOIRE.bookmarks("REFERENCE") = VARNFACTURE
            DOCMEMOIRE.bookmarks("NTIERS") = VARNTIERS
            DOCMEMOIRE.bookmarks("DATESAISIE") = VARDATESAISIE
        Next I
     
    W.Visible = True
     
    End With
     
    End Sub

  8. #8
    Expert éminent sénior
    Citation Envoyé par Kris41 Voir le message

    Bigre !

    Désolé, dans votre message d'origine, vous ne faisiez mention que d'un transfert de 1 à 5 informations.

    Je pense qu'il y a une erreur de conception dans votre outil. De mon point de vue, il vous faut deux tables :
    • Une table des factures avec les champs nécessaires (colonnes 1 à 21)
    • Une table des objets comprenant 5 colonnes + 1 colonne pour faire le lien avec la facture. Dans cette table, vous pouvez avoir N lignes pour une même facture.


    Pour connaître le montant total de la facture un simple SOMME.SI ou un SOMMEPROD dans la table des factures suffit et vous pourrez écrire la somme en lettre.
    Pour alimenter votre tableau dans Word, il vous suffira de faire une boucle sur les lignes correspondant à votre facture dans la table des objets.
    Pour vos tables, privilégiez plutôt des tableaux référencés.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  9. #9
    Membre du Club
    Ne vous excusez pas ! C'est vrai que je n'avais pas précisé toutes les informations dans le détail.

    Le fichier excel est un tableau de suivi qui contient toutes les informations. Il y a un grand nombre de colonne et encore plus pour les lignes. Et cela, sans compter qu'il y a un onglet pour les factures et les avoirs.

    Je pensais par conséquent passé par le publipostage, ce qui fonctionne très bien. Après c'est juste au niveau de la présentation des objets facturés que je voulais mettre sous forme de tableau.

    Pour le faire, j'avais pensé à compter le nombre d'objet facturé. Ce que j'ai réussi a faire.

    Il me reste juste à formater le tableau sous Word.

    Par exemple, si j'ai le nombre de 3 objets a facture alors le tableau serait composé de 4 lignes (ligne d'en-tête incluse). Chaque cellule du tableau Word aurait correspondu a une cellule du fichier excel. Tout en sachant que le premier objet facture correspondais à la première ligne du tableau Word.

  10. #10
    Expert éminent sénior
    Citation Envoyé par Kris41 Voir le message

    La difficulté sera de formater vos données pour qu'elles se déversent dans le tableau.

    Si vous continuez avec la méthode en générant les fichiers Word depuis Excel, une solution consisterait à rassembler vos données à exporter via une matrice contenant autant de lignes que d'objets composant chaque facture.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter