Ajuster tableaux Excel a une page Word
Bonjour à tous,
Dans ma macro j'ouvre un document Word depuis Excel pour y coller des tableaux. Petit soucis : une fois les tableaux collés ceux-ci débordent de la page Word.
J'ai réussi à trouver plusieurs lignes de codes pour résoudre ce problème :
La 1ère, une fois le tableau collé dans le document Word :
docWord.Tables(1).AutoFitBehavior wdAutoFitWindow
où le chiffre 1 indique qu'on applique cette modification au 1er tableau de notre document Word).
la 2nde (obtenue sur un poste similaire sur ce site), qui colle le tableau en format image et l'ajuste directement à la page Word :
appWord.Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
Le problème est que j'aimerais coller ces tableaux sous un format "normal" et non un format image, ce qui me permet de remodifier des valeurs par la suite. Le second est que j'utilise un Userform en début de macro qui, selon le choix de l'utilisateur, va copier des tableaux différents a des endroits eux aussi différents de mon document Word et donc utiliser un index pour dire "réajuster les tableaux 5, 12, 45 et 62" ne serait sans doute pas la meilleure solution (surtout s'ils sont amenés a changer de place par le futur).
Voici un extrait de mon code actuel :
Code de l'Userform :
Private Sub OK_Click()
Macro
'Lorsque l'utilisateur clique sur le bouton "OK" de l'userform, on lance le module "Macro"
End Sub
Private Sub UserForm_Initialize()
ComboBox1.AddItem "Choix1"
ComboBox1.AddItem "Choix2"
End Sub
Voici un extrait simplifié du module "Macro" :
Option Base 1
Sub Macro()
Dim appWord As Word.Application
Dim docWord As Word.Document
Dim k As Integer
Dim p As Integer
Dim Tableau(173) As String 'Liste de signets déclarée dans le code et utilisée pour coller les tableaux Excel
Dim TableauActuel As String
Dim Plage1erChoix(35) As String 'Liste de plages Excel associées au 1er choix de l'userform
Dim Plage2emeChoix(143) As String 'Liste de plages Excel associées au 2eme choix de l'userform
Dim PlageActuelle As String
k=1
p=1
Tableau(1)="1er_signet"
'Liste de signets pour le collage des tableaux ici
Tableau(173)="dernier_signet"
Plage1erChoix(1)="1ère_plage"
'Liste de plages Excel ici
Plage1erChoix(35)="dernière_plage"
Plage2emeChoix(1)="1èreplage"
'Liste de plages Excel ici
Plage2emeChoix(143)="1èreplage"
Select Case UserForm4.ComboBox1.ListIndex 'En fonction du choix de l'utilisateur (Choix1/Choix2/Choix3/Choix4/Choix5) on va appliquer une des boucles suivantes :
Case 0 'Si l'utilisateur a choisi "choix 1"
Workbooks("MonClasseur").Worksheets("Feuille1").Activate
For t = 1 To 173 'Pour les signets des tableaux 1 à 173
If t = 1 Or t = 2 Or t = 3 Or t = 8 Or t = 9 Or t = 10 Or t = 11 Or t = 18 Or t = 19 Or t = 54 Or t = 55 Or t = 56 Or t = 61 Or t = 62 Or t = 63 Or t = 64 Or t = 71 Or t = 72 Or t = 107 Or t = 108 Or t = 109 Or t = 114 Or t = 115 Or t = 116 Or t = 117 Or t = 124 Or t = 125 Or (t >= 160 And t <= 167) Then
TableauActuel = Tableau(t)
PlageActuelle = Plage1erChoix(p)
Range(PlageActuelle).Copy
appWord.Selection.Goto What:=wdGoToBookmark, Name:=TableauActuel
appWord.Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
p = p + 1
Else: TableauActuel = Tableau(t)
docWord.Bookmarks(TableauActuel).Range.Text = Workbooks("MonClasseur").Worksheets("Feuille1").Range("Z1000") 'si l'on se situe sur les signets des tableaux associés au choix 2, je remplie le signet par la cellule "Z1000" qui est vide.
End If
Next
Case 1 'Si l'utilisateur a choisi "choix 2"
Workbooks("MonClasseur").Worksheets("Feuille1").Activate
For t = 1 To 173 'Pour les signets des tableaux 1 à 173
If t < 25 Or (t >= 26 And t <= 34) Or (t >= 39 And t <= 48) Or (t >= 54 And t <= 77) Or (t >= 79 And t <= 87) Or (t >= 92 And t < 102) Or (t >= 107 And t <= 130) Or (t >= 132 And t <= 140) Or (t >= 145 And t <= 154) Or t >= 160 Then
TableauActuel = Tableau(t)
PlageActuelle = Plage2emeChoix(p)
Range(PlageActuelle).Copy
appWord.Selection.Goto What:=wdGoToBookmark, Name:=TableauActuel
appWord.Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
p = p + 1
Else: TableauActuel = Tableau(t)
docWord.Bookmarks(TableauActuel).Range.Text = Workbooks("MonClasseur").Worksheets("Feuille1").Range("Z1000") 'si l'on se situe sur les signets des tableaux associés au choix 1, je remplie le signet par la cellule "Z1000" qui est vide.
End If
Next
End select
End sub
Merci pour votre aide !
bonjour
pas de VBA
dans Word, menu Insertion Objet (faut chercher)
navigue vers ton Excel
avec liaison
dans Word calibre l'affichage, il ne bougera plus par la suite en principe