Export liste colonne Excel vers Word [Résolu] - VB / VBA

Export liste colonne Excel vers Word Exporter un graphique Excel vers Word [Résolu] (Résolu) » Forum - Excel Exportation de données excel vers word » Forum - Excel Importer des noms de fichiers dans excel [Résolu] (Résolu) » Forum - Excel Exporter liste ecritures ciel vers excel » Forum - Comptabilité / Gestion Export Excel vers Word [Résolu] » Forum - Excel

Bonjour,

Voilà mon petit souci. J'ai une macro (procedure) qui me permet d'exporter les données d'un fichier excel (une feuille) vers Word. Je rajoute une deuxième macro pour faire le même travail, mais depuis une autre feuille du même fichier, mais cela ne m'exporte pas toute la colonne (sachant qu'il y a des cellules vides). ça m'exporte uniquement les deux premières cellules qui deplus, contiennent la même référence. J'aimerais pouvoir exporter les données de ma colonne 33 (AG) sans les doublons. J'ai également le petit souci, car quand je lance la deuxième macro, la 1ère ne fonctionne pas... J'aimerais pouvoir exporter les données des deux feuilles, en même temps.

Je pense qu'il manque clairement quelque chose dans ma procedure...

Merci par avance pour votre aide !

1ère macro

Public Sub Export_List()

Dim WordApp As Object
Dim WordDoc As Object

Set WordApp = CreateObject("word.application")
Set WordDoc = WordApp.Documents.Open("Mon doc word")
WordApp.Visible = True

lig1 = 18
While Not IsEmpty(ThisWorkbook.Sheets("Tableaux de Bord").Cells(lig1, 1))
If vale = "" Then
vale = ThisWorkbook.Sheets("Tableaux de Bord").Cells(lig1, 1).Text
Else
vale = vale & Chr(10) & ThisWorkbook.Sheets("Tableaux de Bord").Cells(lig1, 1).Text
End If
lig1 = lig1 + 1
Wend


WordDoc.Bookmarks("Tableau_de_Bord").Range.Text = vale

'WordDoc.Save
'WordDoc.Close

Set WordDoc = Nothing
Set WordApp = Nothing

End Sub


Et la 2ème macro

Public Sub Eport_DLT()

Dim WordApp As Object
Dim WordDoc As Object

Set WordApp = CreateObject("word.application")
Set WordDoc = WordApp.Documents.Open("Mon doc word")
WordApp.Visible = True

lig1 = 6
While Not IsEmpty(ThisWorkbook.Sheets("2018").Cells(lig1, 33))
If vale = "" Then
vale = ThisWorkbook.Sheets("2018").Cells(lig1, 33).Text
Else
vale = vale & Chr(10) & ThisWorkbook.Sheets("2018").Cells(lig1, 33).Text
End If
lig1 = lig1 + 1
Wend

WordDoc.Bookmarks("DLT").Range.Text = vale

'WordDoc.Save
'WordDoc.Close

Set WordDoc = Nothing
Set WordApp = Nothing

End Sub


Merci !


Forum

Export liste colonne Excel vers Word Exporter un graphique Excel vers Word [Résolu] (Résolu) » Forum - Excel Exportation de données excel vers word » Forum - Excel Importer des noms de fichiers dans excel [Résolu] (Résolu) » Forum - Excel Exporter liste ecritures ciel vers excel » Forum - Comptabilité / Gestion Export Excel vers Word [Résolu] » Forum - Excel

Web: www.shapebootstrap.net

59 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour, pour ton second soucis, je pense qu'il faut retirer les commentaires de save et close.
pour ton premier soucis, les doublons se suivent-ils toujours?

Merci yg_be 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 26664 internautes ce mois-ci

Reply
réponses:
  • criscrof

    Bonjour, merci pour ta rapidité de réponse ! Je vais tester en enlevant les lignes mais pourtant ils ne devraient pas être pris dans le code, puisqu'il y a un apostrophe devant. Pour les doublons, oui, ils sesuivent.

  • yg_be

    je voulais suggérer de garder les lignes et de retirer les apostrophes.

    Option Explicit  Public Sub Eport_DLT()  Dim WordApp As Word.Application Dim WordDoc As Word.Document Dim ancien As String, nouveau As String, vale As String Dim lig1 As Long Dim sh As Worksheet  Set sh = ThisWorkbook.Sheets("2018") ancien = "" For lig1 = 6 To sh.UsedRange.Rows(sh.UsedRange.Rows.Count).row     nouveau = sh.Cells(lig1, 33).Text     If nouveau <> "" And nouveau <> ancien Then         If vale = "" Then             vale = nouveau         Else             vale = vale & Chr(10) & nouveau         End If     End If     ancien = nouveau Next lig1 Set WordApp = New Word.Application Set WordDoc = WordApp.Documents.Open("Mon doc word") WordApp.Visible = True WordDoc.Bookmarks("DLT").Range.Text = vale WordDoc.Save WordDoc.Close Set WordDoc = Nothing Set WordApp = Nothing  End Sub

  • auteur

    Petite précision : En fait, ça me colle uniquement les deux premières cellules, qui ont la même valeur.

  • yg_be

    sans doute parce que la suivante est vide: tu as écrit ton code pour qu'il s'arrête dès une cellule vide. vois ma suggestion.

  • criscrof

    Bonsoir,

    Désolé de rpondre tardivement, je viens de tester chez moi. mais sous excel 2013... j'ai la version 2010 au boulot.

    Le code s'arrete à la première ligne

    Dim WordApp As Word.Application

    et ouvre la fenetre : Erreur de compilation : type défini par l'utilisateur non défini.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

voir ceci et lire le 1er commentaire

https://excel.developpez.com/faq/?page=Word#LireChampWord

Merci cs_Le Pivert 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 26664 internautes ce mois-ci

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

petite amélioration:
Option Explicit  Public Sub Eport_DLT()  Dim WordApp As Word.Application Dim WordDoc As Word.Document Dim ancien As String, nouveau As String, vale As String Dim lig1 As Long Dim sh As Worksheet  Set sh = ThisWorkbook.Sheets("2018") ancien = "" For lig1 = 6 To sh.UsedRange.Rows(sh.UsedRange.Rows.Count).row     nouveau = sh.Cells(lig1, 33).Text     If nouveau <> "" And nouveau <> ancien Then         If vale = "" Then             vale = nouveau         Else             vale = vale & Chr(10) & nouveau         End If         ancien = nouveau     End If Next lig1 Set WordApp = New Word.Application Set WordDoc = WordApp.Documents.Open("Mon doc word") WordApp.Visible = True WordDoc.Bookmarks("DLT").Range.Text = vale WordDoc.Save WordDoc.Close Set WordDoc = Nothing Set WordApp = Nothing  End Sub

Merci yg_be 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 26664 internautes ce mois-ci

Reply
réponses:
  • auteur

  • criscrof

    Bonjour,

    Merci pour tout, mais le souci reste le même. Le code s'arrete à la première ligne
    Dim WordApp As Word.Application
    et ouvre la fenetre : Erreur de compilation : type défini par l'utilisateur non défini.

    Je ne suis pas très câlé en VBA.

    La première macro est liée à un bouton, qui se trouve sur ma feuille "Tableau de Bord" et qui me permet d'ourvrir Word et exporter les données, jusque là pas de souci.

    La deuxième macro doit récupérer les données d'une autre feuille "2018" (même classeur) et doit les exporter dans le même doc word et en même temps que la première.
    Je dois bien la déclarer dans un module, et normalement cela devrait fonctionner avec le même bouton ?

    Merci encore pour vos conseils et aides.

  • yg_be

    dans l'éditeur VBA, sans doute menu outils, dans références, il faut ajouter "Microsoft Word xx.x Object Library"

  • criscrof

    Peut-être qu'on pourrait faire une requete avec une seule macro ?

  • cs_Le Pivert

    Si il ne lit pas les réponses qui lui sont faites, il ne risque pas d'y arriver!

    http://www.commentcamarche.net/forum/affich-35288167-export-liste-colonne-excel-vers-word#7

  • criscrof

    Bonjour,

    Je me rends compte que je n'avais pas dit un "grand merci beaucoup" à toutes vos réponses et conseilles... Désolé pour ce "raté" ! je reviens vers vous car j'aimerais faire une petite modif (un petit plus) dans le code ci-dessus. Je cherche à insérer la suppression des doublons de la colonne (AG ou 33), afin qu'il ne m'exporte pas toute les données dans le fichier Word. Est-ce possible sans réécrire l'ensemble du code ? Ce n'est peut-être pas sorcié, mais je n'y arrive pas.

    Merci par avance !

  • yg_be

    souhaite-tu réellement supprimer les doublons du fichier excel? si oui, en supprimant la ligne complete? les doublons sont-ils consécutifs?

  • auteur

    Non, la liste de cette colonne doit rester intacte avec les doublons dans le fichier xls. Par contre, il y a des cellules vides, et il ne sont pas consecutifs.

  • yg_be

    tu avais écrit le 30 mars 2018 à 17:00 "Pour les doublons, oui, ils sesuivent.".
    peux-être le plus précis possible, peut-être en donnant des exemples?

  • criscrof

    Oui j'avais écris ils se suivent mais il s'agissait une fois l'export, c'est a dire dans word. En meme, temps le premier essai ne m'avait exporté que données (identique et donc se suivaient) en ce sens que j'avais ecrit ça . Les données de la colonne 33 sont bien exportées dans word mais avec les doublons.

  • yg_be

    peux-être le plus précis possible, peut-être en donnant des exemples?

  • criscrof

    Que 2 données

  • criscrof

    dans ma colonne 33 (AG) de mon fichier xls à exporter vers word, j'ai plusieurs fois le même numéro, actuellement l'export fonctionne mais il envoie dans word toute les données ma colonne ex : plusieurs fois "H225_2018_ST_WP0076". Je souhaiterai qu'il n'y ai pas de doublons dans mon word...

  • yg_be

    avec le code proposé en #8, qu'obtiens-tu en Word à partir de l'exemple que tu donnes en #20?

  • criscrof

    Bonjour,

    J'obtiens ça :


    La liste est plus longue bien sur, mais je n'ai pas besoin d'avoir plusieurs fois la même référence. Merci !

  • yg_be

    suggestion:

    Option Explicit  Public Sub Eport_DLT()  Dim WordApp As Word.Application Dim WordDoc As Word.Document Dim nouveau As String, vale As String Dim lig1 As Long Dim sh As Worksheet Dim vu As New Scripting.Dictionary  Set sh = ThisWorkbook.Sheets("2018") For lig1 = 6 To sh.UsedRange.Rows(sh.UsedRange.Rows.count).Row     nouveau = sh.Cells(lig1, 33).text     If nouveau <> "" And Not vu.Exists(nouveau) Then         If vale = "" Then             vale = nouveau         Else             vale = vale & Chr(10) & nouveau         End If         Call vu.Add(nouveau, 0)     End If Next lig1 Set WordApp = New Word.Application Set WordDoc = WordApp.Documents.Open("Mon doc word") WordApp.Visible = True WordDoc.Bookmarks("DLT").Range.text = vale WordDoc.Save WordDoc.Close Set WordDoc = Nothing Set WordApp = Nothing  End Sub
    Il faut que "Microsoft Scripting Runtime" soit présent dans la liste de References de ton projet.

  • criscrof

    J'ai activé "Microsoft Scripting Runtime" dans visual, toujours les doublons... Je mets le doc word entier ci-dessous pour que tu vois à quoi il ressemble :

  • yg_be

    as-tu utilisé le code suggéré en #23?

  • criscrof

    Oui

  • yg_be

    peux-tu partager ton classeur Excel?

  • criscrof

    Tu pourrais me dire comment je partage le fichier stp ? C'est la première fois et je ne vois pas l'insertion possible avec les outils proposés ci-dessus. Merci

  • yg_be

    il faut publier le fichier sur internet (google drive, cjoint.com, ...), et puis partager le lien ici.

  • criscrof

    Oui ça y est j'ai trouvé : https://www.cjoint.com/c/HGjmITMrMLR

  • yg_be

    moi j'obtiens ceci, je n'y vois pas de doublon:
    H225_2018_ST_WP0001
    H225_2018_ST_WP0003
    H225_2018_ST_WP0011
    H225_2018_ST_WP0016
    H225_2018_ST_WP0020
    H225_2018_ST_WP0067
    H225_2018_ST_WP0014
    H225_2018_ST_WP0013
    H225_2018_ST_WP0027
    H225_2018_ST_WP0032
    H225_2018_ST_WP0034
    H225_2018_ST_WP0038
    H225_2018_ST_WP0040
    H225_2018_ST_WP0036
    H225_2018_R&A_WP0001
    H225_2018_ST_WP0051
    H225_2018_R&A_AH_WP0001
    H225_2018_ST_WP0050
    H225_2018_ST_WP0052
    H225_2018_ST_WP0053
    H225_2018_ST_WP0057
    ...

  • criscrof

    C'est ce que tu obtiens sur un doc word ? Parce-que j'obtiens ça :

  • criscrof

    J'utilise le bouton "Generate FSA" dans l'onglet "tableau de bord" il prends en charge les deux macros qui viennent coller les données dans mon doc word...

  • yg_be

    moi j'ai corrigé et amélioré Eport_DLT, que tu n'utilises pas, dirait-on...

  • criscrof

    Bon je vais refaire les test demain au bureau... merci beaucoup pour ta patience

  • criscrof

    Bonjour, j'utilise bien ton code, mais dans mon onglet "TCD" la valeur n'est pas DLT MSM (j'ai bcp lighté le fichier que tu as eu pour des raisons de confidentialités). Mais la macro que j'utilise (ci-dessous) rappatrie les données DIRSP... dans la première section de mon word (que tu peux voir plus haut en image) ou je n'ai pas de doublon dans cette colonne.

    A mon avis, je pense que c'est pour cela que ça me prends les doublons. Dans la feuille "TCD", DLT MSM n'est pas dans "étiquettes de lignes", mais dans "étiquettes de colonnes" Il faudrait peut-être que je créé une feuille supplémentaire avec tableau croisé dynamique, en appelant uniquement la colonne concernée, qu'en penses-tu ? Ou alors il y a peut-être d'autres solutions...

    Public Sub Export_List()

    Dim WordApp As Object
    Dim WordDoc As Object

    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Open("Mon document word")
    WordApp.Visible = True

    lig1 = 18
    While Not IsEmpty(ThisWorkbook.Sheets("TCD").Cells(lig1, 1))
    If vale = "" Then
    vale = ThisWorkbook.Sheets("TCD").Cells(lig1, 1).Text
    Else
    vale = vale & Chr(10) & ThisWorkbook.Sheets("TCD").Cells(lig1, 1).Text
    End If
    lig1 = lig1 + 1
    Wend


    WordDoc.Bookmarks("Tableau_de_Bord").Range.Text = vale

    'WordDoc.Save
    'WordDoc.Close

    Set WordDoc = Nothing
    Set WordApp = Nothing

    End Sub

  • yg_be

    donc tu me dis que Export_List() fonctionne bien, ne crée pas de doublon?
    et moi je pense que Eport_DLT() ne crée pas non plus de doublon.
    nous sommes-nous bien compris?

  • criscrof

    Je vais reposter le fichier avec un peu plus d'éléments (macros Export_List() elle se trouve dans la "feuille 12 (Tableau de bord)" et la tienne dans Module 1). Pour le coup, l'export vers Word (Eport_DLT) n'exporte plus... j'ai dû faire une mauvaise manip, bref je ne doute absolument pas que la tienne fonctionne, c'est peut-être au niveau de mon tableau croisé dynamique qu'il faut modifier quelque chose. Dans word j'ai bien 2 signets distincts mais comme je disais dans mon précédent post, la seule donnée qui arrive bien dans word, actuellement est celle qui est issue du tableau croisé dynamique. Merci encroe pour ta patience.
    https://www.cjoint.com/c/HGljcZlEcnR

  • yg_be

    j'ai partiellement testé Eport_DLT, cela me semble bien fonctionner.
    cela prend très longtemps, car ton onglet 2018 contient plus d'un million de lignes.
    j'ai testé l'élimination des doublons, je n'ai pas testé la copie vers le document Word, que je n'ai pas.

  • criscrof

    Je me permets de te joindre le doc (lighté) que j'ai nommé pour le test "Mon doc word" https://www.cjoint.com/c/HGlkOhlzZER

  • yg_be

    voici le document que j'obtiens en exécutant Eport_DLT:
    https://www.cjoint.com/c/HGlnWLkeaFr

  • criscrof

    C'est tout à fait ce que je recherche. Mais ça ne t'as pas collé en même temps les autres données dans la section "Liste des déclencheurs..."

  • yg_be

    je comprends peu ce que tu expliques. en #36, tu écris
    "c'est pour cela que ça me prends les doublons".
    quels doublons?

    souhaites-tu que le bouton "generate fsa" appelle les deux fonctions, Eport_DLT et Export_List?

  • criscrof

    Oublions cette phrase écrite en #36. Oui tout a fait, je souhaite que le bouton "generate fsa" appelle les deux fonctions, Eport_DLT et Export_List.

  • yg_be

    dans ce cas-là, faisons ainsi:
    - supprime la procédure Export_List dans "feuille 12 (Tableau de bord)"
    - remplace le contenu de Module1 par:

    Option Explicit  Public Sub Export_List() Dim WordApp As Word.Application Dim Worddoc As Word.Document  Set WordApp = New Word.Application Set Worddoc = WordApp.Documents.Open(ThisWorkbook.Path & "\Mon-doc-word.docm") WordApp.Visible = True  Call Export_TdB(Worddoc) Call Export_DLT(Worddoc)  Worddoc.Save Worddoc.Close Set Worddoc = Nothing Set WordApp = Nothing  End Sub Private Sub Export_TdB(Worddoc As Word.Document)  Dim lig1, vale lig1 = 18 While Not IsEmpty(ThisWorkbook.Sheets("TCD").Cells(lig1, 1))     If vale = "" Then     vale = ThisWorkbook.Sheets("TCD").Cells(lig1, 1).Text     Else     vale = vale & Chr(10) & ThisWorkbook.Sheets("TCD").Cells(lig1, 1).Text     End If lig1 = lig1 + 1 Wend  Worddoc.Bookmarks("Tableau_de_Bord").Range.Text = vale  End Sub Private Sub Export_DLT(Worddoc As Word.Document)  Dim nouveau As String, vale As String Dim lig1 As Long Dim sh As Worksheet Dim vu As New Scripting.Dictionary  Set sh = ThisWorkbook.Sheets("2018") For lig1 = 6 To sh.UsedRange.Rows(sh.UsedRange.Rows.Count).Row     nouveau = sh.Cells(lig1, 33).Text     If nouveau <> "" And Not vu.Exists(nouveau) Then         If vale = "" Then             vale = nouveau         Else             vale = vale & Chr(10) & nouveau         End If         Call vu.Add(nouveau, 0)     End If Next lig1 Worddoc.Bookmarks("DLT").Range.Text = vale  End Sub  

    - modifie le bouton "generate fsa" pour appeler la routine Export_List

  • criscrof

    ça ouvre une fenêtre : Erreur d'execution '91'
    Variable objet ou variable de bloc With non définie. ça me séléctionne en jaune la ligne 33 quand je débogue.

  • yg_be

    il faut peut-être adapter la ligne 8 et y faire:

    Set WordDoc = WordApp.Documents.Open("Mon doc word")

  • criscrof

    En faisant le changement ci-dessus, ça génère le word et me colle uniquement "Export_TdB". Et quand je ferme word sans l'enregistrer, le bouton "Generate FSA" s'enclenche et mon fichier excel (ne réponds pas) je clique sur la croix rouge pour fermer le fichier et j'ai la fenetre windows qui me demande si je veux fermer, redémarrer, etc le programme... je clique sur fermer le programme et il apparait la fenêtre Visual Basic que j'ai mis en pièce jointe... On est surement pas loin du résultat (surtout toi en fait!) merci pour ta patience

  • yg_be

    comme écrit en #39, cela prend très longtemps, car ton onglet 2018 contient plus d'un million de lignes.
    donc, quand tu penses que Excel ne répond pas, il est simplement en train de travailler sur tes lignes, sois patient.

  • criscrof

    D'accord, effectivement... oui ça fonctionne, avec la patience qui est une vertue ! mais le word apparait j'ai toujours les doublons (voir pj) colonne "DLT" et dès qu'excel a terminé de "travailler", le document word disparait de l'espace de traivail (voir pj aussi)... et quand je fais un tri via un segment et je génère le word, il colle toutes les données, comme si le tri ne fonctionnait plus, et (je reprends la phrase du dessus) dès qu'excel a terminé de "travailler", le document word disparait de l'espace de traivail...

  • yg_be

    je ne vois pas de doublon, quelle valeur est en double?
    supprime (ou met en commentaire la ligne

    WordDoc.Close
    si tu veux que le document reste ouvert.
    à propos de "comme si le tri ne fonctionnait plus": je suppose qu'il s'agit d'un filtre, pas d'un tri. a-t'il jamais fonctionné (dans exportation vers Word)?

  • criscrof

    je joins le word car tu ne pouvais pas les voir avec la capture de tout à l'heure. Sinon, oui, il s'agit d'un filtre disponible dans chaque segment (de l'onglet Tableaux de Bord) qui fonctionnait avant. https://www.cjoint.com/c/HGnkSRwH2jR

  • yg_be

    il ne s'agit pas de doublons. comme tu as écrit ta logique, tu ajoutes chaque fois du texte dans le document Word, qui se met avant le texte qui y existait.
    et tu écris que, quand tu utilisais le filtre, on n'exportait dans Word que le contenu filtré, et que maintenant cela ne fonctionne plus?

  • criscrof

    d'accord, je commence à comprendre ce qui se passe. je voudrais laisser mon doc word comme template (vierge) et que ça me propose "enregistrer sous" . Je dois le mettre en "lecture seule" ou est-ce une autre fonction dans word ?
    Du coup, je vais tester à nouveau les filtres avec un doc vierge. Lundi seulement... bon week end !

  • criscrof

    Du coup, j'ai pu faire un essai avec les filtres, ça fonctionne très bien ! Merci beaucoup ! Juste deux petites choses si je peux me permettre. La première est, ce que je te demande dans le post ci-dessus #54 pour le doc word. La deuxième chose, j'ai filtré (voir pj) via mon tableau de bord 1er segment en haut à gauche) et il me sort toute la liste des DLT (sans les doublons bien sûr maintenant) mais j'aurai souhaité qu'il me colle uniquement les DLT filtrées c'est à dire seulement les deux du segment DLT MSM, c'est possible ? Merci !


  • yg_be

    si tu souhaites exporter le contenu du segment DLT MSM, alors je suggère ceci:

    Private Sub Export_DLT(Worddoc As Word.Document) Dim vale As String, nouveau As String Dim sl As SlicerItem Dim sc As SlicerCache Set sc = ThisWorkbook.SlicerCaches("Segment_DLT_MSM") For Each sl In sc.SlicerItems     If sl.HasData Then         nouveau = sl.Name         If vale = "" Then             vale = nouveau         Else             vale = vale & Chr(10) & nouveau         End If     End If Next sl Worddoc.Bookmarks("DLT").Range.Text = vale  End Sub

    en ce qui concerne ta question en #54 à propos de Word, je suggére que tu postes cela comme une nouvelle question: d'autres t'aideront sans doute mieux que moi à ce sujet.

  • criscrof

    Bonjour,
    La macro fonctionne très bien.
    Je te remercie beaucoup pour ce très gros coup de main, ainsi que la patience que tu as pu avoir pour répondre à l'ensemble des questions posées... J'espère pouvoir à mon, un jour te rendre la "pareille" ! Sur Visual, ça risque d'être plus dur de rivaliser. En attendant à nouveau merci pour la transmission de tes compétences ! Bravo
    A bientôt !

  • yg_be

    content d'avoir pu t'aider. peux-tu marquer le sujet comme résolu, via la roue dentée à droite du titre?

  • criscrof

    oui bien sûr ! Merci encore

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed