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 :

Macro champs de fusion pour publipostage


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Macro champs de fusion pour publipostage
    Bonjour,

    Je cherche à faire une macro afin d'insérer des champs de fusion automatiquement entre mon document Word et ma base Excel sélectionnée.
    Dans mon document Word de base, j'ai le corps d'un mail avec des contrôles de contenu de texte enrichi pour chaque champs à personnaliser.
    Dans ma macro, je cherche donc à sélectionner un des contenus afin de lui attribuer un champ de fusion, mais je n'arrive pas à sélectionner les contenus de texte.
    J'ai essayé l'instruction suivante sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveDocument.MailMerge.Fields.Add Range:=SelectContentControlsByTitle("Nom_Client")(1).Range, Name:= _
            "Nom_Prenom"
    Sauriez-vous me dire ce qui bloque et comment y remédier svp? Je vous en remercie d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TheFlyingDutchman Voir le message
    Bonjour,

    J'ai du mal à comprendre la façon dont vous procédez. Vous souhaitez réaliser un publipostage traditionnel à partir d'une base Datasource ou piloter un document Word directement depuis Excel ?

    Dans ce dernier cas, vous pourriez utiliser des signets pour y placer vos données via une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            ' Création d'un nouveau Word à partir d'un modèle
            With DocAModifier
                 .Bookmarks("Ville").Range.Text = ShDonnees.Range("H" & Ligne)
                 .Bookmarks("Prénom").Range.Text = ShDonnees.Range("L" & Ligne)
                 .Bookmarks("Nom").Range.Text = ShDonnees.Range("K" & Ligne)
              End With
           ' Sauvegarde et fermeture du document

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour, merci de votre réponse.

    J'ai la base d'un mail sous Word, et je veux remplir certains champs personnalisés selon le destinataire à partir d'une base de données Excel qui tombe chaque semaine. J'ai trouvé qu'un simple publipostage à partir de mon document Word était le plus simple puisque lui ne changera pas.
    Je cherche juste à réussir à sélectionner un contenu de texte afin de lui attribuer un champ de fusion. J'ai essayé d'enregistrer une macro afin de voir la procédure pour appeler un contenu de texte, mais la souris est bloquée et je ne peux que me balader dans le Word avec les flèches.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TheFlyingDutchman Voir le message
    Je ne sais pas si cela peut vous aider :
    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
    22
    23
    24
    25
    26
     
    Sub TestModifierUnContentControl()
     
        ModifierUnContentControl ActiveDocument, "Nom_Client", "DUPONT Jean"
     
    End Sub
     
    Sub ModifierUnContentControl(ByVal DocEnCours As Document, ByVal Titre As String, ByVal Valeur As Variant)
     
    Dim I As Integer
     
        With DocEnCours
             If .ContentControls.Count > 0 Then
                For I = 1 To .ContentControls.Count
                    With .ContentControls(I)
                         If .Title = Titre Then
                            .Range.Text = Valeur
                            Debug.Print .Range.Text
                         End If
                    End With
                Next I
             End If
        End With
     
     
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Il n'existe pas une procédure plus simple lorsqu'on connaît le nom du contenu de texte? Quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ContentControls("NomDuContenuDeTexte").Select
    ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name="NomChampDeFusion"

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TheFlyingDutchman Voir le message
    Décidément, je ne vois pas ce que vous voulez faire. Lorsque vous réalisez votre traitement, vous connaissez la valeur à mettre dans le contentcontrol ? Ou bien vous cherchez à formater votre document avant d'injecter les données ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Désolé si je ne suis pas assez clair, je tente de ré-expliquer.

    J'ai un Word contenant le corps d'un mail, où certaines données doivent être personnalisées (ex: nom du client, adresse...). Ces champs sont toujours les mêmes, donc j'ai insérer des "contrôles de contenu de texte enrichi" là où j'aurai des informations à remplir.

    Les bases de données Excel sont générées automatiquement chaque semaine/mois, donc les colonnes portent toujours le même nom et contiennent les informations manquantes du mail (nom du client, adresse...).

    Mon but est de, chaque semaine/mois, ouvrir mon document Word contenant le template, lancer un publipostage, choisir les destinataires (qui est donc ma base de données Excel), puis lancer une macro qui va insérer les champs de fusion pour remplir le document Word à partir des données Excel.

    Donc ce que ma macro doit faire c'est sélectionner les contrôles de contenu de texte et leur affecter le champ de fusion qui correspond.

    J'espère avoir été plus clair

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TheFlyingDutchman Voir le message
    Sans vouloir vous vexer, ce n'est pas comme cela qu'on procède. Il faut paramétrer votre publipostage (voir l'aide en pas à pas dans le menu Publipostage) et insérer les champs comme dans ce vidage d'écran.

    Pièce jointe 595813

    Sinon, si vous voulez rester dans l'esprit de ce vous expliquez, il vous suffit de créer une boucle sur votre base de données comme expliqué dans mes précédentes réponses.

    Enfin, si je ne suis pas clair non plus, je ne pense pas avoir les compétences pour vous répondre.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Oui, j'ai bien compris ce que vous voulez dire. Mais dans ce cas je serais amené à faire tous les mois les mêmes manips (en d'autres mots, chaque mois je devrais insérer les champs de fusion manuellement). C'est ce que je veux éviter en faisant une macro qui va automatiquement donner la bonne valeur à chaque champ de fusion.

    J'espère que quelqu'un d'autre m'aura compris. J'aimerais simplement savoir si en VBA il est possible de coder une fonction qui permet d'affecter une valeur (string) à un contenu de texte (qui aurait pour nom admettons "Contenu1").
    D'où ma piste de réflexion vers quelque chose du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContentControls("Contenu1").Name="John Doe"
    Et donc j'aurais John Doe qui apparaît dans le contenu de texte (Contenu1)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TheFlyingDutchman Voir le message
    Oui, j'ai bien compris ce que vous voulez dire. Mais dans ce cas je serais amené à faire tous les mois les mêmes manips (en d'autres mots, chaque mois je devrais insérer les champs de fusion manuellement). C'est ce que je veux éviter en faisant une macro qui va automatiquement donner la bonne valeur à chaque champ de fusion.
    Ben non, si vous reprenez mon exemple en #2, le principe est de partir de votre table Excel, d'instancier un session Word, d'ouvrir votre modèle word et de déverser directement vos champs soit dans vos contentcontrols soit via les signets, voire directement dans un message Outlook en formatant votre message en html.

    Il y a des exemples sur les forums Word et Excel.

    Bon courage pour la suite.

  11. #11
    Invité
    Invité(e)
    Par défaut Maj de ContentControls dans un fichier Word à partir d'un tableau structuré
    Un exemple de génération de fichiers Word et de mise à jour de ContentControls à partir d'un tableau structuré sur mon blog Contentcontrols-transfert-donnees-dexcel-vers-word-word-vers-excel

Discussions similaires

  1. [WD-2003] Utiliser un champ de fusion publipostage pour nommer un document
    Par Paradiso dans le forum VBA Word
    Réponses: 1
    Dernier message: 07/10/2010, 22h44
  2. Nbre de champs de fusion dans Publipostage Word 2007
    Par JMLGGT dans le forum VBA Word
    Réponses: 1
    Dernier message: 12/12/2008, 17h16
  3. Réponses: 6
    Dernier message: 06/03/2007, 00h06
  4. [fusion avec word] fusion pour publipostage (suite)
    Par Christophe93250 dans le forum Access
    Réponses: 17
    Dernier message: 13/01/2006, 11h47
  5. [fusion avec word] fusion pour publipostage via le mail auto
    Par Christophe93250 dans le forum Access
    Réponses: 6
    Dernier message: 06/01/2006, 16h27

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