Copier coller Excel vers word - mise en forme
Bonjour
Débutant en vba, j'essaie tant bien que mal de développer mes macros pour créer un fichier de dimensionnement produit pour mon boulot.
Une fois le dimensionnement réalisé, j'obtiens des valeurs sous excel que je renvoi dans une trame word afin d'éditer la fiche technique du produit correspondant.
J'ai réussi a réaliser les opérations d'ouverture de fichier word et de copier/coller à l'emplacement de signets définis dans les tableaux word. Deux problèmes persistent :
- lors du collage, j'aimerais que les valeurs prennent la mise en forme du tableau word
- lorsque la valeur est collée, ça m'ajoute un renvoi à la ligne qui agrandit de fait les cellules. J'aimerais qu'il n'y ait pas ce renvoi.
D'avance merci pour vos retours et votre aide
Benjamin
Bonjour,
Pour coller proprement une valeur quelconque dans un tableau Word (et éviter des retours-ligne), inutile de placer des signets dans les cellules du tableau.
Voici un exemple pour écrire "BlaBla" dans la cellule ligne 2 colonne 3 du 2ème tableau du doc (en gardant la mise en forme définie dans le doc) :
WordDoc.Tables(2).Cell(2, 3).Range.Text = "BlaBla"(nb : ici cell n'a pas de S à la fin ...)
"BlaBla" pouvant être remplacé par une expression du genre : Sheets("Machin").Range("B2").value
Et s'il s'agit de compléter le contenu de la cellule de ce tableau word :
WordDoc.Tables(2).Cell(2, 3).Range.InsertAfter "Blabla"Pierre
Bonjour
Tout d'abord merci pour votre retour rapide
J'ai essayé d'adapter le code à mon fichier en mettant dans ma macro excel :
Worddoc.Tables(1).Cell(2, 2).Range.Text = Sheets("FT SC 2500").Range("E5").ValueQuand je l’exécute, j'ai une erreur 424 objet requis.
J'avais ce type d'erreur avec mes premiers copier-coller car je ne mettais pas wordapp au début des lignes de code. J'ai donc fait quelques essais sur ce code, mais ils restent infructueux.
Bonjour,
Voici du code un peu plus complet :
Option Explicit
' ***********************************************************************
' ***** *****
' ***** CODE PierreP56 : http://tatiak.canalblog.com/ *****
' ***** *****
' ***********************************************************************
Public WordApp As Object, WordDoc As Object, Rng As Object
Sub Demo_Modif_Tableau_Word()
Dim Ndf As String, Num As Integer, i As Integer
Ndf = Word_A_Lire
If Fichier_IsOpen(Ndf) Then
Set WordApp = GetObject(, "Word.Application")
Set WordDoc = WordApp.Documents(Ndf)
Else
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(Ndf, ReadOnly:=False)
End If
WordApp.Visible = False
With WordDoc
' démo de modification du 3ème tableau contenu dans le doc
Num = 3
If Exist_Tableau(Num) Then ' test de l'existence du tableau n° 3
With .Tables(Num)
' suppression des lignes à partir de la 3ème ligne
For i = .Rows.Count To 3 Step -1
.Rows(i).Delete
Next i
' remplacement du contenu de la 2ème ligne
.cell(2, 1).Range.Text = "A1 lig 2 col 1"
.cell(2, 2).Range.Text = "B1 lig 2 col 2"
' ajout d'une 3ème ligne avec du contenu
.Rows.Add
.cell(3, 1).Range.Text = "A2 lig 3 col 1"
.cell(3, 2).Range.Text = "B2 lig 3 col 2"
End With
End If
End With
WordApp.Visible = True
Set WordDoc = Nothing
Set WordApp = Nothing
End SubPierre
PS et en bonus quelques unes de mes fonctions perso utiles ici :
Function Exist_Tableau(Num As Integer) As Boolean
Exist_Tableau = True
On Error GoTo errhdlr
With WordDoc.Tables(Num).cell(1, 1)
.Range.Text = .Range.Text
End With
Exit Function
errhdlr:
Exist_Tableau = False
End Function
Function Word_A_Lire() As String
ChDrive (Left(ActiveWorkbook.Path, 1))
ChDir ActiveWorkbook.Path
Word_A_Lire = Application.GetOpenFilename("Fichiers Word,*.doc;*.docx")
End Function
Function Fichier_IsOpen(ByRef ttk As String) As Boolean
On Error Resume Next
Open ttk For Input Lock Read As #1
Close #1
Fichier_IsOpen = (Err.Number <> 0)
End FunctionRe
J'ai réussi à ce que ça fonctionne en appliquant le code ci dessous
wordapp.ActiveDocument.Tables(1).Cell(2, 2).Range.Text = Sheets("FT SC 2500").Range("E5").ValueCa fonctionne super bien. Encore merci pour votre aide.
Dernière petite demande si vous voulez bien. J'ouvre un document word avec la macro mais il reste réduit à la barre des taches. Serait-il possible qu'il s'affiche en pleine page "devant" mon excel?
Nos messages se sont croisés. J'ai vu votre réponse après mon envoi. Je vais donc lire attentivement votre post.
Merci