Question Copier-coller un tableau dans Word

Plus d'informations
il y a 11 ans 10 mois #17476 par StefaneB
Bonjour,

dans un document word existant, j'ai besoin de copier-coller un tableau, présent dans ce document, plusieurs fois.

Mais differentes tentatives échouent à chaque fois.
Soit je colle le tableau juste en dessous du précédent mais dans ce cas je n'ai pas 2 tableaux mais un seul.
Soit je colle le tableau sur le précédent.

Je voudrais que mes tableaux soient les uns en dessous des autres avec un saut de ligne.

Voici mon bout de code qui ne fonctionne pas
[code:1]
$Doc = $Word.documents.Open($Target)
$Selection = $Word.selection
$Table = $doc.Tables
$TableBul = $Table.Item(9)
$Range = $TableBul.range
$Range.Copy()
$Selection.EndOf(15)
$Selection.MoveDown()
$Selection.TypeParagraph()
$Range.PasteAndFormat(17)
[/code:1]

Merci de votre aide.

Message édité par: Stefane, à: 16/05/14 13:56<br><br>Message édité par: Stefane, à: 16/05/14 13:57

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #17477 par Laurent Dardenne
Salut,
Stefane écrit:

Je voudrais que mes tableaux soient les uns en dessous des autres avec un saut de ligne.

Essaie AVANT la copie d'ajoutert un saut de ligne, i.e. un nouveau paragraphe.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #17478 par StefaneB
Je n'y arrive pas.
Le saut de ligne se fait en début de document.
J'ai essayé ca:
[code:1]
$TableBul = $Table.Item(9)
$Range = $TableBul.range
$Selection.TypeParagraph()
$Range.Copy()
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #17479 par Laurent Dardenne
Stefane écrit:

Je n'y arrive pas.

Enregistre ta manipulation dans une macro, puis consulte le code généré. Cela peut te donner une solution ou à défaut une piste.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #17481 par StefaneB
J'ai déjà essayé et ca ne m'a pas aidé :)

Mon problème est que je n'arrive pas mettre le focus où je veux.
Si j'arrivais à déplacer le focus juste dessous mon tableau ce serait bon.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #17485 par Laurent Dardenne
Je n'ai pas le temps pour coder en PS, voici du code Delphi/Pascal sur le sujet, peut être y trouveras-tu qq pistes :

procedure TForm1.ChangeTableaux;
// les tableaux imbriqués ne sont pas gérés
{ if Tableau.Cell(myRows,myCols).Tables.count&lt;&gt;0
then Log.Lines.Add('tableaux imbriqué'+InttoStr(Tableau.Cell(myRows,myCols).Tables.count));
}

var
CelluleText,
S :String;

Tableau : Table;
I,CountTableau :Integer;
CurrentRow : Row;

myCols,NbCol : Integer;
myRows,NbRow : Integer;

Number,
Unit_ : OleVariant;

ParagraphPrecedent : Paragraph;
monStyle : Olevariant;

begin
S:='&lt;tableau width=\&quot;80%\&quot;&gt;'+CrLf;
CountTableau:=WordDocument1.Tables.Count;

Log.Lines.Add(Format('Mise en forme des tableaux[%d]', [CountTableau]));

If CountTableau=0
Then Exit;

ProgressBar1.Position:=0;
ProgressBar1.Max:=CountTableau;

Number:=1;
Unit_:=wdParagraph;

For I:=1 to CountTableau do
begin
// Récupére un tableau
Tableau:=WordDocument1.Tables.item(1);

// sélectionne le paragraphe qui précède la sélection.
Tableau.Select;
ParagraphPrecedent:=WordApplication1.Selection.Paragraphs.item(1).Previous(number);

// Insére un paragraph aprés celui mémorisé
ParagraphPrecedent.Range.InsertParagraphAfter;
ParagraphPrecedent:=ParagraphPrecedent.Next(Number);
// Evite d'insérer du texte avec le style du paragraph précédant le tableau
// Il peut s'agir d'un titre et dans ce cas la liste est insérée au format Titre :-(
monStyle:=Integer(wdStyleNormal);
ParagraphPrecedent.Range.Set_Style(monStyle);

// Récupére le nombre de ligne total
NbRow := Tableau.Rows.Count;

//Lecture du tableau ligne 1 colonne1
// ligne 1 colonne2 ...
For myRows:=1 to NbRow do
begin
// Récupére la ligne courante
CurrentRow:=Tableau.Rows.Item(myRows);
// Récupére le nombre de colonne de la ligne courante
NbCol:=CurrentRow.Cells.count;

Application.ProcessMessages;

if myRows= 1
then S:=S+'&lt;entete&gt;'+CrLf
else S:=S+'&lt;ligne&gt;'+CrLf;

For myCols:=1 to NbCol do
begin
CelluleText:=Traite_MotsParagraph(Tableau.Cell(myRows,myCols).Range.Words,SansBaliseBR);
S:=S+'&lt;colonne&gt;'+CelluleText+'&lt;/colonne&gt;'+Crlf;
end;
if myRows= 1
then S:=S+'&lt;/entete&gt;'+CrLf
else S:=S+'&lt;/ligne&gt;'+Crlf;
end;
S:=S+'&lt;/tableau&gt;';
Tableau.Delete;

// Insére le texte à la position du tableau courant ( supprimé )
ParagraphPrecedent.Range.insertBefore(S);

ProgressBar1.Position:=ProgressBar1.Position+1;

end;
ProgressBar1.Position:=CountTableau;
end;


Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.068 secondes
Propulsé par Kunena