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

N° de tableau

6 réponses
Avatar
JMM21
Bonjour à toutes et à tous,

Dans un document word contenant plusieurs tableaux,
y-a-t-il un numéro attribué à chacun des tableaux qui soit récupérable en
VBA ?
Et quel code peut récupérer cette valeur ?

Si avez une piste, elle serait la bien venue

Merci

--
[Jmm21]
WD2003/XP

"Quand quelqu'un paye un tableau 3.000 francs, c'est qu'il lui plaît. Quand
il le paye 300.000 francs, c'est qu'il plaît aux autres."
[Edgar Degas]

6 réponses

Avatar
Anacoluthe
Bonjour !

'JMM21' nous a écrit ...
Dans un document word contenant plusieurs tableaux,
y-a-t-il un numéro attribué à chacun des tableaux qui soit récupérable en
VBA ? Et quel code peut récupérer cette valeur ?


Les tableaux sont des objets organisés en collections.
Il n'y a pas de numéro fixe attribué à un item d'une collection.
Un même tableau peut être le 14ème du document
Activedocument.Tables(14)
le 5ème de la Selection
Selection.Tables(5)
le deuxième de la 3ème section
Activedocument.Sections(3).Range.Tables(2)
etc etc...

Anacoluthe
« Collectionner, c'est être capable de vivre de son passé. »
- Albert CAMUS

Avatar
Geo

Bonjour à toutes et à tous,

Dans un document word contenant plusieurs tableaux,
y-a-t-il un numéro attribué à chacun des tableaux qui soit récupérable en
VBA ?
Oui, ils sont indexés en séquence : Tables(1), Tables(2) etc.

La difficulté c'est que ce numéro évolue quand on ajoute ou supprime
des tableaux.
Pire que ça, cet index dépend de l'objet auquel on fait référence.
Ainsi :
Selection.Tables(1)
est peut-être le même tableau que ActiveDocument.Tables(25) ou que
ActiveDocument.Section(3).Tables(4)

On peut évidemment mémoriser sur quelle tableau on travaille:
Set TableCourante = Selection.Tables(1)
ca peut être une solution à votre problème.
Mais l'idéal est de donner un nom à chaque tableau.

Et quel code peut récupérer cette valeur ?


Quel tableau ? Indice par rapport à quoi ?
Si c'est le tableau où se trouve le point d'insertion et qu'on veut son
indice dans le document :

Dim i As Integer
Dim Ts As Range
Dim Td As Tables
Set Ts = Selection.Tables(1).Range
Set Td = ActiveDocument.Tables
For i = 1 To ActiveDocument.Tables.Count
If Ts = Td(i).Range Then
MsgBox "Indice = " & i
Exit For
End If
Next

--
A+

Avatar
Geo

Il n'y a pas de numéro fixe attribué à un item d'une collection.
Un même tableau peut être le 14ème du document
Activedocument.Tables(14)
le 5ème de la Selection
Selection.Tables(5)
le deuxième de la 3ème section
Activedocument.Sections(3).Range.Tables(2)
etc etc...


Heureusement qu'on n'a pas pris le même exemple, on aurait pu croire
que j'ai copié sur toi :-)

Je ne suis pas très satisfait de la solution pour trouver l'indice du
tableau courant, il n'y a pas mieux ?

--
A+

Avatar
JMM21


Bonjour à toutes et à tous,

Dans un document word contenant plusieurs tableaux,
y-a-t-il un numéro attribué à chacun des tableaux qui soit récupérable en
VBA ?
Oui, ils sont indexés en séquence : Tables(1), Tables(2) etc.

La difficulté c'est que ce numéro évolue quand on ajoute ou supprime
des tableaux.
Pire que ça, cet index dépend de l'objet auquel on fait référence.
Ainsi :
Selection.Tables(1)
est peut-être le même tableau que ActiveDocument.Tables(25) ou que
ActiveDocument.Section(3).Tables(4)

On peut évidemment mémoriser sur quelle tableau on travaille:
Set TableCourante = Selection.Tables(1)
ca peut être une solution à votre problème.
Mais l'idéal est de donner un nom à chaque tableau.

Et quel code peut récupérer cette valeur ?


Quel tableau ? Indice par rapport à quoi ?
Si c'est le tableau où se trouve le point d'insertion et qu'on veut son
indice dans le document :

Dim i As Integer
Dim Ts As Range
Dim Td As Tables
Set Ts = Selection.Tables(1).Range
Set Td = ActiveDocument.Tables
For i = 1 To ActiveDocument.Tables.Count
If Ts = Td(i).Range Then
MsgBox "Indice = " & i
Exit For
End If
Next

--
A+


merci pour votre rapidité

Je creuse le sujet...

A+


Avatar
Anacoluthe
Bonjour !

'Geo' nous a écrit ...
Je ne suis pas très satisfait de la solution pour trouver l'indice du
tableau courant, il n'y a pas mieux ?


Ben tu peux aussi utiliser la technique classique du 'décompte depuis le début'
valable pour tout item de toute collection. Ça donne un truc comme ça
en ajoutant un collapse de sécurité (pour éviter une grosse sélection de
plusieurs tableaux d'un coup) et un test pour traiter le cas où on n'est
pas dans un tableau :

Public Sub QuelTableau()
Selection.Collapse
If Selection.Information(wdWithInTable) Then
i = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count
MsgBox "Nous somme dans le tableau n° " & i
Else
MsgBox "Nous ne sommes pas dans un tableau"
End If
End Sub

Reste un problème spécifique des tableaux : ta méthode comme la mienne
ne traitent pas le cas de tableaux imbriqués dans des tableaux. Un
tableau imbriqué dans une cellule ne fait pas partie de la collection
des tableaux du document ! Donc si on veut référencer précisément
un tableau imbriqué, faut s'y prendre encore autrement... ;-) pfff

Anacoluthe
« Il faudrait pouvoir montrer les tableaux qui sont sous le tableau. »
- Pablo PICASSO

Avatar
Geo

i = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count


Superbe !

« Il faudrait pouvoir montrer les tableaux qui sont sous le tableau. »
- Pablo PICASSO


Il connaissait déjà les tableaux imbriqués dans Word !

--
A+