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 :

Copy - Paste entre deux documents sans Activate


Sujet :

VBA Word

  1. #1
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut Copy - Paste entre deux documents sans Activate
    Bonjour à tous,

    J'ai développé un code qui transfère des zones de texte d'un document à un autre.
    Voici un résumé de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Y_S In Documents(Y_FileSource).Shapes
    	Y_S.Select
    	Selection.Copy
    	Documents(Y_FileCible).Activate
    	Selection.Collapse
    	Selection.Paste
    	Selection.Collapse
    	Documents(Y_FileSource).Activate
    Next Y_S
    Il remplit bien la fonction demandée : copier chaque zone de texte dans la source et la coller dans la cible.

    Je voudrait l'améliorer.
    Les zones de texte sont nombreuses et la succession de Activate pour passer alternativement de la source à la cible crée un effet pas très agréable à regarder (voir même inquiétant pour les utilisateurs) et ralentit sans doute le programme.

    Malheureusement, je n'ai pas trouvé comment faire des Copy et des Paste sur autre chose que des Selection.

    Existe-t-il un moyen de faire des Copy ou des Paste sur un document non activé ?
    Je suppose qu'il doit exister quelque chose du style :
    Documents(Y_FileSource).[...].Copy
    Mais, après m'être usé les yeux sur l'Aide et avoir essayé plusieurs méthodes infructueuses, je n'ai toujours pas trouvé de solution.

    Pourriez-vous m'aider ?
    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    J'ai trouvé un début de solution avec la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Y_S In Documents(FileSource).Shapes
    	Y_S.Select
    	Selection.Copy
    	Documents(FileCible).Range.Paste
    Next Y_S
    Seul problème : ça ne marche que pour la première page.
    Et j'ai besoin que cette copie se fasse pour tous les éléments de la première page mais aussi de la dernière page.

    J'ai essayé de déplacer le curseur du document cible avec le code suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Documents(FileCible).Activate
    ActiveDocument.Content.Select
    Selection.Collapse Direction:=wdCollapseEnd
    Documents(FileSource).Activate
    Le curseur se déplace effectivement sur la dernière page du fichier cible mais les shapes de la dernière page continuent à se copier sur la première.

    Je pense que le problème doit venir du Range qui précède le Paste. Il faut soit une autre propriété, soit une propriété supplémentaire qui signifie la position du curseur.

    Avez-vous une méthode pour résoudre ça sans avoir à activer le document cible systématiquement à chaque Paste ?

  3. #3
    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,

    Si c'est l'affichage qui pose problème, cache le.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.ScreenUpdating = False
    et True pour l'afficher à nouveau.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Merci pour ta réponse Oli mais depuis hier, je suis parvenu à trouver une solution en passant pas les onglets.

    Pour ceux qui pourraient rencontrer le même problème, je donne la solution que j'ai utilisée.

    Je place un onglet sur la dernière page de mon modèle (qui devient le document cible dans ma macro) et je copie avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Y_S In Documents(FileSource).Shapes
             Y_S.Select
             Selection.Copy
             Documents(Y_FileCible).Bookmarks("Onglet_PageFin").Range.Paste
    Next Y_S

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Pour ceux que ça intéresse, il existe une méthode encore meilleure, en utilisant des onglets prédéfinis comme \EndOfDoc ou \Section.

  6. #6
    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,

    Il y a encore mieux, ne pas passer par une sélection.

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Bin... justement, c'était tout l'objet de la question.
    La méthode Copy (ou la propriété Range) n'étant pas membre de l'objet Shape, comment faire sans passer par l'intermédiaire d'une sélection ?

  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,

    comme tu faisait les questions et les réponses tout seul, difficile de te donner une indication sur le voie à suivre. Et une de tes demandes était de ne pas montrer à l'écran les manipulations.

    Quand je mentionne le Range, ce n'est pas pour en faire une copie, mais l'utiliser tel quel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Copie de données entre deux feuilles sans doublons
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2013, 15h07
  2. Réponses: 4
    Dernier message: 09/11/2007, 18h08
  3. Réponses: 2
    Dernier message: 17/01/2007, 09h22
  4. [DOM] copie de noeuds entre deux documents distincts
    Par Oscar Hiboux dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/01/2007, 15h56
  5. jointure entre deux requete(sans doublant)
    Par nassu dans le forum Access
    Réponses: 1
    Dernier message: 10/04/2006, 11h26

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