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

Faire des insertions automatiques par Macro

13 réponses
Avatar
alex-m
Bonjour =E0 tous,=20

J'ai un glossaire de 2200 insertions automatiques dans le normal.dotm.=20

Suite =E0 des "=E9v=E8nements d'entreprise", je dois revoir l'ensemble de c=
es insertions automatiques.=20

En partant de diff=E9rents fichiers Excel, j'ai fait une feuille Excel avec=
tous mes glossaires, la premi=E8re colonne =E9tant le code, et la seconde =
colonne le r=E9sultat. J'ai =E9galement fait la meme base sous Word, 1ere l=
igne le code, ligne suivante le r=E9sultat, les uns apres les autres.

Quelqu'un serait g=E9n=E9rer depuis cette feuille excel les glossaires dans=
Word, ou dans word en prenant le code puis le texte resultat ?

Merci par avance de votre aide.
Bien cordialement.
Alex

10 réponses

1 2
Avatar
Geo
Bonjour

Ca parait intéressant à faire.
Avant d'y regarder, pouvez-vous indiquer votre version de Word ?
A priori c'est au moins 2007.

Si vous avez ça en Excel, vous pouvez les recopier dans Word sous forme
de tableau je présume, ça simplifierait un peu les choses.
Avatar
Geo
Re

J'ai regardé et essayé avec Word 2010, ce n'est pas bien compliqué.
Le plus pratique serait de faire un tableau avec en ligne impaire le
nom de l'insertion et en ligne paire le texte de l'insertion.
Il faudrait préciser si ces insertions doivent avoir une catégorie
particulière.
Avatar
alex-m
Bonjour,

Merci pour votre réponse. Excusez moi de ne pas avoir répondu avant, ma is j'étais en déplacement en province.

Je vous confirme en effet, qu'il s'agit de Word 2010.

avez vous un exemple de macro ou de fichier pour pouvoir le mettre en oeuvr e.

Il n'y a pas de catégorie particulière, c'est juste un code qui gén ére le texte souhaité. (certaines insertions serait des petits tableaux )

Merci par avance de votre aide.

Cordialement.
Alex
Avatar
Geo
Bonsoir

Voici un code :

Sub insertauto()
Dim doc As Document
Dim M As Template
Dim bb As BuildingBlock
Dim t As Table
Dim nom As String
Dim val As Range
Dim i As Long
Set doc = ActiveDocument
Set M = doc.AttachedTemplate
Set bb = M.BuildingBlockEntries(3)
Set t = doc.Tables(1)
For i = 1 To t.Rows.Count Step 2
lg1 = Len(t.Cell(i, 1).Range.Text)
nom = Trim(Left(t.Cell(i, 1).Range.Text, lg1 - 2))

If Len(nom) > 0 Then
lg2 = t.Cell(i + 1, 1).Range.End
If lg2 > 0 Then
Set val = doc.Range(Start:=t.Cell(i + 1, 1).Range.Start,
End:=t.Cell(i + 1, 1).Range.End - 1)
Set bb = M.BuildingBlockEntries.Add(Name:=nom,
Type:=wdTypeAutoText, Category:="General", Range:=val)
Debug.Print ("nom =" & nom & " valeur=" & val.Text)
End If
End If
Next i
End Sub

Attention aux retours à la ligne parasites qu'il faut supprimer.

C'est basé sur ce que vous avez écrit : "J'ai également fait la même
base sous Word, 1ere ligne le code, ligne suivante le résultat, les uns
après les autres." en supposant que vous parliez de ligne d'un tableau.
Si ce n'est pas le cas, il va falloir revoir.

Vous avez aussi écrit :
(certaines insertions serait des petits tableaux)

Dans ce cas il faudrait que vous donniez un document word avec un
exemple complet, quitte à mettre n'importe quel texte.
Avatar
alex-m
Bonsoir Géo,

Merci pour ta réponse, et ton code que je testé mais que ne m'a pas per mis d'avoir le résultat.

Comme tu me l'as proposé, j'ai fait un petit fichier avec deux exemples d e types d'insertions.

Le premier étant un petit tableau de deux lignes, le code (Alt F3) serait la référence de la première ligne (Ex : A0101), les dimensions du ta bleau sont les bonnes.

Pour le deuxieme exemple, c'est un pavé référence, que j'ai mis en ja une fluo, j'ai appliqué, ta proposition de tableaux 1er colonne le code, deuxième colonne le resultat.

Le fichier est sur http://cjoint.com/?0CotqvXiwof

Merci encore pour ton aide.
Alex
Avatar
Geo
Bonjour Alex

D'accord, je regarde.
Si je tarde trop, relancez il m'arrive d'oublier de suivre certains
sujets.
Avatar
Geo
Re

j'ai regardé un peu le document, c'est faisable sans trop se casser la
tête.
Le tout est de vraiment se caler sur ce que vous ferez, la moindre
différence fera capoter la macro.

Q1 : ferez-vous tout dans un même document, ou ferez vous un document
avec la première forme ( un tableau de deux lignes par insertion) et un
avec la deuxième forme : un tableau avec une ligne par insertion ?


Q2 : Dans la forme 2, l'insertion correspond-elle systématiquement à
cinq paragraphes? le lien de messagerie est exclus ?
Avatar
alex-m
Re :



Bonjour Geo,



Merci pour ce retour :)



Excuse mes réponses en décalés, mais j'arrive pas à publier malgr é plusieurs tentatives.



Au départ, j'avais constitué, un fichier unique avec l'ensemble des mes insertions automatiques a faire avec le code et le résultat, j'avais fai t cela par fusion publipostage suite à divers extraction de fichier excel , ca m'a fait un fichier word de 150 pages.

Au vu des caractéristiques, je pense qu'il vaut gérer cela en plusieur s fichiers en fonction du type d'insertion à faire, un avec uniquement le s petits tableaux et un second avec les pavés. Les pavés peuvent varier de 4 à 7 lignes.



De plus comment gérer les changements de pages ? en sachant que parfois c ela peut couper le tableau en deux ou les pavés ?



Merci pour votre aide.

Bien cordialement.

Alex
Avatar
Geo
Re
Excuse mes réponses en décalés, mais j'arrive pas à publier malgré plusieurs
tentatives.



Pas de souci, ça me laisse du temps pour regarder le Rugby.

Au vu des caractéristiques, je pense qu'il vaut gérer cela en plusieurs fichiers en
fonction du type d'insertion à faire, un avec uniquement les petits tableaux et un
second avec les pavés. Les pavés peuvent varier de 4 à 7 lignes.



D'accord. on prend donc toutes les lignes de la cellule du tableau ?
Liens y compris ?

De plus comment gérer les changements de pages ? en sachant que parfois cela peut
couper le tableau en deux ou les pavés ?



Ça ne me gêne pas, en vba un tableau est un tableau, même à cheval sur
deux pages.

On peut éviter qu'un "ligne" de tableau soit scindée sur deux pages,
c'est dans les propriétés de tableau.
Avatar
Geo
Re

Voici le premier :
http://cjoint.com/14ma/DCppYcJpWBF.htm
1 2