Remplacer les noms par des images

Bonjour à tous

Dans un fichier excel j'ai une liste d'images ou de

photos sur la feuille1 ( Images).

Sur la feuille 2 (texte) j'ai un texte avec les noms

d'images ou des photos qui sont sur la feuille 1.

Je voudrai que sur une feuille 3 (résultat) reproduire le

texte et remplacer automatiquement les noms par les images

ou les photos qui leurs correspondent sur la feuille 1

Exemple:

Feuille 1 les images : A= photo de robert B= photo de jean

C=photo de marie D=photo de pierre

Feuille 2 le texte Le jour ou robert est venu avec marie

jean était avec pierre

Feuille 3 résultat Le jour ou A est venu avec B, C était

avec D

Si cela n'est pas possible sur excel est ce qu'on peut le

faire sur word.

Désolé, mais je ne sais pas comment insérer un fichier

Merci d'avance pour votre aide

Salut,

C'est possible de bricoler un truc mais au final excel n'est surement pas le mieux pour ce genre de chose hmm en effet

Quelques question pour aider à comprendre ta demande et peut être avoir plus de réponse:

Tu veux utiliser/exploiter le résultat de quel façon? une image ou un pdf en sortie t’irait?

Tu auras des grands textes?

Les images auront toutes le même format?

Bonjour

J'ai plusieurs textes assez longs dans lesquels sont inscrits des noms. Une cinquantaine de noms auxquels sont attachés des images. Pour chaque noms il y a une image format Gif. Dans un dossier toutes ces images sont répertoriées avec les noms correspondants.

Les images ont toutes le même format.

Je pensai le faire sur excel mais peut être que cela peut se faire sur word par rapport au texte.

J'ai joint un fichier exemple pour donner une idée du résultat soue word et exel, si cela peut être plus explicite.

Merci pour votre attention.

texte word

le plus propre et le mieux est surement dans le faire dans word oui mais personnellement je ne maitrise pas plus que ça (ou de créér un word depuis excel et de faire les manipulations mais la aussi faudrait de l'aide de quelqu'un d'autre)

Car dans word il y a la fonction Remplacer qui le fait très bien, il suffit de copier dans le presse-papier ton image et de faire un remplacer par

^c

qui apparemment reprends ce qu'il y a dans le presse papier (sous excel je n'ai pas réussi, si quelqu'un à une astuce cela règlerait le souci je pense ^^):

remplacement image

Tu peux le cas échéant le faire manuellement.

Je vais regarder sous word pour faire une macro, cela doit être un peu dans le même style qu'excel

Bonjour,

Sur Word, on peut bidouiller ça avec les Quickpart. On peut tout à fait programmer du texte qui viendra se mettre automatiquement, mais également des images. C'est très utile pour les signatures, les tampons, etc.

Dans ton cas, il faudrait insérer ton image, la sélectionner, aller dans insertion, quickpart, enregistrer à partir de la sélection. Puis comme nom du quickpart, tu mets le prénom que tu souhaites.

Dans ton document, il suffit d'inscrire le prénom et d'appuyer sur la touche F3 pour que ça se transforme (quand le curseur est encore contre ton texte). Il doit y avoir moyen de lancer ça par macro, mais ce n'est pas de mon ressort non plus.

Mais je peux chercher quand même un peu

j'ai un bout de code mais c'est pas mal de bidouille quand même, je finalise ça ce weekend mais faut voir si ça tient la route au final ^^

Bonjour,

Sub insère_quickpart_auto()
'
ActiveDocument.Range.Select
With Selection.Find
 .ClearFormatting
 .Text = "ins"
 .Execute Forward:=True
End With
 Selection.Range.InsertAutoText
End Sub

Bon, c'est de la bidouille, mais ça sélectionne le texte du document à la recherche du texte "ins" qui, pour moi, correspond à un quickpart. (ça pourrait être le nom "Pierre" relié à sa photo, pour toi)

Une fois qu'il a trouvé et sélectionné ce texte, il insère le quickpart associé.

À voir s'il y a moyen de générer les quickpart en masse (depuis Excel ? à partir d'un tableau Word ? Il prendrait l'image de la colonne 1 et créerait un quickpart au nom qui se trouve dans la colonne 2 ?)

Et ensuite, il faudrait boucler sur toutes les instances de tous tes quickparts ...

Si tu avances dessus, je veux bien ton retour d'expérience, ça peut-être intéressant !

Salut les gars et merci pour ce boulot.

Je n'ai pas tout compris (quickpart?? je ne connais pas) mais je vais essayer ce WE en feuilletant sur le net.

Je vais tester la macro enfin essayer de la tester.

Vous êtes plus sympa et plus rapides sur ce forum que les quelques autres que j'ai sollicités.

A plus tard

Re Joyeux noel

Bon j'ai appris à me servir de quickpart que je ne connaissais pas, déjà merci pour cette idée.

Je joins un fichier essai, ça fonctionne mais sans macro, donc il faut répéter la manipulation derrière chaque nom.

Je n'ai pas essayer ta macro mais je vais tenter .

Les textes que je vais avoir sont assez longs, les noms nombreux et ils se répètent souvent, donc 50 noms déjà c'est beaucoup de manipulations, mais quand ils se répètent je me vois mal cliquer sur alt F3 pour les remplacer LOL.

J'espère qu'on peut trouver une macro.

Enfin voilà j'ai un peu de temps (confinement oblige) même si ça doit se calmer lundi.

Cordialement

Bonjour Bobafric, le Forum,

Une 1ière version test sous Excel. Adaptable ensuite en fonction de phrases types à proposer.

Voir notes en rouge sur la 2ième feuille.

Bons tests, bonne continuation.

A nouveau,

Nouveau post, Intervention de certains numéros d'image dans le 1ier fichier.

Suite,

Version modifiée afin de masquer le texte sous l'image. Et d'éviter le débordement de texte lors du positionnement de l'image.

Salut tout le monde,

Je vois que des solutions sur excel ont été données, de mon coté j'ai continué mon bidouillage sur word, à voir ce que tu préfères ^^

En gros selon un formatage de document particulier je détecte les textes/images à remplacer.

J'ai mis un bouton directement dans le document, cela ouvre un userform qui vérifie qu'on a le bon nombre de texte et d'image dans le document (on peut aussi vérifier le nombre de caractère car faudra tester si tout est ok sur plusieurs essais si jamais tu utilises le fichier).

Si le texte/image n'apparait pas dans le document cela ne fait rien de spécial, donc tu pourrais y coller tes 50 textes/images une fois pour toute comme document de texte et juste faire des copier/coller du texte et lancer la macro (sans écraser le fichier par les images sont coupés dans le presse papier donc disparaissent du début du document, cf exemple ci-dessous)

A voir comment le presse papier va réagir sur des gros documents, je ne le vide pas actuellement

le fichier:

le code pour ceux qui n'ouvrent pas les fichiers:

Private Sub UserForm_Initialize()
Dim MON_SPLIT_DU_DOCUMENT As Variant
Dim BALAYAGE_SPLIT As Integer
Dim TEXTE_SPECIAL_DEBUT_TRADUCTION As String
Dim CREATION_TEXTE As String
Dim TEXTE_NOUVEAU_REMPLACEMENT As String
Dim BALAYAGE_LISTE As String

'on va reprendre le contenu du document que l'on découpe via le caractère délimiteur "/"
'en effet après test word change de lui même les images par des /, on aura donc ce caractère qui va délimiter les textes à remplacer automatiquement
'c'est aussi pour cela que je finis les phrases par un / pour qu'elle soit découpée automatiquement

'pour détecter un nouveau texte à remplacer, la ligne doit forcément commencer de la façon suivante:
TEXTE_NOUVEAU_REMPLACEMENT = "TEXTE:"
'le template de base pour ajouter un texte à remplacer par une image est donc du type "TEXTE: chaine_de_caractere image_word"
'peut importe le nombre d'espace, on les supprimes automatiquement

'on va détecter la fin des textes à remplacer via le texte ci-dessous spécialement fait qui indique la suite du document
'note: le / de fin n'est pas à détecter car une fois découpé via le split ce caractère n'existera plus
TEXTE_SPECIAL_DEBUT_TRADUCTION = "Copier le texte à traduire ci-dessous:"

'on récupère le split du document donc
MON_SPLIT_DU_DOCUMENT = Split(ActiveDocument.Content, "/")

'on va balayer le split depuis sa limite inférieure
BALAYAGE_SPLIT = LBound(MON_SPLIT_DU_DOCUMENT)

'tant que l'on ne détecte pas notre texte spécial qui détermine la fin des textes + images on continue
Do Until Right(MON_SPLIT_DU_DOCUMENT(BALAYAGE_SPLIT), Len(TEXTE_SPECIAL_DEBUT_TRADUCTION)) = TEXTE_SPECIAL_DEBUT_TRADUCTION

    'cas particulier, la première array du split sera la première phrase du document que l'on à remplit nous même:
    '"Renseigner les textes et leurs images associées ci-dessous:"
    'donc à ne pas prendre en compte
    If Not BALAYAGE_SPLIT = LBound(MON_SPLIT_DU_DOCUMENT) Then
        'on prends le texte du split
        CREATION_TEXTE = MON_SPLIT_DU_DOCUMENT(BALAYAGE_SPLIT)

        'avec les sauts de ligne/retour à la ligne des caractères spéciaux peuvent s'insérer en début de ligne, on va les supprimer automatiquement
        'on va donc supprimer le premier caractère tant qu'on ne tombe pas sur notre texte template d'un nouveau remplacment
        'pour rappel TEXTE_NOUVEAU_REMPLACEMENT = "TEXTE:"

        'de la même façon s'il manque des caractères ou qu'on a oublié de mettre un nom alors on va tout supprimer ce qui fera un texte vide
        Do Until Left(CREATION_TEXTE, Len(TEXTE_NOUVEAU_REMPLACEMENT)) = TEXTE_NOUVEAU_REMPLACEMENT Or CREATION_TEXTE = ""
            'on supprime le premier caractère
            CREATION_TEXTE = Right(CREATION_TEXTE, Len(CREATION_TEXTE) - 1)
        Loop

        'donc si la chaine n'est pas vide on l'ajoute dans la liste
        If CREATION_TEXTE <> "" Then
            'on supprime les espace
            ListeChaine.AddItem Replace((Right(CREATION_TEXTE, Len(CREATION_TEXTE) - Len(TEXTE_NOUVEAU_REMPLACEMENT))), " ", "")
            'on ajoute son nombre de caractère dans une deuxième liste, c'est surtout un crosscheck pour vérifer que la macro fonctionen bien
            'surtout avec des caractères spéciaux ou autre, y a surement des cas particuliers
            ListeLongueur.AddItem Len(ListeChaine.List(ListeChaine.ListCount - 1)) & " caractères"
        End If
    End If

    'on va sur le prochain split
    BALAYAGE_SPLIT = BALAYAGE_SPLIT + 1

    's'il manque le TEXTE_SPECIAL_DEBUT_TRADUCTION quelque part
    If BALAYAGE_SPLIT >= UBound(MON_SPLIT_DU_DOCUMENT) Then
        MsgBox "il manque le TEXTE_SPECIAL_DEBUT_TRADUCTION"
        End
    End If
Loop

'si on a autant de chaine de caractère à remplacer que d'image (-1 car le bouton compte pour un inlineshapes)
'dans le document tout est ok sinon on a un souci

'on affiche l'info
UserFormListe.LabelInfo.Caption = ListeChaine.ListCount & " chaines de caractères pour " & _
                                  ActiveDocument.InlineShapes.Count - 1 & " images dans le document"

'si tout est ok : en vert et le bouton qui s'affiche
If ListeChaine.ListCount = ActiveDocument.InlineShapes.Count - 1 Then
    UserFormListe.BoutonValidation.Visible = True
    UserFormListe.LabelInfo.BackColor = vbGreen
Else
    'sinon en rouge et le bouton caché
    UserFormListe.BoutonValidation.Visible = False
    UserFormListe.LabelInfo.BackColor = vbRed
End If

End Sub

Function REMPLACEMENT()
Dim BALAYAGE_LISTE As String

BALAYAGE_LISTE = 0

'on balaye toute les images du documents
For Each img In ActiveDocument.InlineShapes
        img.Select
        Selection.Cut
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
        'la première image du document sera donc en lien avec le premier texte de notre liste et ainsi de suite
        .Text = UserFormListe.ListeChaine.List(BALAYAGE_LISTE)
        .Replacement.Text = "^c" 'specifique pour reprendre le presse papier
        .Forward = True
        '.Wrap = wdFindContinue
        '.Format = False
        .MatchCase = True 'sensible à la casse : OUI
        .MatchWholeWord = True 'mot entier : OUI
    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    'on incremente notre balayage de la liste de texte
    BALAYAGE_LISTE = BALAYAGE_LISTE + 1

    'on s'arrête quand on a fait tout les textes à remplacer
    'pour rappel il y a le bouton qui est considéré comme une inlineshapes
    'cela ferait une erreur de boucler dessus
    If BALAYAGE_LISTE = UserFormListe.ListeChaine.ListCount Then
        Exit For
    End If
Next

End

End Function

screenshot exemple:

word1

quand on clique sur le bouton, le userform s'affiche:

word2

quand on valide la macro Remplacement se fait et on obtient:

word3

On voir bien que c'est donc sensible à la casse et au mot entier:

  • Pierre vs pierre
  • Pierre vs Pierrette

Si cela intéressent/donne des idées à certains de continuer sous word (je maitrise beaucoup moins qu'excel faut avouer, d'ou mon bidouillage pour détecter les textes/images), j'ai commencé par une autre idée plus simpliste et sécurisé à la base sans réussir à la finaliser:

On nomme directement les images avec les bons textes à recherche (c'est à dire "Pierre" pour l'image de pierre etc)

On les insères dans word

Via code on transformes les images en shapes pour avoir accès à leurs attribut dont le nom :

For Each iShape In ActiveDocument.InlineShapes
    iShape.ConvertToShape

Next

et après on peut donc boucler sur les shapes pour remplacer en cherchant le nom de la shape elle même (je le stock avant de la cut mais y a surement plus simple):

For Each img In ActiveDocument.Shapes
    img.Select
    NOM = img.Name
    Selection.Cut
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = NOM
        .Replacement.Text = "^c"
        .Forward = True
        .MatchCase = True
        .MatchWholeWord = True
    End With

    Selection.Find.Execute Replace:=wdReplaceAll

Next

Plus besoin de faire de lien entre texte et image vu que c'est l'image qui le porte.

Le seul souci qui ne fonctionne pas... ce sont les shapes qui ne sont pas alignés dans le texte, si quelques résous ce problème c'est jackpot car beaucoup plus rapide et simple : on insères les images, on colle le texte, on lance c'est finis en 15 lignes de code.

Edit 1: on ne check pas non plus les doublons dans la liste de texte à remplacer, c'est peut être une chose à faire

Edit 2: même si on a des "/" dans le texte à traduire cela n’impacte pas la macro avec le split

ECG

Merci X Cellus pour ta réponse que j'ai testée.

J'ai 2 ou 3 problèmes:

D'abord comme tu peux le voir sur le fichier joint, lorsque le nom se répète plusieurs fois dans la phrase l'image n'apparait pas à chaque fois,

J'ai essayé de changer les images sur la page image mais ce sont les premières qui réapparaissent ou bien il y a un message d'erreur de débogage.

Lorsque je vais introduire les cinquante images pour mon appli, faut il sauter une ligne entre chaque image, comme l'exemple A2 A4 A6 A8.

Merci pour ton aide et ton beau travail

Bonjour Bobafric,

Effectivement la 1ière version était réalisée avec 4 images seulement. J'avais commencé à tester avec la variable suf qui ajoute un suffixe au N° d'image. Ainsi par exemple Pierre pouvait avoir plusieurs images dans une feuille, soit image1, image1b, image1c ...etc...

J'attendais une réponse de ta part pour continuer sur ce sujet. Je télécharge ton récent fichier et te le renvoie dès que possible.

Je prévois de différencier les prénoms par un _ initial afin de pouvoir utiliser des phrases ou un prénom peut avoir un synonyme avec un objet ou plante (Iris, Violette) ... Exemple: Pierre qui roule n'amasse pas mousse dit_ Annie à _Pierre.

A suivre...

Re bonjour Cellus

Pour simplifier un peu, le texte sera ligne par ligne sur la feuille. C'est à dire qu'il n'y aura pas de répétition du même nom sur une ligne mais peut être sur la ligne suivante.

Bonjour les amis,

je vois que vous avez beaucoup travaillé et je vous en remercie.

J'ai essayé la solution sous word de ExcelCoreGame qui est intéressante.

Je l'ai testé en rajoutant 2 images et en l'appliquant sur plusieurs phrases où les noms se répètent, ça fonctionne une fois puis j'ai réessayé et l'userform ne m'affiche plus les 4 textes (voir fichier joint).L'autre problème c'est que lorsqu'on clique sur le bouton, dans mon premier essai réussi avec 4 images, celles que l'on insérées disparaissent et on est obligé de les réinsérer pour le texte suivant. Comme il y a cinquante images ça va être périlleux.

Je sais que je vous demande beaucoup de travail pardonnez moi.

Bonjour Bobafric,

En retour la version 4 du fichier Excel. Afin de gérer automatiquement l'ajout de photo(s) supplémentaire(s) du personnage si celle(s)-ci n'existe(nt) pas dans la feuille.

Ajout d'une feuille Direct qui permet d'écrire une phrase avec les prénoms des personnages. Puis les images de ceux-ci se placent directement suite la phrase terminée. A l'emplacement de la phrase.

Bons tests, bonne continuation.

Salut X Cellus

Merci ppour ton travail,le remplacament fonctionne et les images peuvent se répéter.

Peut on à partir de cette idée, faire ces remplacements sur plusieurs lignes par exemple si le texte prend un nombre indéfini de lignes.

Par exemple sur ton modèle de la ligne 23 à la ligne 28.

Ou si tu veux partout sur la feuille où on trouvera les noms.

Merci encore pour ton magnifique travail.

A nouveau,

Note que les images prennent de la place en hauteur. Donc avec la hauteur de ligne actuelle sur les feuilles de ton fichier.

Il faut espacer d'une ligne blanche (vide de texte) les phrases car sinon il peut y avoir chevauchement des images. Et cela ferait perdre de la lisibilité.

Avec une hauteur de ligne plus forte, adaptée à la hauteur de l'image, il n'y aura pas de souci de présentation.

Je vais faire une modification en ce sens.

A suivre...

Rechercher des sujets similaires à "remplacer noms images"