Publipostage Image Word et regroupement
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
- Publipostage Image Word et regroupement
- Publipostage mail - Guide
- Supprimer une page word - Guide
- Espace insécable word - Guide
- Word et excel gratuit - Guide
- Organigramme word - Guide
8 réponses
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.
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
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.
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 }
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.
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
13 sept. 2024 à 17:31
J'ai l'impression que le includepicture et le if ne font pas bon ménage !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question13 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
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.
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
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
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.
13 sept. 2024 à 14:02
{ MERGEFIELD "LienImage" } : C'est le champ où le lien de l'image est stocké dans Excel.