Macro Excel pour envoyer un logo dans word

Bonjour à toutes et tous,

J'ai besoin d'un coup de main pour l'automatisation de contrats. Sur la partie "texte" tout est ok et fonctionne bien. J'en suis à l'envoi des logos selon le résultat d'une liste déroulante dans un formulaire.

En résumé, je voudrai que lorsque je sélectionne "Poule" dans la liste déroulante du userform, la sélection s'affiche dans excel et que l'image de la poule vient s'afficher dans le signet du document word.

L'un ou l'une d'entre vous peut m'aider ?

Vous pouvez faire l'essai avec le chien ou le chat hein !

Merci à vous

7testlogo.zip (556.41 Ko)

Bonjour Kalagan,

En première approche, je te propose :

Private Sub CdeAjout_Click()
    Const clogospath = "Logo"
    Const csignet = "LOGO"
    Const cdocname = "TestLogo.docx"

    Dim L As Long
    Dim oDoc As Word.Document
    Dim oDocBM As Word.Bookmark
    Dim oDocRange As Word.Range
    Dim sPictureName As String
    Dim sSaveBookmarkText As String
    L = 8

    While Not IsEmpty(Cells(L, 9))
    L = L + 1
    Wend

    Cells(L, 9) = CboxAnimal.Text

    sPictureName = ThisWorkbook.Path & "\" & clogospath & "\" & CboxAnimal.Text & ".jpg"

    Set oDoc = Word.Documents.Open(ThisWorkbook.Path & "\" & cdocname)
    Set oDocBM = oDoc.Bookmarks(csignet)

    Set oDocRange = oDoc.Bookmarks(csignet).Range
    With oDocRange
        sSaveBookmarkText = .Text
        .Text = ""
        .InlineShapes.AddPicture _
                Filename:=sPictureName, LinkToFile:=False, _
                SaveWithDocument:=True
        .Bookmarks.Add (csignet)
        .Text = sSaveBookmarkText
    End With
    oDoc.Save
    oDoc.Close

    Set oDoc = Nothing
End Sub

Bonjour Gérard,

Tout d'abord, mille merci pour ta proposition. Je suis en train de la tester, mais sans succès

J'ai un message d'erreur "Erreur de compilation : Type défini par l'utilisateur non défini".

J'ai complété ainsi :

Const clogospath = "Chemin du dossier contenant les images\"

Const csignet ="LOGO"

Const cdocname ="Chemin du dossier contenant le fichier word\XXXX.docx"

Via le débogeur, "Private sub CdeAjout_ Click () se surligne en jaune

et la déclaration de la variable "Dim oDoc as Word.document se surligne en bleu.

Je n'ai jamais utilisé les constantes "Const", d'où peut être une mauvaise utilisation de ma part.

Peux tu m'aider ?

Merci à toi

Bonjour Kalagan,

As-tu bien référencé la classe WORD dans le projet VBA ? :

image

Oui, la référence est bien activée.

En ajoutant les chemins, je n'ai plus de message d'erreur et le mot "chien" s'affiche bien dans le tableau excel via le formulaire mais rien ne passe du coté de word

Encore un peu d'aide ?

Bonjour Kalagan,

Peux-tu partager ton code?

Bonjour Gérard,

En soit je n'ai pas modifié le tien, j'ai juste essayé d'indiquer les chemins vers le fichier word et le dossier contenant les logos. Voici mon fichier avec le dernier essai, toujours sans résultat.

Merci encore pour l'aide que tu m'apportes

4testlogo.xlsm (21.87 Ko)

Kalagan,

Je te propose de rectifier l'affectation de la variable sPictureName de la façon suivante :

image

Bonjour Gérard,

J'ai modifié suivant ta proposition et je me suis retrouvée avec une erreur sur "Cells (L,3) = CboxAnimal.Text

J'ai donc désactivé le comptage de la dernière ligne du tableau pour tester avec la cellule C9 mais j'ai à nouveau cette erreur.

J'ai aussi essayé en remplaçant .Text par .Value, mais sans succès

Sais tu pourquoi ?

capture d ecran 2024 01 31 163731
Private Sub CdeAjoutLogo_Click()

    Const clogospath = "Logo"
    Const csignet = "LOGO"
    Const cdocname = "TestLogo.docx"

    Dim L As Long
    Dim oDoc As Word.Document
    Dim oDocBM As Word.Bookmark
    Dim oDocRange As Word.Range
    Dim sPictureName As String
    Dim sSaveBookmarkText As String
    'L = 8

    'While Not IsEmpty(Cells(3, 9))
    'L = L + 1
    'Wend

    Cells(9, 3) = CboxAnimal.Text

    sPictureName = "C:\Users\cbailleux6\Desktop\ContratEnseignement\TestLogo\Logo" & CboxAnimal.Text & ".jpg"
    Set oDoc = Word.Documents.Open(ThisWorkbook.Path & "\" & cdocname)
    Set oDocBM = oDoc.Bookmarks(csignet)

    Set oDocRange = oDoc.Bookmarks(csignet).Range
    With oDocRange
        sSaveBookmarkText = .Text
        .Text = ""
        .InlineShapes.AddPicture _
                Filename:=sPictureName, LinkToFile:=False, _
                SaveWithDocument:=True
        .Bookmarks.Add (csignet)
        .Text = sSaveBookmarkText
    End With
    oDoc.Save
    oDoc.Close

    Set oDoc = Nothing
End Sub

Bonsoir Kalagan,

Peux-tu vérifier que le nom de la liste déroulante dans le formulaire 'UserForm1' est bien 'CboxAnimal' ?

D'autre part, je te signale que tu as oublié un '\' dans l'affectation du chemin de l'image à envoyer vers Word :

Ce que tu as dans ton code :

image

Ce qu'il faudrait avoir :

sPictureName = "C:\Users\cbailleux6\Desktop\ContratEnseignement\TestLogo\Logo\" & CboxAnimal.Text & ".jpg"

Bonjour Gérard,

Merci encore pour ton aide.

J'ai rectifié tel que proposé, mais rien de change : j'ai toujours la même erreur sur la ligne :

With Cells(L, 9) = CboxAnimal.Text

Je n'arrive à comprendre d'où vient le problème

Bonjour Kalagan,

  • Tu as renommé la procédure correcte en 'CdeAjoutLogo_Click'. Mal joué Kalagan. Après suppression de la procédure nommée actuellement 'CdeAjout_Click' qui ne sert à rien, renommes la bonne en 'CdeAjout_Click'.
  • Puis, tu compiles : image
  • Cette procédure, tu ne peux l'exécuter directement depuis le VBE puisqu'il s'agit d'une procédure évènement sur clic d'un bouton du formulaire. Tu ne peux la lancer que depuis le formulaire.

Bonjour Géraard,

Merci encore pour ton soutien. Je ne comprends pas : pour générer le document jusqu'à présent, j'utilisai un module dédié, ce qui me permet d'insérer un bouton sur lequel j'ai affecté une macro directement sur la feuille de calcul

N'est il donc pas possible de procéder de la même manière pour insérer le logo dans le "bon" signet ?

Bonjour Gérard... et tout le monde !

J'ai enfin réussi à m'en sortir avec un "Select case", ce n'est surement pas ce qui a de plus "académique" mais cela fonctionne.

Je referais des tests avec tes codes, je ne baisse pas les bras pour autant.

Merci encore

Bien joué Kalagan, l’important est que tu trouves la bonne solution pour toi.

Rechercher des sujets similaires à "macro envoyer logo word"