Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2011, 11h37   #1
Membre régulier
 
Inscription : juillet 2010
Messages : 230
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 230
Points : 82
Points : 82
Par défaut copie de tableau Excel vers Word. probleme Avec pastespecial, tableau rogné (format portrait & paysage)

Bonjour,


J'ai une macro dans mon fichier excel qui a pour but de copier des tableaux excel pour les coller dans word. Cela me permet de créer un rapport que j'exporte au format pdf avec pdf creator.

Jusqu'a aujourd'hui tout se passait bien, j'ai environ 10 tableaux qui se copient dans mon document word. J'utilise la méthode des signets pour désigner l'emplacement de mon tableau.

voici le code que j'utilise :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
' Boucle sur 6 autres tableaux ( Titre B et les 2 premier Tab titre C)
'----------------------------------------------------------------------'
    For IndexSheet = indSheetCmd3 To indSheetCmd8 ' indSheetCmdX = constante contenant l'index d'une feuille
 
         ' Copie du tableau dans le presse papier
         Worksheets(IndexSheet).Range("B8:I40").Copy 
         ' Méthode Pastespecial ; colle le tableau sur le bon Indexsignet
         .Bookmarks("Signet" & IndexSignet).Range.PasteSpecial Link:=False, DataType:=wdPasteMetafilePicture, _
         Placement:=wdFloatOverText, DisplayAsIcon:=False
 
         ' Mise en forme du tableau dans word (centrer en autre)
         With .Shapes(IndexSignet)
            .LockAspectRatio = msoTrue
            .Left = wdShapeCenter
            .ZOrder msoBringInFrontOfText
         End With
 
         ' 
         IndexSignet = IndexSignet + 1
         Application.CutCopyMode = False
    Next IndexSheet
Dans ce rapport je dois rajouter 4 tableaux. Ils sont un peu plus large que les autres. J'ai utilisé le même code (cf ci dessus) pour les importer dans word. L'importation fonctionne mais "l'image" est rogné, il manque trois colonnes. Le format de la page lors de l'importation est en portrait. J'ai fais dérouler mon code pas à pas et le tableau est bien copier entièrement dans excel. Le problème vient donc du manque de place horizontalement. pastespecial ne colle que ce qu'il peut et "rogne le reste". Cela n'adapte pas l'image entièrement au format de page (ou alors je me trompe quelque part...). La solution est donc de passer en format paysage pour avoir une meilleur lisiblité du tableau. A ma grande surprise j'ai le même souci. L'image se colle comme si elle était sur un format portrait. La taille du tableau (ou de l'image tableau) collé est exactement la même que mes autres tableaux et elle est rogné

Je précise que c'est bien après avoir éxecuté pastespecial que cela se produit, le code de mise en forme (cf commentaire code) n'est pas la raison.

ce que j'aimerais obtenir :

1 - Que le tableau s'adapte au format paysage pour une meilleur lisiblité
2 - que l'ensemble du tableau soit collé.

j'ai trouvé ceci qui doit correspondre à mon problème (voir ce lien) :

Citation:
Inserts the contents of the Clipboard. Unlike with the Paste method, with PasteSpecial you can control the format of the pasted information and (optionally) establish a link to the source file (for example, a Microsoft Excel worksheet).

Note If you don't want to replace the contents of the specified range or selection, use the Collapse method before you use this method. When you use this method, the range or selection doesn't expand to include the contents of the Clipboard.
Il ya donc cette méthode colapse mais j'avoue ne pas vraiment cerner comment la mettre en place, bref je suis un peu perdu...

Si quelqu'un a une solution, voit pourquoi la méthode pastespecial réagi de cette facon, cela m'aiderai énormément car je suis bloqué...


Merci pour votre aide
Chagui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 12h41   #2
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 584
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 584
Points : 886
Points : 886
Bonjour

Cela ne va pas t'aider beaucoup mais j'ai remarqué qu'il semble y avoir une limite sur la taille d'un tableau Excel que l'on peut passer par copier coller.

Le collapse semble plutot utile quand un tableau diminue de taille.

Si on colle en image point (et non métafichier), on peut appliquer une réduction de taille pour tout voir.

Testé sur 2002 et 2010.
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 10h15   #3
Membre régulier
 
Inscription : juillet 2010
Messages : 230
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 230
Points : 82
Points : 82
Je réponds avec pas mal de retard...

J'ai trouvé la solution peu de temps après avoir lu ton message. J'ai utilisé wdPasteEnhancedMetafile et ca m'a permis de pouvoir redimensionner mes images importés

Ce qui donne au niveau de mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
         Worksheets(indSheetCmd26).Range("B7:H76").Copy
         IndexSignet = 18
         .Bookmarks("Signet" & IndexSignet).Range.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, _
         DisplayAsIcon:=False
 
         With .Shapes(IndexSignet)
            .LockAspectRatio = msoTrue
            .RelativeVerticalPosition = wdRelativeVerticalPositionLine
            .Left = wdShapeCenter
            .ZOrder msoBringInFrontOfText
            .Width = 350
         End With

Merci
Chagui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web