Word (RESOLU) Code VBA pour actualiser étiquettes

Markotxe

XLDnaute Nouveau
Bonjour,
J'ai gravé une macro sur word afin de réaliser un publipostage d'étiquettes à partir d'une base de donnée qui se trouve dans un document Excel.
La macro de publipostage fonctionne, sauf qu'au final je n'ai qu'une étiquette par page... (il devrait y en avoir 4).
Après avoir refait plusieurs fois la macro et je me suis aperçu que l'action ''actualiser étiquettes'' n'était pas enregistrée...

Au vu des nombreux sujets qui traitent du publipostage par VBA, j'ai un peu honte de relancer un sujet comme celui-ci. Mais j'ai vraiment écumé le forum à la recherche de solutions, décharger de nombreux fichiers à la recherche d'alternatives adaptables mais sans succès.

Merci pour votre attention.

Markotxe
 

Markotxe

XLDnaute Nouveau
Bonjour,
Et un grand merci Staple 1600 de répondre si rapidement, oui, effectivement c'est balo de ma part de lancer un sujet sans y ajouter des informations complémentaires...
Voici donc la macro que j'utilise pour réaliser le publipostage. Étant donné qu'il s'agit d'un enregistrement de macro, je m'excuse d'avance (il y a surement beaucoup de choses inutiles).


Sub Macro1()
'
' Macro1 Macro
'
'
Processus de récupération des données sur Excel (sélection des destinataires)
ActiveDocument.MailMerge.OpenDataSource Name:= _ "/Users/susana/Desktop/challenge 2/Temps.xlsx", ConfirmConversions:=False _
, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:="", SQLStatement:="", SQLStatement1:=""


Copier/coller de l'étiquette modèle (insertion des champs)
Documents.Open fileName:="Modele fiches.docx", ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto
Selection.WholeStory
Selection.Copy
ActiveWindow.Close
Selection.PasteAndFormat (wdPasteDefault)

Mettre à jour les étiquettes. (insérer champ de fusion).
C'est cette opération que l'enregistrement de macro ne fait pas... (à mon avis)

Terminer et fusionner.
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.Execute
End With

End Sub

Resultat final: La macro se déroule sans message d'erreur mais il y a une seule étiquette par page au lieu de 4.

Encore merci de votre attention,
Cordialement.


 

Markotxe

XLDnaute Nouveau
Bonjour,
Je continue mes recherches et bon sang c'est frustrant!
- J'ai refait le processus depuis le début plusieurs fois (réalisations des étiquettes, mises en pages, vérifications de la source de donnée etc..) et j'aboutis toujours au même résultat.
- J'ai cherché sur le net un éventuel raccourci clavier pour ''cliquer'' la fenêtre ''mise à jour des étiquettes'' (On sait jamais...) mais apparemment ça n'existe pas... :mad:

Et puis je viens de m'apercevoir qu'après l'exécution de la macro:
- Il n'apparait donc qu'une étiquette par page au lieu de 4. (ça on le savait...)
- Mais aussi que les étiquettes nº2,3,4 n'apparaissent pas. Autrement dit que le publipostage ne prend compte qu'une étiquette sur 4... (ça c'est nouveau...)

Ce qui me fait penser que le problème vient peut-être d'une récupération des données sur Excel...
Vous en pensez quoi?

Du coup, je me lance dans une opération VBA récupération de donnée Excel depuis word. Ça va être tendu parce que je ne connais rien à rien au langage VBA mais rien à faire.
Je lache rien!

On se tient au courant...
a+
 

Staple1600

XLDnaute Barbatruc
Re

Chez moi ce code fonctionne
(et j'ai bien du mérite vu comment j'en ai ch-é ;))
VB:
Sub Mazcro1()
'
' Macro1 Macro
'
Dim base As String
base = "C:\Users\STAPLE\Documents\VBA_ESSAIS\basepub.xlsx"
Application.MailingLabel.DefaultPrintBarCode = False
Application.MailingLabel.CreateNewDocumentByID LabelID:="1359805912", _
Address:="", AutoText:="", LaserTray:=wdPrinterManualFeed, ExtractAddress _
:=False, PrintEPostageLabel:=False, Vertical:=False
With ActiveDocument.MailMerge
.MainDocumentType = wdMailingLabels
.OpenDataSource Name:=base, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\STAPLE\Documents\VBA_ESSAIS\basepub.xlsx;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Data" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
End With
ActiveDocument.Fields.Add Range:=Selection.Range, Type:= _
wdFieldAddressBlock, Text:= _
"\f ""<<_NICK0_" & Chr(13) & ">><<_COMPANY_" & Chr(13) & ">><<_STREET1_" & Chr(13) & ">><<_STREET2_" & Chr(13) & ">><<_POSTAL_ >><<_CITY_>><<" & Chr(13) & "_COUNTRY_>>"" \l 1036 \c 2 \e ""France"" \d"
WordBasic.MailMergePropagateLabel
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
    .FirstRecord = wdDefaultFirstRecord
    .LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End Sub
Faire les adaptations nécessaires: nom de fichier, chemin, type d'étiquettes.
(test OK sur Word 2013)
 

Staple1600

XLDnaute Barbatruc
Re

Une version un peu épurée
VB:
Sub Mazcro1()
Dim base As String
base = "C:\Users\STAPLE\Documents\VBA_ESSAIS\basepub.xlsx"
Application.MailingLabel.CreateNewDocumentByID LabelID:="1359805912", _
Address:="", AutoText:="", LaserTray:=wdPrinterManualFeed, ExtractAddress _
:=False, PrintEPostageLabel:=False, Vertical:=False
With ActiveDocument.MailMerge
.MainDocumentType = wdMailingLabels
.OpenDataSource Name:=base, _
    LinkToSource:=True, _
    Format:=wdOpenFormatAuto, _
    Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\STAPLE\Documents\VBA_ESSAIS\basepub.xlsx;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Data" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:=wdMergeSubTypeAccess
End With
ActiveDocument.Fields.Add Range:=Selection.Range, Type:= _
wdFieldAddressBlock, Text:= _
"\f ""<<_NICK0_" & Chr(13) & ">><<_COMPANY_" & Chr(13) & ">><<_STREET1_" & Chr(13) & ">><<_STREET2_" & Chr(13) & ">><<_POSTAL_ >><<_CITY_>><<" & Chr(13) & "_COUNTRY_>>"" \l 1036 \c 2 \e ""France"" \d"
WordBasic.MailMergePropagateLabel
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
    .FirstRecord = wdDefaultFirstRecord
    .LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End Sub
 

Markotxe

XLDnaute Nouveau
Bonjour à tous,
Désolé Staple 1600, j’ai trouvé la solution ce matin avant d’avoir lu votre message...
En premier lieu, je tiens à vous remercier sincèrement pour toute la peine que vous vous êtes donné. J’essaierai quoiqu’il arrive votre code et vous tiendrez au courant de ce qu’il en est. (C’est la moindre des choses).

Maintenant pour ceux qui pourraient être intéressé voici la solution:
- Avant pour la gravation de la macro du publipostage je suivais les étapes classiques du publipostage.
1- récupération des données Excel
2- saisie des champs.
3- mise à jour des étiquettes
4- Terminer et fusionner.
Résultat: 1 étiquette par page et disparition des étiquettes n°2,3,4...

La méthode qui marche:
1- Saisie des champs sur le doc de départ
2- récupération des données Excel.
3- Terminer et fusionner.
Résultat: Ça marche! 4 étiquettes par page, aucune disparition d’étiquettes.

En fait tout est dans conception du document d’origine dans lequel il faut pré-remplir tous les champs.
C’était tout bête mais fallait y penser...

Encore merci Stample, c’est bon de se savoir accompagner lors de la traversé du désert.
De toute façon, je vous tiens au courant pour votre macro.
 

Markotxe

XLDnaute Nouveau
Bonjour forum, bonjour Stample 1600,
Chose promise, chose due, j'ai donc testé votre Macro. Il m'apparait un message d'erreur "erreur de compilation".
J'ai surement manqué une étape importante dans les adaptations quoiqu'il en soit, étant donné que le problème est résolu en amont, ça n'est pas bien grave.

Merci encore pour votre soutient.
À bientôt. :)
 

Statistiques des forums

Discussions
315 091
Messages
2 116 117
Membres
112 665
dernier inscrit
JPHD