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 :

Générer un doc WORD à partir de données excel via VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut Générer un doc WORD à partir de données excel via VBA
    Bonjour,

    Après plusieurs recherches sur le net et ici, je n'arrive pas à résoudre mon problème que je vous expose (je précise que je suis débutante - voire très débutante en VBA, cependant j'apprends vite, il ne me manque que la logique d'initilisation).

    J'ai besoin de faire éditer des contrats par plusieurs personnes à qui on remettra un fiche à compléter (exemple de fichier excel joint). Sur cette base, les éléments complétés doivent générer le contrat à partir du document modèle exhaustif (exemple joint) : renseigner les champs "signets", puis ajouter les paragraphes en fonction des sélectionné (sur la base des "oui" dans le fichier excel).
    Je précise que les modèles sont simplifiés, le doc final fait une dizaine de pages en réalité.

    Je voudrais utiliser VBA pour lier les documents et développer, mais je ne connais pas du tout le code à appliquer, et je n'arrive pas à trouver de quoi m'aider. Est-ce que quelqu'un pourrait m'orienter svp ? Soit vers un tutoriel, soit en m'indiquant la méthode que je pourrai dupliquer ensuite ?

    J'ai créé tous les signets. Il me reste :
    - à lier les documents (pour l'instant c'est la dessus que je coince) ;
    - à remplir mes signets et sélectionner les paragraphes (je trouve plus d'éléments de réponse la dessus mais je veux bien un peu d'aide)

    Avec mes remerciements par avance
    N'hesitez pas à me demander si vous avez besoin d'infos complémentaires.

    Coline
    DOCUMENT EXEMPLE.docx
    exemple fichier Ex.xlsx

  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
    Citation Envoyé par Coline3007 Voir le message
    puis ajouter les paragraphes en fonction des sélectionné (sur la base des "oui" dans le fichier excel).
    Il serait plus judicieux de créer tous tes paragraphes dans ton modèle et de les supprimer en fonction des "non".
    Pour supprimer le paragraphe, le plus simple est d'appliquer un signet à tout le paragraphe ce qui te permettra de le repérer facilement.

    J'ai créé tous les signets. Il me reste :
    - à lier les documents (pour l'instant c'est la dessus que je coince) ;
    - à remplir mes signets et sélectionner les paragraphes (je trouve plus d'éléments de réponse la dessus mais je veux bien un peu d'aide)
    Dans VBA, on ne va pas "lier" les documents (à moins de vouloir les traiter façon mailing-list, mais pour ça pas besoin de VBA).

    Il suffit de place la valeur contenue dans la cellule Excel à l'emplacement signalé par ton signet.
    Personnellement, dans mes modèles Word, je mets dans le texte un mot contenant le nom du signet et j'applique le signet sur tout ce mot. Ca permet de repérer plus facilement les signets dans le modèle et de contrôler le format (police, taille, etc.).

    Exemple de remplacement du contenu d'un signet par une valeur de cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Dim DocDest As Word.Document
       Set DocDest = GetObject("MonFichier.docx")
       DocDest.Bookmarks("MonSignet").Range.Text = WorkSheets("MaFeuille").Range("A1").Text
    Bien sûr, il faut avoir intégré à ta macro la bibliothèque des objets Word.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Suivant la même idée que Menhir, il est possible dans Word de définir un caractère invisible (en VBA propriété Font.Hidden)
    Il suffirait donc de rendre invisible les paragraphes défini par la réponse Non dans Excel.
    Word adapte le document en n'affichant que les caractères visibles et renumérote le cas échéants les styles Titre
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  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
    Attention, ce qui est caché peut être à nouveau révélé.
    Un paragraphe masqué dans un document envoyé à un client (par exemple) n'empêchera pas celui-ci de le rendre de nouveau visible.
    J'ai une mésaventure semblable qui est arrivée à un collègue avec la gestion des modifications.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Menhir,
    Attention, ce qui est caché peu être à nouveau révélé.
    Un paragraphe masqué dans un document envoyé à un client (par exemple) n'empêchera pas celui-ci de le rendre de nouveau visible.
    Tu as tout à fait raison mais comme je n'envoie que des documents pdf à mes clients, je n'ai pas pensé à la mise en garde
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour à tous

    Une solution par assemblage de documents contenants les paragraphes plutôt que des signets dans un seul document.
    http://www.excel-formations.fr/Trucs_astuces/WORD00.php

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Chris,
    Je connaissais le publipostage avec une feuille mais j'ignorais cette astuce avec plusieurs feuilles
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut Merci !
    Bonjour à tous,

    Un grand merci à vous pour vos retours et astuces. J'ai progressé depuis mon post puisque j'ai réussi à créer mon fichier modèle (je précise qu'il est bien exhaustif et en format .doc - tentative échouée en .dot), avec tous les signets et à le faire compléter via les données dans les cellules.
    La ou je rencontre encore une difficulté c'est que j'ai l'impression que mon modèle est systématiquement ecrasé, une fois la macro lancée, mon doc modèle se trouve compléter. Comment puis-je utiliser le modèle (.dot ou .doc ?) sans l'écraser systématiquement ? Donc en remplissant un fichier qui se base sur ce modèle ?

    Merci encore à vous tous, j'avance, j'avance !

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un modèle est un fichier suffixé dotx ou dotm ou encore pour les versions antérieure à 2007 dot.
    Tu dis avoir des problèmes mais tu ne publies pas la procédure VBA utilisée en indiquant la ligne qui te pose problème.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    En effet, merci c'est bien parce que je n'utilisais pas le format modèle que ça écrasait mon document a priori. Et l'échec était du au fait que je n'avais pas créé mon modèle .dot comme objet de la bibliothèque.
    Si je rencontre de nouvelles difficultés je reviens vers vous (avec les éléments de code qui posent problème le cas échéant).

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Voilà, j'ai pas mal avancé. Il me reste les codes conditionnels à insérer, et c'est là que je bloque maintenant.
    Par exemple, je veux indiquer si le contenu de la cellule = Non alors le signet "nomdusignet" est caché.
    J'indique 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
    Sub generation()
     Dim wordApp As Object
     Dim wordDoc As Object
    Dim i As Byte
    
        Set wordApp = CreateObject("word.application")
        Set wordDoc = wordApp.Documents.Open("U:\Modèlefichier0.dotx")
        wordApp.Visible = False
        
        wordDoc.Bookmarks("signet0").Range.Text = Cells(5, 2)
        wordDoc.Bookmarks("signet0bis").Range.Text = Cells(4, 2)
    
    If Cells(11, 2) = "Non" Then wordDoc.Bookmarks("signet2").Range.Font.Hidden = True
    Cette ligne est en erreur. Je maitrise encore mal le code VBA, donc j'imagine qu'elle est mal voire très mal exprimée...

    Enfin, je voudrais que dans un paragraphe nommé "Gestion de dossiers", composé de 4 possibilités (chacune identifiée par un signet), s'affiche le signet correspondant au choix 1, 2, 3 ou 4 dans la list box Excel.
    Comment puis-je traduire cela en code ?

    Je vous remercie encore grandement pour votre aide !

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cette ligne est en erreur.
    Signaler quelle ligne est en erreur c'est bien mais indiquer le numéro de l'erreur et le message qui l'accompagne est un plus.
    Es tu certaine que le signet nommé signet2 existe bien dans le document ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  13. #13
    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 Coline3007 Voir le message
    en format .doc - tentative échouée en .dot)
    Il est inutile d'essayer de faire un modèle .dot.
    Par contre, je te conseille de passer ton doc en docx.

    La ou je rencontre encore une difficulté c'est que j'ai l'impression que mon modèle est systématiquement ecrasé, une fois la macro lancée, mon doc modèle se trouve compléter. Comment puis-je utiliser le modèle (.dot ou .doc ?) sans l'écraser systématiquement ? Donc en remplissant un fichier qui se base sur ce modèle ?
    C'est simple : juste après avoir ouvert ton modèle dans ta macro, tu fais dessus un SaveAs en le sauvegardant avec un autre nom (ou dans un autre répertoire).
    https://msdn.microsoft.com/fr-fr/lib.../ff836084.aspx

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Je vous remercie pour vos retours.
    Encore un tout petit peu d'aide si vous le voulez bien. Quelqu'un peut m'indiquer comment séléctionner les paragraphes en fonction des données de mes cellules ?
    De type : si cell (1,1) = A alors afficher le signet "A" et supprimer les signets B, C et D
    Ou si cell (1,2) = Non, alors ne pas afficher le signet correspondant.

    Il me manque juste ces lignes de codes pour finaliser mon document.

    Merci d'avance pour votre aide !
    Coline

  15. #15
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ton message avait échappé à mon attention. Ceci dit, tu pourrais jeter un œil là-dessus. Tu peux, de base, choisir différents éléments parmi une "banque" d'éléments. Au pire, tu peux adapter, ou "travailler à l'envers". Tu charges quelqu'un de préparer un document de base avec les sections appropriées, puis tu fais réviser par tes différents auteurs.

  16. #16
    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 Coline3007 Voir le message
    comment séléctionner les paragraphes en fonction des données de mes cellules ?
    De type : si cell (1,1) = A alors afficher le signet "A" et supprimer les signets B, C et D
    Ou si cell (1,2) = Non, alors ne pas afficher le signet correspondant.
    Je te conseille de TOUT afficher dans ton modèle.
    Comme ça, tu n'auras qu'à supprimer ce qu'il y a en trop.

    Par exemple, si tu reprends mon exemple du post #2, il est possible d'écrire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DocDest.Bookmarks("MonSignet").Range.Text = ""
    Mais il serait plus propre d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DocDest.Bookmarks("MonSignet").Range.Delete
    https://msdn.microsoft.com/fr-fr/lib.../ff837530.aspx
    https://msdn.microsoft.com/fr-fr/lib.../ff845882.aspx
    https://msdn.microsoft.com/fr-fr/lib.../ff845114.aspx

Discussions similaires

  1. [XL-2016] Générer un fichier type word à partir de données excel
    Par padao dans le forum Excel
    Réponses: 3
    Dernier message: 19/04/2016, 19h21
  2. Générer un fichier XML à partir de données Excel et d'un xsd
    Par outrun13 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/10/2013, 16h40
  3. [Toutes versions] Générer un fichier XML à partir de données Excel et d'un xsd
    Par outrun13 dans le forum Excel
    Réponses: 1
    Dernier message: 19/10/2013, 01h04
  4. Ouvrir un doc word à partir d'excel
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/05/2008, 20h06
  5. Extration de données Excel via VBA
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/04/2007, 09h08

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