Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Word Tableau...

5 réponses
Avatar
Lolo
Bonjour et merci pour votre aide...

Je souhaite créer et mettre en forme un fichier Word a partir d'excel.
Je souhaite ecrire du texte, inserer ensuite un tableau, puis de nouveau
écrire du texte et insérer un tableau ainsi de suite...
Je créé le document sans pb, je sais insérer du texte, insérer un tableau
mais dès que j'ai insérer un tableau je ne sais plus comment écrire au
dessous du tableau...l'autre création de tableau s'insère dans une cellule du
premier...

Le code de création d'un tableau...
Set MonRange = ActiveDocument.Paragraphs(6).Range

With MonWordAMoi.Application.Documents(1)
.Content.Tables.Add MonRange, 6, 6

.Content.Tables(1).AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2

.Content.Tables(1).Cell(1, 1).Range.Text = "toto 1-1"

.Content.Tables(1).Cell(1, 2).Range.Text = "toto 1-2"

End With

Si quelqu'un a une solution...

5 réponses

Avatar
Geo
Bonjour Lolo
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]
Bonjour et merci pour votre aide...

Je souhaite créer et mettre en forme un fichier Word a partir d'excel.
Je souhaite ecrire du texte, inserer ensuite un tableau, puis de nouveau
écrire du texte et insérer un tableau ainsi de suite...
Je créé le document sans pb, je sais insérer du texte, insérer un tableau
mais dès que j'ai insérer un tableau je ne sais plus comment écrire au
dessous du tableau...l'autre création de tableau s'insère dans une cellule du
premier...



Pour ajouter du texte en fin de document :
ActiveDocument.Range.InsertAfter "Texte à insérer" & vbCr

Et méfiez-vous des références absolues comme Documents(1), il suffit
qu'il y ait un autre document ouvert pour avoir un résultat un peu
décevant.

De même le dernier paragraphe d'un document est :
Doc.Paragraphs(Doc.Paragraphs.Count).Range

Le dernier tableau inséré est :
doc.Tables(Doc.Tables.count)

etc.

--
A+
Avatar
Lolo
Merci de ta réponse géo mais chui un chti peu bete ca marche pas...

Voici ce que je souhaite faire :
un texte
un tableau
un texte
un tableau

voici le code que j'ai pondu d'après tes exemples ...

' Ecriture avant le tableau I
ActiveDocument.Range.InsertAfter " Le tableau I "


' *** Tableau 1 ***
ActiveDocument.Range.InsertAfter ""
Set MonRange = ActiveDocument.Range


With MonWordAMoi.Application.Documents(1)
.Content.Tables.Add MonRange, 6, 6

.Content.Tables(1).AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2

.Content.Tables(1).Cell(1, 1).Range.Text = "toto 1-1"

.Content.Tables(1).Cell(1, 2).Range.Text = "toto 1-2"

End With

' Ecriture avant le tableau II
ActiveDocument.Range.InsertAfter " Le tableau II "


' Deuxième tableau

ActiveDocument.Range.InsertAfter ""
Set MonRange = ActiveDocument.Range

With MonWordAMoi.Application.Documents(1)
.Content.Tables.Add MonRange, 6, 6

.Content.Tables(1).AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2

.Content.Tables(1).Cell(1, 1).Range.Text = "toto 1-1"

.Content.Tables(1).Cell(1, 2).Range.Text = "toto 1-2"

End With


Le résultat : une erreur et la mise en forme n'est pas conforme ???




"Geo" a écrit :

Bonjour Lolo
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]
> Bonjour et merci pour votre aide...
>
> Je souhaite créer et mettre en forme un fichier Word a partir d'excel.
> Je souhaite ecrire du texte, inserer ensuite un tableau, puis de nouveau
> écrire du texte et insérer un tableau ainsi de suite...
> Je créé le document sans pb, je sais insérer du texte, insérer un tableau
> mais dès que j'ai insérer un tableau je ne sais plus comment écrire au
> dessous du tableau...l'autre création de tableau s'insère dans une cellule du
> premier...

Pour ajouter du texte en fin de document :
ActiveDocument.Range.InsertAfter "Texte à insérer" & vbCr

Et méfiez-vous des références absolues comme Documents(1), il suffit
qu'il y ait un autre document ouvert pour avoir un résultat un peu
décevant.

De même le dernier paragraphe d'un document est :
Doc.Paragraphs(Doc.Paragraphs.Count).Range

Le dernier tableau inséré est :
doc.Tables(Doc.Tables.count)

etc.

--
A+





Avatar
Geo
Bonjour Lolo
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]

Je me suis permis de reprendre le code à ma manière.
Comme j'ai eu la flemme de vérifier pour l'insertion des tableaux, j'ai
préféré utiliser la variable MonRange qui pointe momentanément sur la
fin du document.
Au moins, je suis certain que le tableau sera positionné à la fin.
On aurait pu faire la même chose pour mettre le texte, mais puisqu'on
était parti sur le InsertAfter, on voit deux solutions possibles pour
le prix d'une.
En tous cas, bravo pour l'utilisation des Range, quand on débute on est
tenté d'utiliser le point d'insertion et Selection.

Attention aux retours à la ligne ajouté par la messagerie.
N'hésitez pas à demander des explications.

Sub testTableau()
Dim MonRange As Range
Dim MaTable As Table
With ActiveDocument
' Ecriture avant le tableau I
.Range.InsertAfter " Le tableau I " & vbCr
' *** Tableau 1 ***
' Positionnement au fin de document
Set MonRange = .Bookmarks("EndOfDoc").Range
' Ajout d'une première table
Set MaTable = .Tables.Add(Range:=MonRange, numrows:=6,
numcolumns:=6)
MaTable.AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2
MaTable.Cell(1, 1).Range.Text = "toto 1-1"
MaTable.Cell(1, 2).Range.Text = "toto 1-2"

' Ecriture avant le tableau II
.Range.InsertAfter " Le tableau II " & vbCr
' Positionnement au fin de document
Set MonRange = .Bookmarks("EndOfDoc").Range
' Deuxième tableau
Set MaTable = .Tables.Add(Range:=MonRange, numrows:=6,
numcolumns:=6)
MaTable.AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2
MaTable.Cell(1, 1).Range.Text = "toto 2-1"
MaTable.Cell(1, 2).Range.Text = "toto 2-2"
End With
End Sub

--
A+
Avatar
Lolo
Merci Géo !
Le Set MonRange = .Bookmarks("EndOfDoc").Range fonctionne bien et en plus
c'est simple.
J'ai compris mon erreur je créais des paragraphes et me positionnais ensuite
sur le parapgraphe qui m'intéressait. Mais je pensais qu'un tableau
s'insérait dans un paragraphe en fait il en fait un par cellule !

En tout cas encore merci de ton aide et de ta patiente !

"Geo" a écrit :

Bonjour Lolo
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]

Je me suis permis de reprendre le code à ma manière.
Comme j'ai eu la flemme de vérifier pour l'insertion des tableaux, j'ai
préféré utiliser la variable MonRange qui pointe momentanément sur la
fin du document.
Au moins, je suis certain que le tableau sera positionné à la fin.
On aurait pu faire la même chose pour mettre le texte, mais puisqu'on
était parti sur le InsertAfter, on voit deux solutions possibles pour
le prix d'une.
En tous cas, bravo pour l'utilisation des Range, quand on débute on est
tenté d'utiliser le point d'insertion et Selection.

Attention aux retours à la ligne ajouté par la messagerie.
N'hésitez pas à demander des explications.

Sub testTableau()
Dim MonRange As Range
Dim MaTable As Table
With ActiveDocument
' Ecriture avant le tableau I
.Range.InsertAfter " Le tableau I " & vbCr
' *** Tableau 1 ***
' Positionnement au fin de document
Set MonRange = .Bookmarks("EndOfDoc").Range
' Ajout d'une première table
Set MaTable = .Tables.Add(Range:=MonRange, numrows:=6,
numcolumns:=6)
MaTable.AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2
MaTable.Cell(1, 1).Range.Text = "toto 1-1"
MaTable.Cell(1, 2).Range.Text = "toto 1-2"

' Ecriture avant le tableau II
.Range.InsertAfter " Le tableau II " & vbCr
' Positionnement au fin de document
Set MonRange = .Bookmarks("EndOfDoc").Range
' Deuxième tableau
Set MaTable = .Tables.Add(Range:=MonRange, numrows:=6,
numcolumns:=6)
MaTable.AutoFormat Format:=wdTableFormatContemporary
'wdTableFormatClassic2
MaTable.Cell(1, 1).Range.Text = "toto 2-1"
MaTable.Cell(1, 2).Range.Text = "toto 2-2"
End With
End Sub

--
A+





Avatar
Geo
Bonjour

Mais je pensais qu'un tableau
s'insérait dans un paragraphe en fait il en fait un par cellule !



Tout à fait.
Les virtuoses du vba qui maîtrisent ces éléments peuvent réduire leur
code au strict minimum.
Quand on ne sait pas trop, soit on fait des essais pour découvrir la
règle, avec le risque de se tromper dans ses déduction, soit on utilise
la manière forte, c'est ce que j'utilise de préférence.

--
A+