Publipostage Image Word et regroupement

NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024 - 13 sept. 2024 à 09:45
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 - 16 sept. 2024 à 18:45

Bonjour,

J'ai deux soucis de publipostage Word sous un format d'étiquettes 3*5 qui représente un petit trombinoscope avec des informations pour chaque personne :

1) j'ai utilisé un champ INCLUDEPICTURE pour insérer une image via un lien URL contenu dans mon fichier Excel et quand j'ai des étiquettes vides ça m'indique "Erreur ! nom du fichier non spécifié". Y a t-il un moyen de ne pas l'afficher j'ai essayé avec un champ IF mais du coup mon image ne marche pas

2) j'aimerais regrouper les étiquettes par service avec le nom du service affiché en haut de chaque page et un saut de page au changement de service. Pour l'instant à part éditer un publipostage différent par service je n'ai pas réussi.

Merci de votre aide.


Windows / Firefox 115.0

A voir également:

8 réponses

Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
13 sept. 2024 à 14:01

Bonjour,

Le champ INCLUDEPICTURE peut poser un problème lorsqu'il essaie de charger une image avec une URL vide ou incorrecte, ce qui génère l'erreur "Erreur ! nom du fichier non spécifié". Il est possible d'utiliser un champ conditionnel IF pour éviter l'affichage de cette erreur, mais cela nécessite quelques ajustements pour ne pas perturber l'insertion de l'image.

Modifiez la structure du champ IF : Utilisez un champ IF qui vérifie si le lien vers l'image est vide ou non. Si le champ est vide, rien ne s'affiche, sinon l'image est insérée.

La structure du champ ressemblera à ceci :

{ IF { MERGEFIELD "LienImage" } = "" "" "{ INCLUDEPICTURE { MERGEFIELD "LienImage" } \d }" }
 

Utilisez la combinaison des touches Alt + F9 pour basculer en mode "codes de champ" dans Word afin de pouvoir insérer manuellement ces champs, car les crochets { } ne peuvent pas être tapés directement. Ils doivent être insérés avec Ctrl + F9.

Une fois le publipostage terminé, vous devrez peut-être sélectionner tout le document (Ctrl + A) et appuyer sur F9 pour mettre à jour tous les champs et forcer l'affichage des images.


0
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
13 sept. 2024 à 14:02

{ MERGEFIELD "LienImage" } : C'est le champ où le lien de l'image est stocké dans Excel.

0
NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024
13 sept. 2024 à 15:07

Merci Bruno

Mais non justement j'ai déjà essayé et ça ne marche pas. Quand j'utilise un champ IF comme indiqué la photo ne se met plus à jour dans le document fusionné en faisant F9

0
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
13 sept. 2024 à 15:23

D'accord. Mais il existe peut-être une alternative avec l'ajout d'une image vide dans la base de données.


Si l'utilisation de macros n'est pas pratique pour toi, une autre solution consiste à ajouter un lien vers une image vide directement dans ta source de données (le fichier Excel). Ainsi, au lieu d'avoir des cellules vides dans le champ "LienImage", tu insères un lien vers une petite image transparente ou blanche que tu crées au préalable.

Par exemple, dans Excel, au lieu d'avoir des champs vides pour les personnes sans photo, tu peux remplacer les cellules vides par une URL vers une image blanche (comme C:\chemin\vers\image_vide.jpg).


Cette approche garantit que le champ INCLUDEPICTURE ne tombera jamais sur une URL vide, ce qui évite l'erreur sans nécessiter de champs IF supplémentaires.


0
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
13 sept. 2024 à 15:25

As-tu essayé l'utilisation d'un champ IF sans casser le lien de l'image.

Insertion des champs :

Utilise toujours cette structure de champ IF, mais sans directement encapsuler le INCLUDEPICTURE dans l'IF :

{ INCLUDEPICTURE { IF { MERGEFIELD "LienImage" } = "" "C:\\chemin\\vers\\image_vide.jpg" { MERGEFIELD "LienImage" } } \d }
 


0
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
13 sept. 2024 à 15:26

Ici, si le lien de l'image est vide, une image par défaut (par exemple, une image vide) est insérée.
Si le lien est valide, le champ MERGEFIELD insère l'URL de l'image réelle.

0
NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024
13 sept. 2024 à 17:29

Alors je viens d'essayer ça marche sauf que maintenant au lieu du message d'erreur c'est une photo qui s'affiche mais pas l'image vide... on avance

0
NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024
13 sept. 2024 à 17:31

J'ai l'impression que le includepicture et le if ne font pas bon ménage !!!

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024
13 sept. 2024 à 17:16

Je vais essayer ta réponse mais précision en fait ce ne sont pas des champs vides dans ma base de données j'ai systématiquement un lien c'est dans la planche d'étiquettes quand il n'y a plus de données c'est le champ includepicture qui affiche erreur dans les étiquettes vides restantes sur la page

0
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
13 sept. 2024 à 19:06

Personnellement, je n'aurais pas utilisé INCLUDEPICTURE qui est souvent capricieux, surtout lorsqu'il est combiné avec des conditions dans un publipostage.

Un script VBA est plus fiable et permet de contrôler le comportement des images de manière plus fine. 

Par contre, il faut préparer votre fichier Excel avant. Assurez-vous que dans votre fichier Excel, vous avez une colonne avec les URL des images, et que vous avez d'autres colonnes avec les informations nécessaires pour le publipostage.

Dans l'éditeur VBA, allez sur Insertion > Module pour créer un nouveau module.

Insérez le code suivant :

Sub InsertImages()
    Dim doc As Document
    Dim r As Range
    Dim imgPath As String
    Dim i As Integer
    Dim dataField As String
    Dim imageCell As Range
    
    ' Initialisation du document actif
    Set doc = ActiveDocument
    
    ' Parcourt tous les enregistrements du publipostage
    For i = 1 To doc.MailMerge.DataSource.RecordCount
        ' Aller à l'enregistrement en cours
        doc.MailMerge.DataSource.ActiveRecord = i
        
        ' Obtenir le lien de l'image depuis la source de données
        imgPath = doc.MailMerge.DataSource.DataFields("LienImage").Value
        
        ' Vérifier si le lien de l'image n'est pas vide
        If imgPath <> "" Then
            ' Sélectionner le champ ou la cellule où l'image doit être insérée
            Set r = doc.MailMerge.DataSource.DataFields("PositionImage")
            
            ' Supprimer le texte actuel si nécessaire
            r.Text = ""
            
            ' Insérer l'image dans la cellule ou à l'endroit spécifié
            doc.InlineShapes.AddPicture FileName:=imgPath, LinkToFile:=False, SaveWithDocument:=True, Range:=r
        End If
    Next i
End Sub

 Modifiez le code pour correspondre à vos besoins

LienImage fait référence à la colonne dans votre fichier Excel contenant les liens des images.


PositionImage représente l'endroit dans le document où vous souhaitez insérer l'image. Vous devrez peut-être adapter cette partie en fonction de la structure de votre document Word.

Ensuite allez sur Affichage > Macros > Afficher les macros, sélectionnez InsertImages, puis cliquez sur "Exécuter".

Avantages de cette méthode


Plus de flexibilité : Vous pouvez entièrement personnaliser où et comment les images sont insérées.


Meilleure gestion des erreurs : Si un lien est invalide ou manquant, la macro peut ignorer cette image sans provoquer d'erreur visible.


Pas de problème de mise à jour : Contrairement au champ INCLUDEPICTURE, qui nécessite souvent une mise à jour manuelle, la macro insère directement les images dans le document.


0
NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024
16 sept. 2024 à 08:47

J'ai déjà ce code dans ma macro VBA sur Excel pour lancer mon publipostage

Sub Publipostage()

    
 'Call AjouterReference
 
    Dim NomBase As String
        
    Dim appWord As Object
    Set appWord = CreateObject("Word.application")
    Dim docWord As Object
        
    
    ' Chemin vers le fichier Excel et le document Word
    NomBase = "G:\24-Bureautique\01-Gestion des projets\Nelly en cours\Sénateurs nettoyé.xlsm"
    Dim DocWordPath As String
    DocWordPath = "G:\24-Bureautique\01-Gestion des projets\Nelly en cours\Fusion 348 sénateurs tableau - nettoyé.docx"
    
    ' Créer une instance de Word
    Set appWord = CreateObject("Word.Application")
    appWord.Visible = True
    
    ' Ouverture du document Word
    Set docWord = appWord.Documents.Open(DocWordPath)
    
    ' Configuration du publipostage
    With docWord.MailMerge
        .MainDocumentType = 1
        
        ' Ouvrir la base de données Excel avec le bon pilote
        .OpenDataSource Name:=NomBase, _
            Connection:="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & NomBase & ";Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";", _
            SQLStatement:="SELECT * FROM [Base$] WHERE [Groupe_politique] = 'Les Républicains' ORDER BY Qualite DESC, Nom"
        
        ' Spécifier la fusion vers un nouveau document
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        
        ' Utiliser tous les enregistrements disponibles
        With .DataSource
            .FirstRecord = 1
            .LastRecord = -16
        End With
        
        ' Exécuter l'opération de publipostage
        .Execute Pause:=False
    End With
    
    
       appWord.Selection.wholestory
       appWord.Selection.Fields.Update
       
    ' Fermer le document source sans sauvegarder
    docWord.Close False
       

    ' Libérer les objets Word
    Set docWord = Nothing
    Set appWord = Nothing
    
    ' Activer la mise à jour de l'écran
    Application.ScreenUpdating = True

End Sub
0
NellyAblon Messages postés 7 Date d'inscription mercredi 11 septembre 2024 Statut Membre Dernière intervention 16 septembre 2024
16 sept. 2024 à 08:44

Super je vais essayer mais comment je spécifie l'endroit dans mon document word ?

j'avoue que là je suis perdue.

Mon but aurait été de remplir tous les champs via vba mais je suis un peu perdue... par exemple nom, prénom sachant que j'ai les colonnes dans mon fichier excel ainsi que la colonne "Photo" avec le lien URL de la photo

Merci infiniment pour votre aide

0
Bruno83200_6929 Messages postés 181 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 16 septembre 2024 30
16 sept. 2024 à 18:45

Bonjour,

Il faut utiliser les signets ou les champs de fusion (MergeField) pour spécifier l'emplacement où vous souhaitez insérer les images et les autres données.


Pour les images, vous pouvez utiliser un signet dans le document Word, et la macro utilisera ce signet pour insérer l'image à cet endroit.


Pour les autres données (nom, prénom, etc.), Word s'en occupera automatiquement via les champs de fusion standard.

Essayez plutôt avec cette macro modifiée :

Sub InsertImages()
    Dim doc As Document
    Dim imgPath As String
    Dim i As Integer
    Dim imageBookmark As Bookmark
    Dim mergeField As Field
    Dim nomField As Field, prenomField As Field
    
    ' Initialisation du document actif
    Set doc = ActiveDocument
    
    ' Lancer le publipostage, parcourir tous les enregistrements du publipostage
    For i = 1 To doc.MailMerge.DataSource.RecordCount
        ' Aller à l'enregistrement en cours
        doc.MailMerge.DataSource.ActiveRecord = i
        
        ' Obtenir le lien de l'image depuis la source de données
        imgPath = doc.MailMerge.DataSource.DataFields("Photo").Value
        
        ' Vérifier si le lien de l'image n'est pas vide
        If imgPath <> "" Then
            ' Vérifier si le signet pour l'image existe (par exemple "ImagePlace")
            If doc.Bookmarks.Exists("ImagePlace") Then
                ' Insérer l'image au niveau du signet "ImagePlace"
                Set imageBookmark = doc.Bookmarks("ImagePlace")
                
                ' Supprimer le texte actuel du signet (s'il existe)
                imageBookmark.Range.Text = ""
                
                ' Insérer l'image dans la position spécifiée par le signet
                doc.InlineShapes.AddPicture FileName:=imgPath, LinkToFile:=False, SaveWithDocument:=True, _
                    Range:=imageBookmark.Range
            End If
        End If
        
        ' Mise à jour des champs comme "Nom" et "Prénom" via le publipostage classique
        For Each mergeField In doc.Fields
            If mergeField.Type = wdFieldMergeField Then
                If InStr(mergeField.Code.Text, "Nom") > 0 Then
                    mergeField.Result.Text = doc.MailMerge.DataSource.DataFields("Nom").Value
                ElseIf InStr(mergeField.Code.Text, "Prenom") > 0 Then
                    mergeField.Result.Text = doc.MailMerge.DataSource.DataFields("Prenom").Value
                End If
            End If
        Next mergeField
    Next i
End Sub

Signet pour l'image :

La macro utilise maintenant un signet (nommé "ImagePlace") pour spécifier où l'image doit être insérée dans le document Word. Vous devez ajouter ce signet manuellement dans votre document Word à l'endroit où vous voulez que l'image apparaisse.

Champs de fusion (MergeFields) :

Pour insérer des données comme le nom et le prénom, vous pouvez ajouter des champs de fusion standards (MergeField) dans votre document Word. La macro les parcourt et remplace les valeurs des champs de fusion correspondants avec les données de la source.

Obtenir les données d'Excel :

La macro accède à vos colonnes dans Excel en utilisant doc.MailMerge.DataSource.DataFields("Nom de la colonne"). Vous devez vous assurer que les noms des colonnes dans Excel correspondent exactement aux noms utilisés dans la macro.

Miantenant il faut configurer le document Word :


Insérer un signet pour l'image :


Allez dans votre document Word.
Placez le curseur là où vous voulez que l'image soit insérée.
Allez dans l'onglet Insertion > Signet, puis nommez-le "ImagePlace".


Ajouter les champs de fusion :


Dans Word, allez dans l'onglet Publipostage > Insérer un champ de fusion.
Insérez les champs Nom, Prenom et d'autres colonnes que vous avez dans votre fichier Excel.

Lorsque vous exécuterez la macro, elle parcourra chaque enregistrement du publipostage, insérera l'image à l'emplacement du signet "ImagePlace" et remplira les autres champs (comme le nom et le prénom) avec les données provenant d'Excel.

Cela vous permettra de personnaliser votre document avec des images et des données pour chaque enregistrement du publipostage.


0