Table des illustrations sous forme de tableau

Résolu/Fermé
lc1612 - 5 juin 2018 à 14:49
 lc1612 - 6 juin 2018 à 15:12
Bonjour,


Je rédige actuellement un rapport.
Dès qu'une chose est non conforme, je la rédige sous forme d'écart

Exemple :
Ecart n°1 : bla bla bla bla est non conforme ...

Pour avoir la numérotation automatique, j'ai créé une étiquette dans les légendes. Cette étiquette s'appelle Ecart n°.

A la fin de mon document, je souhaite présenter l'ensemble des écarts sous forme de tableau avec un colonne présentant le texte de l'écart et un autre colonne correspondant au numéro de page.

J'ai tenté la table des illustrations mais ce n'est pas un tableau. Alors oui je pourrais copier la table et la copier dans excel pour séparer les colonnes mais je souhaiterais pouvoir le faire directement sur Word, je pense que c'est possible.

Je vous remercie vivement pour votre aide.

PS : Je suis novice voire bien en dessous de novice en VBA et macro ...

A voir également:

2 réponses

m@rina Messages postés 20077 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 272
5 juin 2018 à 14:51
1
Bonjour Marina,

Merci pour ta réponse.
Dans mes recherches, je suis tombé sur ce post mais impossible de le modifier pour qu'il s'adapte à mon document.
Je n'arrive pas à faire que ça sélectionne les étiquettes Ecart n° de mes légendes ...

J'ai essayé d'appliquer le style titre 9 que je n'utilise jamais et modifier ainsi les lignes VBA mais idem, ça ne sélectionne pas mes éléments. Je ne comprends pas.

Oui je suis vraiment mauvais en macro ... ^^
0
Voilà comment je l'ai modifié, je me suis sûrement trompé ...

Sub tm_tablo()
'macro écrite par m@rina
Dim Paragraphe As Paragraph, Nombre, Numéro
Nombre = 0
For Each Paragraphe In ActiveDocument.Paragraphs

If Paragraphe.Style = "Légende" Then
Nombre = Nombre + 1
End If
Next
For Numéro = 1 To Nombre
With Selection
.InsertCrossReference ReferenceType:="Ecart n°", ReferenceKind:= _
wdContentText, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeText Text:=vbTab
.InsertCrossReference ReferenceType:="Ecart n°", ReferenceKind:= _
wdPageNumber, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeParagraph
End With
Next Numéro

With Selection
.Extend
.MoveUp Unit:=wdLine, Count:=Nombre
.ConvertToTable Separator:=wdSeparateByTabs, NumColumns:=2, _
NumRows:=Nombre, AutoFitBehavior:=wdAutoFitContent
.Sort ExcludeHeader:=False, FieldNumber:="Colonne 1", _
SortFieldType:=wdSortFieldAlphanumeric
.Columns.PreferredWidthType = wdPreferredWidthPercent
.Columns.PreferredWidth = 90

End With

End Sub
0
m@rina Messages postés 20077 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 272
5 juin 2018 à 23:39
Bonjour,

Ah ben oui, faut modifier la macro, mais je ne sais pas comment est fait ton document. Ci-dessous la macro pour des légendes "classiques" qui utilisent l'étiquette Figure et le style Légende. Remplacer éventuellement Figure par le nom de l'étiquette. Par ailleurs j'ai supprimé la ligne de code qui trie les légendes par ordre alpha.

Sub legendes_tablo()
'macro écrite par m@rina
Dim Paragraphe As Paragraph, Nombre, Numéro
Nombre = 0
For Each Paragraphe In ActiveDocument.Paragraphs

If Paragraphe.Style = "Légende" Then
Nombre = Nombre + 1
End If
Next
For Numéro = 1 To Nombre
With Selection
.InsertCrossReference ReferenceType:="Figure", ReferenceKind:= _
wdOnlyCaptionText, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeText Text:=vbTab
.InsertCrossReference ReferenceType:="Figure", ReferenceKind:= _
wdPageNumber, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeParagraph
End With
Next Numéro

With Selection
.Extend
.MoveUp Unit:=wdLine, Count:=Nombre
.ConvertToTable Separator:=wdSeparateByTabs, NumColumns:=2, _
NumRows:=Nombre, AutoFitBehavior:=wdAutoFitContent
.Columns.PreferredWidthType = wdPreferredWidthPercent
.Columns.PreferredWidth = 90

End With

End Sub

1
Bonjour,

Merci. J'ai encore un problème sur la macro.

J'ai remplacé Figure par le nom de mon étiquette Ecart n° donc ça donne :

InsertCrossReference ReferenceType:="Ecart n°", ReferenceKind:= _
wdOnlyCaptionText, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeText Text:=vbTab
.InsertCrossReference ReferenceType:="Ecart n°", ReferenceKind:= _
wdPageNumber, ReferenceItem:=Numéro, InsertAsHyperlink:=True

Lorsque j'éxécute la macro, ça met en surbrillance le texte et une boite de dialogue indique erreur d'éxècution '4198' la commande a échoué.

Je ne sais pas où est le pb ...

Je te remercie du temps que tu prends pour me répondre en tout cas !
0
Je viens de tester sur un document vierge, cela fonctionne.

Je ne comprends pas pourquoi sur mon rapport, la macro ne fonctionne pas ... Je n'ai pourtant rien fait d'exceptionnel sur ce document.
0
Je pense avoir compris pourquoi ça bug. Je n'ai vraiment aucune idée de comment passer outre mais je crois avoir compris.

Sur mon rapport j'ai 5 écarts (ce n'est pas beaucoup, pour une fois ...)

J'ai modifié la macro pour tester. :

IIf Paragraphe.Style = "Légende" Then
Nombre = Nombre + 1
End If
Next
For Numéro = 1 To 5
With Selection
.InsertCrossReference ReferenceType:="Figure", ReferenceKind:= _
wdOnlyCaptionText, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeText Text:=vbTab
.InsertCrossReference ReferenceType:="Figure", ReferenceKind:= _
wdPageNumber, ReferenceItem:=Numéro, InsertAsHyperlink:=True
.TypeParagraph
End With
Next Numéro


Comme cela, ça marche sans problème, mes écarts apparaissent dans un tableau avec les pages dans la colonne à coté. Mais avec la macro d'origine, donc avec "Nombre" au lieu de "5", ça bug. Je ne comprends pas.


Je te remercie pour ton aide si tu comprends l'erreur ...
0
m@rina Messages postés 20077 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 272
6 juin 2018 à 14:55
Bonjour,

Tu dois avoir un ou des paragraphes avec le style Légende qui n'utilise pas l'étiquette "écart n°".
On peut gérer l'erreur, mais le mieux c'est aussi de tester si le paragraphe légendé contient bien ton étiquette. Ainsi tu peux avoir plusieurs types d'étiquettes dans le document.

Comme je le dis souvent, il faut connaître le document pour écrire une macro...

Donc, à la place de :

If Paragraphe.Style = "Légende" Then
Nombre = Nombre + 1
End If


Tu mets :
If Paragraphe.Style = "Légende" Then
If InStr(Paragraphe, "Ecart n°") > 0 Then
Nombre = Nombre + 1
End If
End If


m@rina
0
Avec cette dernière modification cela fonctionne parfaitement !

Je te remercie énormément pour le temps que tu as pris pour me répondre et m'aider.

A bientôt. Et merci encore !
0