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
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?
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.
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
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 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 ?
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.
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.
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.
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...
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.
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 :
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
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...
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
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?
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
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.
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
ç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.
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
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.
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...
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)?
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
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?
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 !
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 !
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.
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 !
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.