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

VBA Word Discussion :

Piloter le publipostage par VBA


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Piloter le publipostage par VBA
    Bonjour à tous,

    J'espère que vous pourrez m'aider : j'ai cherché partout (forums, FAQ, ...) mais je ne trouve pas de solution à mon problème ...

    Voilà : je souhaite automatiser le publipostage d'un document Word par une macro VBA.

    Pour cela, j'y arrive correctement en utilisant le code suivant (étant novice en VBA, ce code n'est peut-être pas très optimisé ...) :
    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 PilotPubli()
     
    'Construction du nom du fichier texte contenant les données.
    With ActiveDocument
           DocFus = .Name
           NomFus = .FullName
           PosExt = InStr(1, DocFus, ".doc", vbTextCompare)
           PosExt = PosExt - 1
           NomTxt = .Path & "\" & Left(DocFus, PosExt) & ".txt"
     End With
     
    With ActiveDocument.MailMerge
        'Mise en place du publipostage dans ce document (lettre type = '3')
           .MainDocumentType = 3
           .OpenDataSource NomTxt
        'Affichage du contenu des variables
           .ViewMailMergeFieldCodes = False
    End With
     
    End Sub
    Le fichier contenant les données (DataSource) porte le même nom que le document Word, mais avec une extension 'txt', et se trouve dans le même répertoire que le document Word. Voilà pour l'explication de la fabrication de la variable NomTxt.

    Lorsque la ligne '.OpenDataSource NomTxt' s'exécute, dans certains cas (je suppose que c'est fonction de ce qui se trouve dans le fichier txt), une fenêtre intermédiaire apparaît.
    Cette fenêtre me demande de confirmer les séparateurs de champs et séparateurs d'enregistrements.
    Dans mon fichier txt, ces séparateurs sont pourtant conformes car en cliquant sur 'OK', le publipostage fonctionne parfaitement.

    ==> existe-t-il une option à ajouter à la commande '.OpenDataSource' pour indiquer à Word qu'il ne doit pas me demander la confirmation des séparateurs ?

    Merci par avance de vos réponses !

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Même si ton code fonctionne, il manque beaucoup de choses.

    En VBA, il est préférable de déclarer les variables.
    Par exemple
    Pour la partie de code qui pose problème, tu peux toujours utiliser l'enregistreur de macro.

    Il y a aussi quelques tuto sur ce sujet.

    http://heureuxoli.developpez.com/off.../publipostage/
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci Heureux-oli pour ta réponse.

    Effectivement, il reste encore à faire pour que mon code soit écrit dans les règles.
    Je vais regarder pour cela ton tutoriel "Initiation au VBA Office".
    Au passage, un grand merci pour tous ces tutoriels qu'on peux trouver sur ce site : ils nous sont d'un grand secours ! ! !

    Pour revenir à mon problème, j'avais déjà utilisé l'enregistreur de macro pour écrire ce bout de code. Il génère ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument
        ActiveDocument.MailMerge.MainDocumentType = wdCatalog
        ActiveDocument.MailMerge.OpenDataSource Name:= _
            "C:\Courriers\Cword\Extrp.txt", ConfirmConversions:=False, ReadOnly:=False _
            , LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
            "", Revert:=False, Format:=wdOpenFormatAuto, Connection:="", SQLStatement _
            :="", SQLStatement1:="", SubType:=wdMergeSubTypeOther
    Mais ce code n'empêche pas l'affichage de la demande de confirmation des séparateurs, et je n'avais pas trouvé la possibilité d'ajouter une option qui pourrait l'empêcher.

    Cependant, à la suite de ton message, j'ai regardé l'aide de VBA d'un oeil nouveau !
    La commande 'OpenDataSource' possède, entre autres, une option nommée 'Format', qui permet de spécifier le format de ma source de donnée.

    L'aide parle notamment de :
    Pour spécifier un format de fichier externe, utilisez la propriété OpenFormat avec l'objet FileConverter, de manière à déterminer quelle valeur vous devez affecter à cet argument.
    ==> Sachant que ma source de données est un fichier texte généré par un outil externe à Word (Cobol), quel argument donner à l'option 'Format', ou plus précisemment, comment utilier la propriété OpenFormat avec l'objet FileConverter ?

    Encore merci pour ton aide !

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Précisions ...
    Bonjour,

    Je vois que ma question précédente n'a pas soulevé la foule
    Il est vrai que mon problème n'est pas simple

    Je vais essayer de poser la question autrement :

    Lors de la mise en place d'un publipostage Word en VBA, comment peut-on définir quels seront les séparateurs de champs et d'enregistrement ?

    Le code VBA qui permet de réaliser ce publipostage est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ActiveDocument.MailMerge.MainDocumentType = wdCatalog
    ActiveDocument.MailMerge.OpenDataSource Name:= _
            "C:\Courriers\Cword\Extrp.txt", ConfirmConversions:=False, ReadOnly:=False _
            , LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
            "", Revert:=False, Format:=wdOpenFormatAuto, Connection:="", SQLStatement _
            :="", SQLStatement1:="", SubType:=wdMergeSubTypeOther
    Dans certains cas, Word demande à l'utilisateur de confirmer ces séparateurs. Or, je ne souhaite pas que l'utilisateur ait à intervenir lors de la fusion : il faut qu'elle soit entièrement automatique.

    J'espère que cette question en inspirera plus d'un !

    Merci encore pour votre disponibilité

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Automatisation du publipostage Word en VBScript
    Salut à Tous,

    Je revient "à la charge" concernant ce problème que je n'ai toujours pas résolu.
    Il devient maintenant d'actualité pour moi et j'ai besoin de trouver une solution à mon blocage (affichage de la boite de dialogue pendant l'automatisation du publipostage sous Word, en VBScript).

    Citation Envoyé par Heureux-oli Voir le message
    Pour la partie de code qui pose problème, tu peux toujours utiliser l'enregistreur de macro.

    Il y a aussi quelques tuto sur ce sujet.

    http://heureuxoli.developpez.com/off.../publipostage/
    Merci pour ces propositions

    L'enregistreur de macro (j'y avais déjà pensé) ne m'a hélas pas donné de solution, et je n'ai rien trouvé à ce sujet dans les tuto

    Qui peut m'aider ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Bonjour a tous,
    Je me permet de me "gréffé" à ce post car je cherche a faire qqch de similaire mais je n'y connais mais alors rien du tout au VBA et lorsque je regarde les code marqué, c'est du chinois pour moi...

    J'ai développé un publipostage sous Word se basant sur une bas de donnée sur Excel pour generer automatiquement des étiquettes a imprimer selon un format bien particulié. J'ai fait le publipostage sous word et quand je clique sur publipostage/terminer/fusionner/imprimer les document, tout marche bien.

    Afin de faciliter l'utilisation de cette fonction, je voudrait faire une sorte de bouton "imprimer" (comme j'ai pu voir dans le dernier excel proposé) sur mon classeur excel pour que celui-ci lance directement le publipostage et l'impression, comme si je le faisait manuelle comme décrit ci dessus mais sans avoir a ouvrir le fichier word et de façon transparente pour l'utilisateur

    Je suppose qu'il faut juste adapter le code présenter ici mais je ne sais pas du tout comment. Pourriez vous me proposer un code qui pourrait rtéaliser ça?

    Merci d'avance pour votre aide

    Logan

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut J'ai eu et résolu le même souci
    Bonjour,
    si cela peut encore aider, j'ai eu récemment le même problème : affichage de la boîte de dialogue pendant l'automatisation du publipostage.
    J'ai passé de longues heures de recherche et ai trouvé peu de choses dans les forums ou sur le site MSDN, donc si mon expérience peut servir à d'autres...
    Il s'avère que dans mon cas le problème était dû à la présence d'une variable de fusion contenant le caractère "underscore" : "_". Dès que ce caractère a été supprimé du nom de la variable, la boîte de dialogue ne s'ouvrait plus et le publipostage se faisait sans souci.
    Ça peut être une piste pour votre cas : la présence de caractères indésirables dans des noms de variables, voire des données.


    Citation Envoyé par Microlog-PC Voir le message
    Salut à Tous,

    Je revient "à la charge" concernant ce problème que je n'ai toujours pas résolu.
    Il devient maintenant d'actualité pour moi et j'ai besoin de trouver une solution à mon blocage (affichage de la boite de dialogue pendant l'automatisation du publipostage sous Word, en VBScript).



    Merci pour ces propositions

    L'enregistreur de macro (j'y avais déjà pensé) ne m'a hélas pas donné de solution, et je n'ai rien trouvé à ce sujet dans les tuto

    Qui peut m'aider ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour
    Merci JyReV, Je suis passé fort heureusement à autre chose depuis 2010 , mais il m'arrive encore d'être confronté à ce genre de problèmes sur certaines installations.
    Je vais donc regarder de plus près le nom que nous donnons à nos variables.

    si cela peut encore aider
    ==> Oui, cela va m'aider


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Prob Publipostage Commandé par VBA
    Par quentin57 dans le forum VBA Access
    Réponses: 0
    Dernier message: 21/08/2009, 08h03
  2. Piloter le Publipostage avec Word en VBA
    Par Sinbad dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/10/2007, 07h14
  3. Faire une MAJ de recordsetclone par VBA.
    Par electrosat03 dans le forum Access
    Réponses: 4
    Dernier message: 03/02/2006, 17h42
  4. Imprimer des selections excel en pdf par VBA
    Par ouellet5 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2005, 17h29

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