méthode ConvertToTable

Le
Greffier
Bonjour,

1 - J'aimerai connaître comment m'y prendre pour supprimer le quadrillage et
ajuster les colonnes dans un tableau. J'applique la méthode ConvertToTable
avec les paramètres indiqués. Mais, j'obtiens toujours un quadrillage,
malgré le paramêtre wdTableFormatNone.
(remarque si on enlève autofit, les colonnes sont égales, et se partagent la
largeur de la page, et le paramètre précédent fonctionne).
La table est construite dans l'application Excel, le Word est appelé dans
Excel.
(wdSeparateByTabs = vbTab)

2 - D'autre part, comme je dois au cours du traitement, écrire plusieurs
tableaux en fin de document, quelqu'un peut-il me dire, si endofdoc est bien
situé : car de temps en temps les tableaux se superposent, et que j'utilse
la bonne méthode.

3 -

J'utilise l'office 2003.

Et voici ce que j'ai écrit:

Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim oRange As Word.Range

Dim sTabOui As String
..
Set oDoc =
oWord.Documents.Open(Filename:="E:CourriercopropriétéAG.doc")

Set oRange = oDoc.Bookmarks("EndOfDoc").Range

oRange.Text = sTabOui

'Convertir le texte en table
oRange.ConvertToTable Separator:=wdSeparateByTabs, NumColumns:=5,
Format:=wdTableFormatNone, _
AutoFit:=True, AutoFitBehavior:=wdAutoFitContent,
DefaultTableBehavior:=wdWord9TableBehavior

Set oRange = Nothing

Merci, pour toutes vos réponses.

Si vous connaissez une autre solution, je suis intéressé.

Cordialement.

Greffier.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #1645249

Bonjour,

1 - J'aimerai connaître comment m'y prendre pour supprimer le quadrillage et ajuster
les colonnes dans un tableau. J'applique la méthode ConvertToTable avec les paramètres
indiqués. Mais, j'obtiens toujours un quadrillage, malgré le paramêtre
wdTableFormatNone.
(remarque si on enlève autofit, les colonnes sont égales, et se partagent la largeur de
la page, et le paramètre précédent fonctionne).
La table est construite dans l'application Excel, le Word est appelé dans Excel.
(wdSeparateByTabs = vbTab)


Le monde est mal fait.
En utilisant la méthode directement à partir de Word, sans paramètres,
j'ai constaté qu'il n'y avait plus de quadrillage depuis la version
2003 et ça m'a fait râler car avant il y en avait. Ceci dit, j'ai pu
constater que le paramétrage par défaut ne fonctionne pas exactement
pareil selon qu'elle est appelée à partir de Word ou à partir d'une
autre application.
Dans votre cas êtes-vous certain que c'est un vrai quadrillage
(imprimé) et non une simple trame affichée à l'écran ? Il me semble
qu'il y a un paramètre pour ne pas l'afficher en version 2003.
Toujours sans paramètres les colonnes du tableau sont ajustées à la
page.
Ce qui est curieux c'est que l'un interfère sur l'autre.
Je ferai quelques essais après le dîner (ou le souper selon la région).

2 - D'autre part, comme je dois au cours du traitement, écrire plusieurs tableaux en
fin de document, quelqu'un peut-il me dire, si endofdoc est bien situé : car de temps
en temps les tableaux se superposent, et que j'utilse la bonne méthode.


EndOfDoc se situe juste avant la dernière marque de paragraphe du
document.

A suivre

--
A+

Anacoluthe
Le #1645248
Bonjour !

'Greffier' nous a écrit ...
La table est construite dans l'application Excel, le Word est appelé dans
Excel.
...

Si vous connaissez une autre solution, je suis intéressé.


Il est assez étrange de partir d'un /tableur/ avec ses innombrables
avantages pour faire de jolis tableaux pour finir par bricoler
en vba un ConvertToTable dans Word ... :-p

Pourquoi ne pas faire le tableau dans Excel puisque vous êtes
dans Excel et le copier dans Word, au besoin lié ?????

Concernant la superposition des tableaux sur le Bookmarks("EndOfDoc")
pensez que votre Range n'est plus au EndOfDoc si vous mettez qqch
dedans : il est probable que vous oubliez de RE-définir oRange
entre deux insertions de tableaux...

Encore un détail : si vous utilisez la méthode oRange.Text = "chaine"
vous vous condamnez à travailler en texte brut : pas de tableau,
pas de formatage, rien que des caractères. Galère , non ? Un Range
peut contenir autre chose que du texte brut de pomme ! Voyez dans
l'aide vba tout ce qu'on peut faire avec un objet Range :-)

Anacoluthe
« Le plus compliqué c’est de faire simple. »
- Léonard de VINCI

Geo
Le #1645247
Re

les interférences entre les paramètres de cette méthode surprennent un
peu en effet. Le chaînage entre AutoFit, AutoFitBehavior et
DefaultTableBehavior n'est pas triste.

Pour ne pas avoir les bordures, une solution de contournement est
d'utiliser ApplyBorders, mais il n'a d'effet que s'il y a un format,
donc :
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
donne le même résultat que le votre, mais sans bordures (testé en 2007)

Une autre solution serait de travailler le tableau qui a été généré.

Pour le Endofdoc, si vous mettez plusieurs tableaux, ils ne sont pas
séparés puisque le nouveau tableau s'insère entre le précédent et la
dernière marque de paragraphe. Word applique alors son comportement
habituel : les tableaux sont fusionnés, il faut donc les "écarter",
Voici comment j'ai procédé :

oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.InsertAfter vbCrLf
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabNon
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True

Pas très élégant, mais ça marche

--
A+
Geo
Le #1645245

Un Range
peut contenir autre chose que du texte brut de pomme ! Voyez dans
l'aide vba tout ce qu'on peut faire avec un objet Range :-)


On te reconnaît bien là.
:)

--
A+

Greffier
Le #1666496
Bonsoir à tous,

J'ai lu avec une grande attention vos réponses, et j'y apporte un
complément.
1 - J'opère à partir d'Excel car j'avais à l'époque une solution pour des
réunions de copropriétaires, je complétais un tableau à l'aide d'un
formulaire au fur et à mesure des questions. Ce tableau était sommé, et les
résultats enregistrés plus tard dans Word avec la question, ses résultats
pour, contre, abstentions, et la réponse suivant les votes. Les votes étant
détaillés avec les noms des votants et les quantièmes.
Aujourd'hui, j'aimerais moderniser en ayant déjà enregistré dans Word les
questions. Je viendrais dons insérer les votes derrière la question.
Voilà pourquoi je convertis en 3 tables les résultats de vote que je reporte
dans Word.

2 - L'idéal serait d'obtenir la question suivie des votes pour, puis des
votes non, puis des abstentions: chacun comprenant les noms et les
tantièmes. Malheureusement cela marche une fois, deux fois ... et de temps
en temps je redouble.

3 - j'ai essayé la méthode avec wdTableFormatSimple1 mais cela ne marche pas
j'ai toujours des quadrillages.

Pour le moment dans mes tests, je me contente de les écrire les uns derrière
les autres mais le endofdoc ne doit pas être le bon paramètre.

En attendant vos nouvelles remarques.

Cordialement,

Greffier.


"Geo"
Re

les interférences entre les paramètres de cette méthode surprennent un peu
en effet. Le chaînage entre AutoFit, AutoFitBehavior et
DefaultTableBehavior n'est pas triste.

Pour ne pas avoir les bordures, une solution de contournement est
d'utiliser ApplyBorders, mais il n'a d'effet que s'il y a un format, donc
:
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
donne le même résultat que le votre, mais sans bordures (testé en 2007)

Une autre solution serait de travailler le tableau qui a été généré.

Pour le Endofdoc, si vous mettez plusieurs tableaux, ils ne sont pas
séparés puisque le nouveau tableau s'insère entre le précédent et la
dernière marque de paragraphe. Word applique alors son comportement
habituel : les tableaux sont fusionnés, il faut donc les "écarter",
Voici comment j'ai procédé :

oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.InsertAfter vbCrLf
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabNon
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True

Pas très élégant, mais ça marche

--
A+




Geo
Le #1666493

3 - j'ai essayé la méthode avec wdTableFormatSimple1 mais cela ne marche pas j'ai
toujours des quadrillages.

Pour le moment dans mes tests, je me contente de les écrire les uns derrière les autres
mais le endofdoc ne doit pas être le bon paramètre.


Testé sur 2003, marche très bien, voici ma macro in extenso :
Sub CToTable()
Dim oWord As New Word.Application
Dim oDoc As Word.Document
Dim oRange As Word.Range
Dim sTabOui As String
Dim sTabNon As String
' Suppose que word est déjà lancé
Set oWord = GetObject(, "Word.Application")
sTabOui = "Texte11" & vbTab & "Texte12" & vbTab & "Texte13" & vbCrLf
sTabOui = sTabOui & "Texte21" & vbTab & "Texte22" & vbTab & "Texte23"
sTabNon = "Texte31" & vbTab & "Texte32" & vbTab & "Texte33" & vbCrLf
sTabNon = sTabNon & "Texte41" & vbTab & "Texte42" & vbTab & "Texte43"
Set oDoc = oWord.documents.Add
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabOui
'Convertir le texte en table
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
' Ajout d'une fin de paragraphe après le tableau
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.InsertAfter vbCrLf
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabNon
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
End Sub

Pour le quadrillage, je me répète mais avez-vous regardé :
menu Tableau / Masquer le quadrillage ?

--
A+

Greffier
Le #1666479
Bonjour à Géo,

Oui, cela marche mais dans Word. Mais dès que l'on tente d'accéder à Word
par un autre logiciel d'office AutoFit ne marche pas. Comme j'opère Excel
vers Word, je suis très ennuyé. Peut-être avez-vous dans vos papiers une
solution qui consisterait à écrire du texte mais à la condition que le
couple (nom + millièmes) soit insécable, ce qui aussi n'est pas évident.
Mais je pense que la solution ConvertToTabble n'est pas à exclure, il doit
s'agir d'un paramétrage.
En tout cas la solution menu Tableau / Masquer le quadrillage, a toujours
été en place, mais malheureusement les autofit font remettre le quadrillage
dans le cas Excel vers Word, en tous cas c'est un vrai quadrillage, et c'est
gênant.

Cordialement,

Greffier.

"Geo"

3 - j'ai essayé la méthode avec wdTableFormatSimple1 mais cela ne marche
pas j'ai toujours des quadrillages.

Pour le moment dans mes tests, je me contente de les écrire les uns
derrière les autres mais le endofdoc ne doit pas être le bon paramètre.


Testé sur 2003, marche très bien, voici ma macro in extenso :
Sub CToTable()
Dim oWord As New Word.Application
Dim oDoc As Word.Document
Dim oRange As Word.Range
Dim sTabOui As String
Dim sTabNon As String
' Suppose que word est déjà lancé
Set oWord = GetObject(, "Word.Application")
sTabOui = "Texte11" & vbTab & "Texte12" & vbTab & "Texte13" & vbCrLf
sTabOui = sTabOui & "Texte21" & vbTab & "Texte22" & vbTab & "Texte23"
sTabNon = "Texte31" & vbTab & "Texte32" & vbTab & "Texte33" & vbCrLf
sTabNon = sTabNon & "Texte41" & vbTab & "Texte42" & vbTab & "Texte43"
Set oDoc = oWord.documents.Add
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabOui
'Convertir le texte en table
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
' Ajout d'une fin de paragraphe après le tableau
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.InsertAfter vbCrLf
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabNon
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
End Sub

Pour le quadrillage, je me répète mais avez-vous regardé :
menu Tableau / Masquer le quadrillage ?

--
A+





Greffier
Le #1666472
ReBonjour à Géo,

Ouf ... et merci Geo, j'ai enlevé les Nothing, je comprends maintenant le
sens de votre premier message.
Cette fois-ci c'est correct, il ne me reste plus qu'à essayer d'inclure mes
tables sans quadrillage entre les questions, et trouver un moyen de
transmettre les réponses à la suite des tableaux. Un bon exercice, à
l'époque je l'avais écrit en pascal, puis en cobol. Aujourd'hui je vais le
retenter.
Le fait de mettre les différents AutoFit devait semer une belle panique, je
n'ai toujours pas compris la différence entre la table None et Simple1.

Je ne sais pas où vous habitez, mais je vous souhaite une bonne journée.

Cordialement.

Greffier.



"Greffier"
Bonjour à Géo,

Oui, cela marche mais dans Word. Mais dès que l'on tente d'accéder à Word
par un autre logiciel d'office AutoFit ne marche pas. Comme j'opère Excel
vers Word, je suis très ennuyé. Peut-être avez-vous dans vos papiers une
solution qui consisterait à écrire du texte mais à la condition que le
couple (nom + millièmes) soit insécable, ce qui aussi n'est pas évident.
Mais je pense que la solution ConvertToTabble n'est pas à exclure, il doit
s'agir d'un paramétrage.
En tout cas la solution menu Tableau / Masquer le quadrillage, a toujours
été en place, mais malheureusement les autofit font remettre le
quadrillage dans le cas Excel vers Word, en tous cas c'est un vrai
quadrillage, et c'est gênant.

Cordialement,

Greffier.

"Geo"

3 - j'ai essayé la méthode avec wdTableFormatSimple1 mais cela ne marche
pas j'ai toujours des quadrillages.

Pour le moment dans mes tests, je me contente de les écrire les uns
derrière les autres mais le endofdoc ne doit pas être le bon paramètre.


Testé sur 2003, marche très bien, voici ma macro in extenso :
Sub CToTable()
Dim oWord As New Word.Application
Dim oDoc As Word.Document
Dim oRange As Word.Range
Dim sTabOui As String
Dim sTabNon As String
' Suppose que word est déjà lancé
Set oWord = GetObject(, "Word.Application")
sTabOui = "Texte11" & vbTab & "Texte12" & vbTab & "Texte13" & vbCrLf
sTabOui = sTabOui & "Texte21" & vbTab & "Texte22" & vbTab & "Texte23"
sTabNon = "Texte31" & vbTab & "Texte32" & vbTab & "Texte33" & vbCrLf
sTabNon = sTabNon & "Texte41" & vbTab & "Texte42" & vbTab & "Texte43"
Set oDoc = oWord.documents.Add
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabOui
'Convertir le texte en table
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
' Ajout d'une fin de paragraphe après le tableau
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.InsertAfter vbCrLf
Set oRange = oDoc.Bookmarks("EndOfDoc").Range
oRange.Text = sTabNon
oRange.ConvertToTable Format:=wdTableFormatSimple1, _
ApplyBorders:úlse, AutoFit:=True
End Sub

Pour le quadrillage, je me répète mais avez-vous regardé :
menu Tableau / Masquer le quadrillage ?

--
A+









Geo
Le #1666464

Cette fois-ci c'est correct,


La macro que j'ai faite a bien tourné dans Excel et je peux vous
assurer que le résultat est correct.
Mais dans la version Word 2003, il y a une option d'affichage du
quadrillage dans le menu Tableau qui fait croire qu'il y a des
bordures, mais à l'aperçu, il n'y en a pas.

il ne me reste plus qu'à essayer d'inclure mes tables sans
quadrillage entre les questions, et trouver un moyen de transmettre les réponses à la
suite des tableaux. Un bon exercice, à l'époque je l'avais écrit en pascal, puis en
cobol. Aujourd'hui je vais le retenter.


Ce n'est plus du tout le même genre de langage, surtout le Cobol !
Mais si vous devez manipuler pas mal le contenu de votre document,
revoyez la suggestion d'anacoluthe :
Faire le document en Word -normal- et inclure les données calculées
dans Excel, il n'y a même pas besoin de vba pour ça. Composer un
document Word avec du vba, c'est évidemment possible mais c'est très
long, vous venez d'en avoir un échantillon.
D'après ce que vous avez dit sur le document souhaité :
Vous préparez votre compte-rendu en Word, vous préparez vos tableaux de
votes en Excel, vous les copiez avec liaison dans le document Word.
Le jour de l'AG vous saisissez les résultats dans Excel, vous ouvrez
votre compte-rendu : hop ! il tient compte des résultats. Il ne reste
plus qu'à l'imprimer et le distribuer à la sortie de la réunion.
Vous utilisez Word pour ce qu'il sait très bien faire : traitement de
texte, et Excel pour son domaine : les calculs.
Votre résultat doit donc être Nickel.

Le fait de mettre les différents AutoFit devait semer une belle panique, je n'ai
toujours pas compris la différence entre la table None et Simple1.


Le None n'applique pas de format au tableau, le Simple1 à l'air de
n'ajouter que des bordures qu'on enlève par un autre paramètre.
Avec un autre format ça devrait marcher aussi, mais on risque d'avoir
des couleurs de fond.

Je ne sais pas où vous habitez, mais je vous souhaite une bonne journée.


En douce (voire fraîche en ce moment) Touraine, et je vous souhaite
aussi une bonne fin de semaine.

--
A+

Greffier
Le #1666449
Bonjour Geo,

Et bien moi, bien que natif du Lauraguais (Castelnaudary), j'ai émigré à
Marseille (Pointe-Rouge), et puis maintenant retraité depuis 8 ans, je suis
resté, mais j'effectue de fréquents séjours chez mes frères et neveux.
Marseille : très chaud.

Cordialement,

Greffier.


"Geo"

Cette fois-ci c'est correct,


La macro que j'ai faite a bien tourné dans Excel et je peux vous assurer
que le résultat est correct.
Mais dans la version Word 2003, il y a une option d'affichage du
quadrillage dans le menu Tableau qui fait croire qu'il y a des bordures,
mais à l'aperçu, il n'y en a pas.

il ne me reste plus qu'à essayer d'inclure mes tables sans quadrillage
entre les questions, et trouver un moyen de transmettre les réponses à la
suite des tableaux. Un bon exercice, à l'époque je l'avais écrit en
pascal, puis en cobol. Aujourd'hui je vais le retenter.


Ce n'est plus du tout le même genre de langage, surtout le Cobol !
Mais si vous devez manipuler pas mal le contenu de votre document, revoyez
la suggestion d'anacoluthe :
Faire le document en Word -normal- et inclure les données calculées dans
Excel, il n'y a même pas besoin de vba pour ça. Composer un document Word
avec du vba, c'est évidemment possible mais c'est très long, vous venez
d'en avoir un échantillon.
D'après ce que vous avez dit sur le document souhaité :
Vous préparez votre compte-rendu en Word, vous préparez vos tableaux de
votes en Excel, vous les copiez avec liaison dans le document Word.
Le jour de l'AG vous saisissez les résultats dans Excel, vous ouvrez votre
compte-rendu : hop ! il tient compte des résultats. Il ne reste plus qu'à
l'imprimer et le distribuer à la sortie de la réunion.
Vous utilisez Word pour ce qu'il sait très bien faire : traitement de
texte, et Excel pour son domaine : les calculs.
Votre résultat doit donc être Nickel.

Le fait de mettre les différents AutoFit devait semer une belle panique,
je n'ai toujours pas compris la différence entre la table None et
Simple1.


Le None n'applique pas de format au tableau, le Simple1 à l'air de
n'ajouter que des bordures qu'on enlève par un autre paramètre.
Avec un autre format ça devrait marcher aussi, mais on risque d'avoir des
couleurs de fond.

Je ne sais pas où vous habitez, mais je vous souhaite une bonne journée.


En douce (voire fraîche en ce moment) Touraine, et je vous souhaite aussi
une bonne fin de semaine.

--
A+





Publicité
Poster une réponse
Anonyme