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 :

Comment copier un objet image d'un doc word vers un autre doc word


Sujet :

VBA Word

  1. #1
    Membre du Club
    Homme Profil pro
    profession libérale
    Inscrit en
    Octobre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : profession libérale
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 49
    Points : 43
    Points
    43
    Par défaut Comment copier un objet image d'un doc word vers un autre doc word
    Bonjour,
    j'ai un document word contenant des signets dans lesquels je voudrais placer des éléments provenant d'un autre document word (un répertoire avec noms, adresses... mais aussi des objets du genre photos ou logos : chaque élément est marqué par un signet). Avec le code suivant, j'arrive à prendre un contenu de type texte, mais ça ne fonctionne pas avec des objets de type inlineshapes (images de logos scannés par exemple).
    Deux problèmes à résoudre :
    * faire un copier-coller à partir du contenu d'un signet dans un document word vers un signet d'un autre document word
    * sélectionner une zone à copier dans le répertoire à partir d'un seul signet (économiserait la création de nombreux signets dans le répertoire)
    Merci d'avance si quelqu'un a une solution.
    Voici le code actuel :

    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
    Private Sub OK_Click()
    .............
     'on défini le chemin du répertoire des noms
     
    Dim AppWord As Word.Application
    Dim DocWord As Word.Document
    Dim x As Long
    Dim Repertoire As String
    Repertoire = "C:\...........\Repertoire.docx"
     
    'définit et ouvre une instance Word
    Set AppWord = New Word.Application 'set permet d'attribuer une valeur à une variable objet
    'Indiquez False pour garder l'application masquée
    AppWord.Visible = True
    'défini et ouvre le document Word
    Set DocWord = AppWord.Documents.Open(Repertoire)
     
       If DocWord.Bookmarks.Exists(SignetSource) = True And ActiveDocument.Bookmarks.Exists("SignetCible") = True Then
            ActiveDocument.Bookmarks("SignetCible").Range.Text = DocWord.Bookmarks("SignetSource").Range.Text
        Else
    End If
    Unload Me

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Pour les images, il faut prendre l'image contenue dans le range du signet.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveDocument.Bookmarks(1).Range.InlineShapes(1).Select
    Selection.copy
    Il ne reste qu'à coller l'image dans un autre document

  3. #3
    Membre du Club
    Homme Profil pro
    profession libérale
    Inscrit en
    Octobre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : profession libérale
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 49
    Points : 43
    Points
    43
    Par défaut
    Bonjour Heureux-oli,
    le problème est que le signet dans lequel on prend l'image n'est pas sur le document actif (visiblement, en utilisant select, on reste sur le doc principal là où le curseur se trouvait avant de lancer la procédure). C'est pour cela que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.Bookmarks("SignetCible").Range.Text = DocWord.Bookmarks("SignetSource").Range.Text
    (mais aussi parce que ça limite le volume du code).
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DocWord = ActiveDocument
    (où DocWord est le document dans lequel je prend les infos) pour voir si je peux utiliser la méthode select pour copier l'image, mais il faudrait alors repasser le doc principal en activedocument, ce que je n'arrive pas à faire.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    ActiveDocument n'es tjamais qu'un document de la collection.

    On peut nommer les documents et les utiliser avec leur nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim oDoc1 As Document
    Dim oDoc2 As document
     
    Set odoc1 = Documents.Open()
    Set odoc2 = Documents.open()
    http://heureuxoli.developpez.com/off...vba-word/#LIII

  5. #5
    Membre du Club
    Homme Profil pro
    profession libérale
    Inscrit en
    Octobre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : profession libérale
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 49
    Points : 43
    Points
    43
    Par défaut
    Bonsoir,
    nommer les documents ne me permet pas d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.goto,,,"MonSignet"
    dans un autre document que celui ouvert au départ ! Donc je ne peu pas faire de copier-coller à partir d'un document vers l'autre.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par darkvadave Voir le message
    Bonsoir,
    nommer les documents ne me permet pas d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.goto,,,"MonSignet"
    dans un autre document que celui ouvert au départ ! Donc je ne peu pas faire de copier-coller à partir d'un document vers l'autre.
    Tu viens juste de sélectionner une image, donc ta selection c'est ton image.

    Prends juste le temps de faire le petit effort d'ouvrir ton aide (cela ne donne pas la peste) à Document, membres de l’objet, et de t'apercevoir que tu peux appliquer GoTo à un document et pas seulement à une Selection. Donc tu changes (probablement) ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.goto,,,"MonSignet"
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autredocument.goto,,,"MonSignet"

  7. #7
    Membre du Club
    Homme Profil pro
    profession libérale
    Inscrit en
    Octobre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : profession libérale
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 49
    Points : 43
    Points
    43
    Par défaut
    Je ne sais pas si je doit rire ou pleurer. Merci quand même pour l'info, mais j'insiste : on ne peut pas sélectionner un signet et copier son contenu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docword2.goto,,,"SignetSource"
    ne fonctionne pas : j'ai un magnifique copier-coller de la zone où se trouve le curseur au moment où je lance la macro (et j'ai pris soins de vérifier que docword2 correspond bien à mon répertoire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox docword2.fullname
    = d'ici à dire que ça ne fonctionne pas, il n'y a (probablement) qu'un pas. Heureusement, je n'ai toujours pas la peste au vu du nombre d'articles que je consulte avant de poser une question dans le forum !

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Dans le bout de code que j'ai donné, on ne copie pas le signet mais l'image qu'il contient.
    en changeant de document, on change la sélection.

  9. #9
    Membre du Club
    Homme Profil pro
    profession libérale
    Inscrit en
    Octobre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : profession libérale
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 49
    Points : 43
    Points
    43
    Par défaut
    Toujours pas résolu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DocWord2.Bookmarks("SignetSource").Range.InlineShapes(1).Select
    Selection.Copy
    Selection.GoTo , , , "SignetCible"
    Selection.Paste
    J'ai effectivement une sélection de mon signet source, mais Selection.Copy s'applique à la sélection du document source puisque je constate que mon signet cible reçoit le texte situé au niveau du curseur (dans le doc principal qui contient le signet cible) au moment où on lance la macro.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/11/2013, 15h38
  2. [XL-2003] Comment copier coller des données à intervalle de temps régulier vers un autre classeur
    Par vincentdulabo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2012, 15h59
  3. Réponses: 1
    Dernier message: 16/10/2008, 19h49
  4. Réponses: 1
    Dernier message: 05/05/2006, 14h37
  5. Réponses: 1
    Dernier message: 25/03/2006, 14h45

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