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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    avril 2016
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2016
    Messages : 86
    Points : 38
    Points
    38

    Par défaut 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

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 119
    Points : 10 521
    Points
    10 521
    Billets dans le blog
    28

    Par défaut

    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
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    avril 2016
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2016
    Messages : 86
    Points : 38
    Points
    38

    Par défaut

    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

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 119
    Points : 10 521
    Points
    10 521
    Billets dans le blog
    28

    Par défaut

    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
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    avril 2016
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2016
    Messages : 86
    Points : 38
    Points
    38

    Par défaut

    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
    ESSAI.xlsm
    ESSAI.docx

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

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 119
    Points : 10 521
    Points
    10 521
    Billets dans le blog
    28

    Par défaut

    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
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    avril 2016
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2016
    Messages : 86
    Points : 38
    Points
    38

    Par défaut

    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é
    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

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 119
    Points : 10 521
    Points
    10 521
    Billets dans le blog
    28

    Par défaut

    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
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    avril 2016
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2016
    Messages : 86
    Points : 38
    Points
    38

    Par défaut

    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

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 4 119
    Points : 10 521
    Points
    10 521
    Billets dans le blog
    28

    Par défaut

    Citation Envoyé par Kris41 Voir le message
    La difficulté sera de formater vos données pour qu'elles se déversent dans le tableau. Regardez ce tuto de Marina Publipostage-conditionnel-maison. Il y a d'autres articles qui peuvent vous intéresser sur son site.

    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

Discussions similaires

  1. Remplir un formulaire WORD avec des données Excel
    Par Giant25 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/02/2015, 16h31
  2. Réponses: 11
    Dernier message: 18/10/2007, 12h49
  3. Créer un tableau croisé avec 4 données
    Par valalu dans le forum IHM
    Réponses: 1
    Dernier message: 19/07/2007, 06h59
  4. Modifier des formes Visio avec des données Excel
    Par Hubs702 dans le forum Visio
    Réponses: 4
    Dernier message: 25/06/2007, 07h19
  5. Réponses: 6
    Dernier message: 11/07/2006, 10h56

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