[RESOLU] Mise en page d'un tableau dans word à partir d'une macro excel

Togomy

XLDnaute Nouveau
Bonjour à tous et à toutes,

Voilà mon challenge:

Copie d'un tableau issue de excel dans un nouveau document word. → OK
Mise en page du tableau dans word pour qu'il rentre sur une seule page à partir de la macro → Non OK

Pourquoi mettre la mise en page dans la macro excel? tout simplement pour limiter les opérations dans le word et ainsi gagner du temps.

J'ai ajouté la librairie "Microsoft Word 12.0 Object Library" dans mes références.

Voici donc le code en question:

Code:
Sub test1()

'Création des Variables
Dim Gamme As Object
Dim WordFile As Object
Dim NewTextBox As Object
Dim NewTable As Object
Dim aTable As Object


'Selection des cellules non vides du classeur
ActiveSheet.UsedRange.Select
'Range("A1:AD44").Select

'Copie de la selection
Selection.Copy


'Création du document word
Set Gamme = CreateObject("Word.Application")        'Ouverture de word
Gamme.Documents.Add                                        'Creation d'une page

'Option du format de page et de mise en page du word
Gamme.WordBasic.PageSetupMargins Tab:=0, PaperSize:=0, TopMargin:="1", _
        BottomMargin:="1", LeftMargin:="1", RightMargin:="1", Gutter:="0", _
        PageWidth:="29.7", PageHeight:="21", Orientation:=1, FirstPage:=0, _
        OtherPages:=0, VertAlign:=0, ApplyPropsTo:=4, FacingPages:=0, _
        HeaderDistance:="1.25", FooterDistance:="1.25", SectionStart:=2, _
        OddAndEvenPages:=0, DifferentFirstPage:=0, Endnotes:=0, LineNum:=0, _
        CountBy:=0, TwoOnOne:=0, GutterPosition:=0, LayoutMode:=0, DocFontName:= _
        "", FirstPageOnLeft:=0, SectionType:=1, FolioPrint:=0, ReverseFolio:=0, _
        FolioPages:=1


'Fonction "coller"
Gamme.Selection.PasteSpecial


With Gamme.Selection.ParagraphFormat
        .SpaceAfterAuto = True
        .LineSpacingRule = wdLineSpaceSingle
        .WidowControl = True
End With
 


'Gamme.Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter      ' Fonction pour centrer le texte dans les cellules dans word
'Gamme.Selection.Rows.HeightRule = wdRowHeightAtLeast                     ' Fonction pour la hauteur des lignes
'Gamme.Selection.Rows.Height = CentimetersToPoints(0.1)                   ' Valeur minimale de la hauteur de ligne


Gamme.Selection.Tables(1).AutoFitBehavior wdAutoFitWindow                ' Fonction auto ajust du tableau dans la 


'Affiche le document word à l'écran
    Gamme.Visible = True
'Désactive le mode Copier/Coller
    Application.CutCopyMode = False
'Réactivation de la mise à jour de l'écran
    Application.ScreenUpdating = True


Set NewTextBox = Nothing
Set WordFile = Nothing
Set Gamme = Nothing


End Sub

Ce que je ne comprends pas c'est que les lignes de codes suivantes ne rendent aucunes erreurs mais c'est comme si elles n'étaient pas prises en compte. (Elles sont censées régler la hauteur de ligne)

Code:
With Gamme.Selection.ParagraphFormat
        .SpaceAfterAuto = True
        .LineSpacingRule = wdLineSpaceSingle
        .WidowControl = True
End With

et ensuite les lignes suivantes me donnent des erreurs d'exécution : "Le membre de la collection requis n'existe pas."

Code:
Gamme.Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter      ' Fonction pour centrer le texte dans les cellules dans word
Gamme.Selection.Rows.HeightRule = wdRowHeightAtLeast                     ' Fonction pour la hauteur des lignes
Gamme.Selection.Rows.Height = CentimetersToPoints(0.1)                   ' Valeur minimale de la hauteur de ligne

Voilà
Je suis donc bloqué dans ma démarche.
Comme il est possible que mes lignes de codes ne soient pas optimales, je redonne mon objectif: Modifier les hauteurs de lignes et la hauteur minimale de cellule dans un tableau word à partir d'une macro dans excel.

Je remercie par avance ceux qui accepteront le challenge. ;)
 
Dernière édition:

Togomy

XLDnaute Nouveau
Re : Mise en page d'un tableau dans word à partir d'une macro excel

Nan ! je ne me laisserai pas faire par une macro!! :mad:

Après une bonne nuit de repos et avec une tête reposée, je me suis repenché sur le problème et la solution m'est apparue. :cool:

Voici donc, pour ceux qui en auront le besoin le code pour:

1 - Selectionner un tableau
2 - Copier le tableau
3 - Ouvrir un nouveau document word
4 - Coller le tableau
5 - Faire la mise en page du tableau à partir de la macro excel

Code:
Sub test1()

'''''''''''' CREATION FICHIER WORD A PARTIR D'UN TABLEAU EXCEL ''''''''''''

' **ATTENTION** : Pour utiliser cette macro, ajouter la librairie : "Microsoft Word 12.0 Object Library"

'AIDE ET SOURCE : http://www.excel-downloads.com/forum/

'Création des Variables
Dim Gamme As Object
Dim WordFile As Object
Dim NewTextBox As Object

   
'Selection des cellules non vides du classeur
ActiveSheet.UsedRange.Select
'Range("A1:AD44").Select 'Solution bis pour la sélection

'Copie de la selection
Selection.Copy

'Création du document word
Set Gamme = CreateObject("Word.Application")                     'Ouverture de word
Gamme.Documents.Add                                              'Creation d'une page

'Option du format de page et de mise en page du word
Gamme.WordBasic.PageSetupMargins Tab:=0, PaperSize:=0, TopMargin:="1", _
        BottomMargin:="1", LeftMargin:="1", RightMargin:="1", Gutter:="0", _
        PageWidth:="29.7", PageHeight:="21", Orientation:=1, FirstPage:=0, _
        OtherPages:=0, VertAlign:=0, ApplyPropsTo:=4, FacingPages:=0, _
        HeaderDistance:="1.25", FooterDistance:="1.25", SectionStart:=2, _
        OddAndEvenPages:=0, DifferentFirstPage:=0, Endnotes:=0, LineNum:=0, _
        CountBy:=0, TwoOnOne:=0, GutterPosition:=0, LayoutMode:=0, DocFontName:= _
        "", FirstPageOnLeft:=0, SectionType:=1, FolioPrint:=0, ReverseFolio:=0, _
        FolioPages:=1

'Fonction "coller"
    Gamme.Selection.PasteSpecial

'Sélection du tableau créé dans word
    Gamme.Selection.Tables(1).Select

'Mise en page du tableau dans word afin qu'il passe sur une seule page
    Gamme.Selection.Rows.HeightRule = wdRowHeightAtLeast        'Hauteur de ligne positionnée sur : "huateur de au moins"
    Gamme.Selection.Rows.Height = CentimetersToPoints(0.1)      'Hauteur de ligne equivalente à : 0.1
    With Gamme.Selection.ParagraphFormat                        'Mise en forme paragraphe
        .SpaceBeforeAuto = False
        .SpaceAfter = 5
        .SpaceAfterAuto = True                                  'Espacement : Auto
        .LineSpacingRule = wdLineSpaceSingle                    'Espacement entre ligne : simple
        .LineUnitAfter = 0                                      'Espacement entre paragraphe : 0
    End With

Gamme.Selection.Tables(1).AutoFitBehavior wdAutoFitWindow       'Fonction auto ajust du tableau dans la page word


'Affiche le document word à l'écran
    Gamme.Visible = True
'Désactive le mode Copier/Coller
    Application.CutCopyMode = False
'Réactivation de la mise à jour de l'écran
    Application.ScreenUpdating = True


Set NewTextBox = Nothing
Set WordFile = Nothing
Set Gamme = Nothing


End Sub

Le problème était une histoire de selection pour la mise en page. Il a donc fallu ajouter une ligne de code pour selectionner le tableau dans word.
Comme quoi, il en faut peu pour être bloqué! :D

Merci en tout cas au forum où j'ai pu trouver de précieuses aides lors de la création du code.
 

Discussions similaires

Statistiques des forums

Discussions
312 025
Messages
2 084 742
Membres
102 651
dernier inscrit
Poppy-Stef