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 :

Enregistrer les images à l'intérieur du fichier Word


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Enregistrer les images à l'intérieur du fichier Word
    Bonjour à tous !

    Je viens à vous car je rencontre un problème assez pénible avec un bout de code VBA depuis mon passage de Word 2007 à Word 2010.

    Sous 2007, le bout de code suivant fonctionnait parfaitement et me permettait d'inclure automatiquement toutes les images d'un document dans ce document (le fichier Word est généré par une autre appli qui enregistre les images séparément).

    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
        'First, embed all document images in Word file
        With ActiveDocument
            ' embed linked InlineShapes
            For idx = .InlineShapes.Count To 1 Step -1
                Set oILS = .InlineShapes(idx)
                If Not oILS.LinkFormat Is Nothing Then
                    oILS.LinkFormat.SavePictureWithDocument = True
                    oILS.LinkFormat.BreakLink
                End If
            Next
     
            ' embed linked Shapes
            For idx = .Shapes.Count To 1 Step -1
                Set oShp = .Shapes(idx)
                If Not oShp.LinkFormat Is Nothing Then
                    oShp.LinkFormat.SavePictureWithDocument = True
                    oShp.LinkFormat.BreakLink
                End If
            Next
        End With
    Sous 2010, j'obtiens l'erreur suivante :
    Run-time error '5352'
    The link does not exist.
    Après investigation, il semblerait que la méthode LinkFormat retourne désormais un objet en lecture seule (alors qu'en 2007 et avant, cet objet pouvait être modifié).

    Quelqu'un saurait comment contourner ce problème ou forcer l'objet LinkFormat à accepter les modifs ?

    D'avance merci !


    SP

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    A mon avis, la propriété LinkFormat renvoie un objet LinkFormat, comme avec 2007.

    Par contre, plutôt que de vérifier si Shape contient un objet LinkFormat, je pense qu'il serait préférable de vérifier son type. Ainsi, pour les inlineShapes, je remplacerais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not oILS.LinkFormat Is Nothing Then
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If oILS.Type = wdInlineShapeLinkedPicture Then
    Mais ce n'est qu'une idée, et peut-être pas la bonne!

    Cordialement,

    PGZ

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Hello ! Merci pour le coup de main

    J'ai déjà essayé cette astuce mais malheureusement cela ne résout rien.

    En fait l'objet LinkFormat retourné est bien valide, seulement il est retourné en "lecture seule" (alors qu'en 2007 il était en read/write). C'est ce que la doc officielle m'a confirmé d'ailleurs.

    Du coup je pensais utiliser ce bout de code pour supprimer chaque image et la remplacer par la même "embeddée" mais cela ne semble pas fonctionner non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        For Each InlineShape In ActiveDocument.InlineShapes
            If Not InlineShape.LinkFormat Is Nothing Then
                Set oILS = InlineShape
                fileName = ActiveDocument.Path & "/" & oILS.LinkFormat.SourcePath & "/" & oILS.LinkFormat.SourceName
                Set newInlineImage = ActiveDocument.InlineShapes.AddPicture(fileName, False, True, oILS.Range)
                oILS.Delete
            End If
        Next
    Tu aurais une idée ?

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour

    Citation Envoyé par Selpoivre Voir le message
    En fait l'objet LinkFormat retourné est bien valide, seulement il est retourné en "lecture seule" (alors qu'en 2007 il était en read/write). C'est ce que la doc officielle m'a confirmé d'ailleurs.
    Je suis très surpris par cette info . Quelle est cette doc officielle?

    Ce n'est pas du tout ce que je vois dans la doc Wd 2010 et d'ailleurs j'ai testé le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub testphoto()
    Dim oILS As Word.InlineShape
     
    For Each oILS In ThisDocument.InlineShapes
        If oILS.Type = wdInlineShapeLinkedPicture Then
            MsgBox oILS.LinkFormat.SourceFullName
            oILS.LinkFormat.SavePictureWithDocument = True
            oILS.LinkFormat.BreakLink
        End If
    Next oILS
     
    End Sub
    Et cela fonctionne très bien

    Je pense que le pb est ailleurs.

    Cordialement,

    PGZ

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    C'est l'aide en ligne qui m'affirme cela (celle qui s'affiche lorsque je fais F1)...

    J'ai essayé ton code (en remplaçant ThisDocument par ActiveDocument parceque ma Sub se trouve dans le Normal.dotm) mais j'obtiens toujours la même erreur

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Selpoivre,

    Citation Envoyé par Selpoivre Voir le message
    C'est l'aide en ligne qui m'affirme cela (celle qui s'affiche lorsque je fais F1)...
    Peux-tu copier le texte correspondant?

    C'est quelle ligne du code qui lève une erreur?

    Cordialement,

    PGZ

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    C'est la ligne suivante qui lève l'erreur "the link does not exist" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oILS.LinkFormat.SavePictureWithDocument = True
    Pour la doc, j'avoue que je me sens assez bête : je suis persuadé qu'hier elle indiquait "read boolean" ou quelque chose du genre. Là cette aprem elle indique effectivement bien Read/write
    Soit j'ai mal lu toute la journée d'hier soit c'était une typo corrigée entre temps...

    Encore merci pour ton aide !

  8. #8
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Citation Envoyé par Selpoivre Voir le message
    C'est la ligne suivante qui lève l'erreur "the link does not exist" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oILS.LinkFormat.SavePictureWithDocument = True
    Et tu as d'abord bien fait le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If oILS.Type = wdInlineShapeLinkedPicture Then
    ?

    A ce stade, il faut être très précis. Peux-tu donner ton code modifié en précisant la première erreur levée?

    Cordialement,

    PGZ

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    voilà mon code :

    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
    27
    Sub test()
        Dim oILS As InlineShape
        'Dim newInlineImage As InlineShape
        'Dim fileName As String
     
        Dim oShp As Shape
        'Dim newImage As Shape
     
        For Each oILS In ActiveDocument.InlineShapes
            MsgBox (oILS.LinkFormat.SourceFullName)
            If oILS.Type = wdInlineShapeLinkedPicture Then
                'MsgBox oILS.LinkFormat.SourceFullName
                oILS.LinkFormat.SavePictureWithDocument = True
                oILS.LinkFormat.BreakLink
            End If
        Next oILS
     
        For Each oShp In ActiveDocument.Shapes
            MsgBox (oShp.LinkFormat.SourceFullName)
            If oShp.Type = wdShapeLinkedPicture Then
                'MsgBox oShp.LinkFormat.SourceFullName
                oShp.LinkFormat.SavePictureWithDocument = True
                oShp.LinkFormat.BreakLink
            End If
        Next oShp
     
    End Sub
    La première erreur est levée à la ligne 13.
    Je ne sais pas si cela a une importance mais le code est situé dans le fichier Normal.dotm (je n'ai pas le choix, la méthode devra être appelée pour un paquet de fichiers différents) et le fichier sur lequel je travaille est un .doc (format 2003 normalement donc).

  10. #10
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Je viens de faire la manip :
    • je crée un .doc avec Wd 2000
    • Sur un poste Wd 2010, je mets la macro dans Normal
    • J'active le .doc et je lance la procédure

    AU résultat, cela fonctionne. Le code que j'utilise ne diffère que par l'endroit des MsgBox
    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
    Sub test()
        Dim oILS As InlineShape
        'Dim newInlineImage As InlineShape
        'Dim fileName As String
     
        Dim oShp As Shape
        'Dim newImage As Shape
     
        For Each oILS In ActiveDocument.InlineShapes
            If oILS.Type = wdInlineShapeLinkedPicture Then
                MsgBox oILS.LinkFormat.SourceFullName
                oILS.LinkFormat.SavePictureWithDocument = True
                oILS.LinkFormat.BreakLink
            End If
        Next oILS
     
        For Each oShp In ActiveDocument.Shapes
            If oShp.Type = wdShapeLinkedPicture Then
                MsgBox oShp.LinkFormat.SourceFullName
                oShp.LinkFormat.SavePictureWithDocument = True
                oShp.LinkFormat.BreakLink
            End If
        Next oShp
     
    End Sub La première erreur est l
    Tu rencontres la première erreur sur la ligne 13 de ton code. DOnc tu passes par un MsgBox en 10. Ca affiche quoi?

    PGZ

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Hello !

    Si je lance ton code sans le retoucher, j'obtient tout d'abords ce message :
    gif/Highlight.gif
    (ce qui correspond bien au chemin complet de la première image du document).

    Puis l'erreur suivante se déclenche sur la ligne oILS.LinkFormat.SavePictureWithDocument = True
    Run-time error '5352':
    The link does not exist.

  12. #12
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Je trouve ce chemin complet un peu court, pas très complet pour tout dire.Mais tu dis que c'est le bon.

    Je pense qu'on ne peut plus améliorer le code et que le pb est ailleurs.

    L'erreur semble indiquer qu'il n'y a rien au bout du lien sur la machine qui travaille. Il faudrait vérifier cela.

    Si ça ne donne rien, je te propose d'essayer sur une autre machine.

    PGZ

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Désolé pour le temps de réponse mais j'ai été pas mal accaparé par autre chose ces jours-ci...

    J'ai vérifié et il y a bien un fichier à cet emplacement relatif. Malheureusement je n'ai pas d'autre machine avec Word 2010 sous la main pour tester. Je vais essayer de dégager un peu de temps pour monter une VM et tester ça d'ici le début de semaine prochaine.

    Tu penses que ca pourrait venir d'un problème de paramétrage de Word sinon ?

  14. #14
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir

    Citation Envoyé par Selpoivre Voir le message
    J'ai vérifié et il y a bien un fichier à cet emplacement relatif.
    En l'occurence, c'est aspect relatif m'inquiète un peu. A ta place j'irais au bout des investigations dans ce sens...

    Cordialement,

    PGZ

Discussions similaires

  1. [WD-2010] modifier les images incluses dans un fichier word
    Par BernardBouree dans le forum VBA Word
    Réponses: 1
    Dernier message: 08/04/2015, 22h16
  2. Comment enregistrer les images plus simplement ?
    Par Gunner4902 dans le forum Windows XP
    Réponses: 15
    Dernier message: 31/07/2008, 20h35
  3. Réponses: 37
    Dernier message: 09/06/2008, 23h10
  4. Extraire les images contenues dans un fichier word
    Par elreybubu dans le forum Delphi
    Réponses: 2
    Dernier message: 25/10/2006, 13h07
  5. Comment enregistrer les images d'une page web ?
    Par Chris33 dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 11/07/2006, 22h09

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