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

Macros et VBA Excel Discussion :

Export tableau Excel vers Word et adaptation de la taille à la page ? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    thermicien rémouleur
    Inscrit en
    Novembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : thermicien rémouleur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Export tableau Excel vers Word et adaptation de la taille à la page ?
    Bonjour à toutes et tous,

    C'est mon tout premier programme en VBA et tout premier post sur ce forum ! J'ai fait un peu de basic quand j'étais jeune et là, après avoir parcouru le site et le forum, je n'avance plus... Merci pour votre aide !

    J'ai tapé ce bout de code (il est juste après mes questions ; merci pour les posts et tutos qui m'ont bien aidé) ; il ne bugue pas ! Néanmoins je souhaite pouvoir (d'où le titre) ajuster automatiquement la taille des tableaux excel quand je les importe sur le signet du document word existant et ouvert et garder leur mise-en-page (couleur, bordure, arrière-plan) et là ça ne marche plus du tout...

    J'ai essayé :
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Selection.PasteAndFormat (wdPasteDefault)
    ; ça copie en format tableau et ajuste à la largeur de la page word mais dès que le tableau est trop haut (page A4), je perds la mise en page, les couleurs d'arrière-plan des cellules et les petites cases à cocher disparaissent.
    - du coup j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
    ; ça convertit en image le tableau mais je perds les bordures d'encadrement qui donnent un peu de rendu visuel aux tableaux...

    Le pire étant les 'cases à cocher' qui, avec wdPasteDefaut de PasteAndFormat deviennent affreuses, illisibles...

    Qu'est-ce que je peux faire ? Des suggestions de tutos ?

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    'VBA 7.0
    'Office 2010
    'Excel et Word v.14
     
    'Extraction de tableaux Excel (feuilles et formats différents) vers rapport Word (rapport-type : signets prémarqués) existant
    Sub ExtTabEW()
     
    'Lancement application Word
    'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils
    Dim aWord As Word.Application
    Set aWord = CreateObject("Word.Application")
     
    'Ouverture du rapport-type, rendu visible
    aWord.Documents.Open ("C:\Users\Utilisateur\Documents\Rapport_Type.docx")
    aWord.Visible = True
     
    'Copie Tableau 1 depuis Excel\Feuil1
    Sheets("Feuil1").Select
    Range("B5:C33").Select
    Selection.Copy
     
    'Cherche signet1 dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="signet1"
     
    'Colle Tableau 1 à signet1
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
     
    'Variantes Options de collage :
    '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word
    '- aWord.Selection.Paste
    '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow
     
     
    'Copie Tableau 2 depuis Excel\Feuil2
    Sheets("Feuil2").Select
    Range("C2:K19").Select
    Selection.Copy
     
    'Cherche signet2 dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="signet2"
     
    'Colle Tableau 2 à signet2
    'Option wdPasteEnhancedMetafile transforme le tableau en image pour redimensionnent manuel sous Word
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
     
    End Sub
    Merci encore

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour, bonjour !

    Ce qui est indiqué en gras n'existe pas dans le VBA d'Excel ‼

    Donc il y aurait certainement plus de chances d'obtenir une réponse dans celui dédié à Word, non ?!
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  4. #4
    Futur Membre du Club
    Homme Profil pro
    thermicien rémouleur
    Inscrit en
    Novembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : thermicien rémouleur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci de votre aide !

    >@ Kiki29 :
    J'ai vu ce post
    mais j'ai (au moins) 2 problèmes :

    -je souhaite aussi et surtout ajuster le tableau à la hauteur de la feuille.

    -je ne comprends pas les 2 arguments différents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim WordApp As Word.Application Dim WordDoc As Word.Document
    En essayant de m'en servir, je n'arrive pas à ouvrir mon fichier word pré-rempli (textes et signets d'insertion) avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordApp.Documents.Open ("C:\Users\Utilisateur\Documents\Rapport_Type.docx")
    Et la sélection du signet que j'opère ne semble plus valide... aWord ou WordApp ou WordDoc selon les définitions d'usage que je tente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="signet2"
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
    Mes questions et remarque après ce nouveau code. Il ne bugue pas mais ne dimensionne pas comme je veux la mise en page des tableaux une fois importée sous word :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    'VBA 7.0
    'Office 2010
    'Excel et Word v.14
     
    'Extraction de tableaux Excel (feuilles et formats différents) vers rapport Word (rapport-type : signets prémarqués) existant
    Sub ExtTabEW()
     
    'Lancement application Word et Ouverture du document type
    'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils
     
    Dim aWord As Word.Application
    Dim dWord As Word.Document
    Set aWord = CreateObject("Word.Application")
    aWord.Visible = True
    Set dWord = aWord.Documents.Open("C:\Users\Utilisateur\Documents\Rapport_Type.docx")
     
    'Copie Tableau 1 depuis Excel\Feuil1
    Sheets("Feuil1").Select
    Range("B5:C33").Select
    Selection.Copy
     
    'Cherche signet1 dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="signet1"
    DoEvents
     
    'Colle Tableau 1 à signet1
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
     
    'autres options de coller
    'aWord.Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
    'aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
    '"Placement:=wdInLine" permet de faire ça.
    '"Link:=True" lie les données au fichier Excel (=false supprime le lien)
     
    '"LockAspectRatio = msoTrue" conserve le rapport Hauteur/largeur
     
    aWord.Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
    DoEvents
    With dWord.InlineShapes(1)
            .LockAspectRatio = msoTrue
            .Height = 750 'redimensionne hauteur image
            '.Width = 510 'redimensionne largeur image
    End With
     
    'Copie Tableau 2 depuis Excel\Feuil2
    Sheets("Feuil2").Select
    Range("C2:K19").Select
    Selection.Copy
     
    'Cherche signet2 dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="signet2"
     
    'Colle Tableau 2 à signet2
    'Option wdPasteEnhancedMetafile transforme le tableau en image pour redimensionnent manuel sous Word
     
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
     
    With dWord.InlineShapes(1)
            .LockAspectRatio = msoFalse
            .Height = 750 'redimensionne hauteur image
            .Width = 510 'redimensionne largeur image
    End With
     
    End Sub
    Donc, depuis l'étape précédente, et les suggestions de lecture, je positionne les tableaux où je veux et j'accède aux paramètres de tailles et formats.

    Sauf que j'ai ici 2 tableaux. Je dimensionne le 1er tableau comme je veux ; ça le fait. Puis je dimensionne le 2ème tableau spécifiquement à sa taille initiale ; ça le fait MAIS aussitôt, ça redimensionne MON 1er TABLEAU avec les paramètres donnés pour le 2ème !!!

    Quand je dis "çà", ce n'est pas un clown avec une massue mais moi et mon bout de code !!!

    Help???? et merci d'avance

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

    Regarde un peu ton code:

    1er tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    aWord.Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
    DoEvents
    With dWord.InlineShapes(1)
            .LockAspectRatio = msoTrue
            .Height = 750 'redimensionne hauteur image
            '.Width = 510 'redimensionne largeur image
    End With
    Ce que tu prétends faire à ton 2e tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With dWord.InlineShapes(1)
            .LockAspectRatio = msoFalse
            .Height = 750 'redimensionne hauteur image
            .Width = 510 'redimensionne largeur image
    End With
    Je décode qu'il y a un 1 qui devrait être remplacé par un 2.

    inlineshapes() est une collection. Comme dans toute collection qui se respecte, chaque membre de la collection a son propre numéro. Comme dans toute collection qui se respecte, on ne peut pas traiter le second membre en appelant le premier.

    Copier-Coller quand tu nous tiens.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    thermicien rémouleur
    Inscrit en
    Novembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : thermicien rémouleur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci Clementmarcotte !

    Je ne suis qu'au stade du copier-coller en vba en ce moment, c'est vrai... C'est une façon d'apprendre pas-à-pas (je dis ça pour me rassurer) !

    J'hésite à mettre mon post en [résolu] vu que je ne trouve pas l'option pour centrer mes tableaux au milieu de la page...

    Qui décode car moi je déconne ?

    Merci d'avance et bon week-end à toutes et tous !

    ReB'

    Sur le site de microsoft je trouve ConvertToShape ; d'où ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dWord.InlineShapes(1).ConvertToShape
    dWord.Shapes(1).Left = wdShapeCente
    C'est génial, le 1er tableau est centré ! mais erreur sur le 2ème tableau à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With dWord.InlineShapes(2)
    Erreur 5941
    Le membre de la collection requis n'existe pas


    Je me doute un peu que Convertir mon 1er inlineshape en new floating shape ne permet plus de d'accéder à mon inlineshape(2)... et là je ne trouve plus rien...

    C'est la bonne piste le COnvertToShape ? Ou Ya plus simple pour centrer mes tableaux ? Ou centrer toute le document (ça m'irait aussi) ?

    D'avance merki

  7. #7
    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
    Citation Envoyé par loliv44 Voir le message
    ReB'

    Ou Ya plus simple pour centrer mes tableaux ? Ou centrer toute le document (ça m'irait aussi) ?

    D'avance merki
    Une fois le tableau collé dans Word. Enregistrer une macro pendant que tu centres ton tableau. Tu sélectionnes ton tableau et tu ajustes la taille du tableau et/ ou les marges. Une fois le code terminé, tu le raboutes à ta macro Excel en faisant les ajustements qui s'imposent à cause du pilotage par automation.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    thermicien rémouleur
    Inscrit en
    Novembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : thermicien rémouleur

    Informations forums :
    Inscription : Novembre 2014
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci clementmarcotte !

    J'ai compris ton idée que je découvre (oui je suis une bille en macro). Et je vais tenter tout ça !

    Je marque le sujet en résolu histoire de.

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

Discussions similaires

  1. Export tableau Excel vers txt
    Par TheRealMike dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2009, 08h53
  2. Exporter Tableau excel dans Word avec Visual Basic
    Par charfamine dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/03/2009, 16h21
  3. Export d'un tableau Excel vers Word
    Par Flo88 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/01/2009, 15h39
  4. export tableau excel vers word
    Par camzo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/10/2007, 18h53

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