Je reviens avec ma question sur le report du contenu de cellules avec les
signets et merci encore. Suite aux instructions suivantes qu'on m'a données,
j'ai réussi.
Juste par curiosité, existe-t-il une façon plus concise pour effectuer cette
opération car actuellement j'ai copié et adapté cette ligne en très grand
nombre. Je m'explique.
J'ai 9 tableaux (insérés dans un tableau donc imbriqués). Dans le premier
tableau (Tbl1Date1), j'écris 6 dates dans la première colonne. Ces dates
doivent être toutes reportées dans les autres tableaux dont les cellules
sont nommées respectivement Tbl1Date1, Tbl1Date2, Tbl1Date3, etc. et
Tbl2Date1, Tbl2Date2 et ainsi de suite pour tous les 9 tableaux.
Je vois souvent des exemples avec une instruction For Each qui permet d'agir
sur une série d'objets. Peut-on lui donner des instructions qui feraient que
pour chaque Signet comportant le mot Date1 met le même contenu que
Tbl1Entrée1, que pour chaque Signet comportant le mot Date2 met le même
contenu que Tbl1Entrée2.
J'espère que ma question est claire et merci pour les suggestions.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Geo
Bonjour Jocelyne
La réponse à votre question nécessiterait de longs développements.
Quand on doit faire plusieurs fois la même opération, une technique est de faire un sous-programme (Sub ou Function) auquel on passe en paramètre des éléments. Par exemple : Sub Copie(S as string, D as string) ActiveDocument.Bookmarks(D).Range.Text = _ TxtNet(ActiveDocument.Bookmarks(S).Range.Text) end sub
On appelle ce sous programme en donnant la valeur des paramètres. Exemple 1 : Copie("Tbl1Date1", "Tbl2Date1") Copie("Tbl1Date2", "Tbl2Date2") etc. Exemple 2 : Dim Tsource as string Dim Tdest as string
Tsource = "Tbl1Date1" Tdest = "Tbl2Date1" Copie(Tsource, Tdest) Tsource = "Tbl1Date2" Tdest = "Tbl2Date2" Copie(Tsource, Tdest) etc. Jusque là on n'a pas trop gagné en nb de lignes, mais comme vos noms ont l'air de se suivre :
Exemple 3 : Dim Tsource as string Dim Tdest as string Dim i as integer
For i = 1 to 9 Tsource = "Tbl1Date" & i Tdest = "Tbl2Date" & i Copie(Tsource, Tdest) next
Si vos tableaux sont numérotés de 1 en 1 jusqu'à 12, on ajoute une autre boucle : Exemple 4 : Dim Tsource as string Dim Tdest as string Dim i as integer Dim j as integer
for j= 1 to 12 step 2 For i = 1 to 9 Tsource = "Tbl" & j & "Date" & i Tdest = "Tbl" & j + 1 & "Date" & i Copie(Tsource, Tdest) next i next j
Là, effectivement vous avez tout traité en quelques lignes. On voit aussi l'intérêt de choisir judicieusement le nom des signets.
Le for each s'utilise avec des "collections", c'est le terme exact qui vous aidera à vous retrouver dans l'aide. L'ensemble des signets d'un document (ou d'une plage, ou d'une sélection) est une collection de signets. Idem pour les tableaux. Ainsi : Dim UneTable as Table
For each UneTable in Active Document.Tables ' passe en revue toutes les tables du document actif next
Ca marche pour des tas de choses, par exemple : Dim Paragraphe As Paragraph For Each Paragraphe In ActiveDocument.Sections(5).Paragraphs 'Traiter chaque paragraphe de la section 5 Next
Ce type de programmation est très pratique, mais peut s'avérer piégeuse, ce n'est pas le cas dans votre exemple, mais il vaut mieux le savoir. On n'a aucune garantie sur l'ordre dans lequel la collection est défilée. Si le nombre d'éléments de la collection varie en cours d'exécution (suppression d'éléments) on ne maîtrise plus grand chose.
Dans votre cas, ce serait qqch comme
Dim Signet as bookmark For each Signet in Activedocument.bookmarks If instr(Signet.Name,"Date1") >0 then ' Signet à traiter
endif next signet Mais ça ne me parait pas très bien adapté à votre cas, en particulier en raison des noms qui sont significatifs.
-- A+
Bonjour Jocelyne
La réponse à votre question nécessiterait de longs développements.
Quand on doit faire plusieurs fois la même opération, une technique est
de faire un sous-programme (Sub ou Function) auquel on passe en
paramètre des éléments.
Par exemple :
Sub Copie(S as string, D as string)
ActiveDocument.Bookmarks(D).Range.Text = _
TxtNet(ActiveDocument.Bookmarks(S).Range.Text)
end sub
On appelle ce sous programme en donnant la valeur des paramètres.
Exemple 1 :
Copie("Tbl1Date1", "Tbl2Date1")
Copie("Tbl1Date2", "Tbl2Date2")
etc.
Exemple 2 :
Dim Tsource as string
Dim Tdest as string
Tsource = "Tbl1Date1"
Tdest = "Tbl2Date1"
Copie(Tsource, Tdest)
Tsource = "Tbl1Date2"
Tdest = "Tbl2Date2"
Copie(Tsource, Tdest)
etc.
Jusque là on n'a pas trop gagné en nb de lignes, mais comme vos noms
ont l'air de se suivre :
Exemple 3 :
Dim Tsource as string
Dim Tdest as string
Dim i as integer
For i = 1 to 9
Tsource = "Tbl1Date" & i
Tdest = "Tbl2Date" & i
Copie(Tsource, Tdest)
next
Si vos tableaux sont numérotés de 1 en 1 jusqu'à 12, on ajoute une
autre boucle :
Exemple 4 :
Dim Tsource as string
Dim Tdest as string
Dim i as integer
Dim j as integer
for j= 1 to 12 step 2
For i = 1 to 9
Tsource = "Tbl" & j & "Date" & i
Tdest = "Tbl" & j + 1 & "Date" & i
Copie(Tsource, Tdest)
next i
next j
Là, effectivement vous avez tout traité en quelques lignes.
On voit aussi l'intérêt de choisir judicieusement le nom des signets.
Le for each s'utilise avec des "collections", c'est le terme exact qui
vous aidera à vous retrouver dans l'aide.
L'ensemble des signets d'un document (ou d'une plage, ou d'une
sélection) est une collection de signets.
Idem pour les tableaux.
Ainsi :
Dim UneTable as Table
For each UneTable in Active Document.Tables
' passe en revue toutes les tables du document actif
next
Ca marche pour des tas de choses, par exemple :
Dim Paragraphe As Paragraph
For Each Paragraphe In ActiveDocument.Sections(5).Paragraphs
'Traiter chaque paragraphe de la section 5
Next
Ce type de programmation est très pratique, mais peut s'avérer
piégeuse, ce n'est pas le cas dans votre exemple, mais il vaut mieux le
savoir.
On n'a aucune garantie sur l'ordre dans lequel la collection est
défilée.
Si le nombre d'éléments de la collection varie en cours d'exécution
(suppression d'éléments) on ne maîtrise plus grand chose.
Dans votre cas, ce serait qqch comme
Dim Signet as bookmark
For each Signet in Activedocument.bookmarks
If instr(Signet.Name,"Date1") >0 then
' Signet à traiter
endif
next signet
Mais ça ne me parait pas très bien adapté à votre cas, en particulier
en raison des noms qui sont significatifs.
La réponse à votre question nécessiterait de longs développements.
Quand on doit faire plusieurs fois la même opération, une technique est de faire un sous-programme (Sub ou Function) auquel on passe en paramètre des éléments. Par exemple : Sub Copie(S as string, D as string) ActiveDocument.Bookmarks(D).Range.Text = _ TxtNet(ActiveDocument.Bookmarks(S).Range.Text) end sub
On appelle ce sous programme en donnant la valeur des paramètres. Exemple 1 : Copie("Tbl1Date1", "Tbl2Date1") Copie("Tbl1Date2", "Tbl2Date2") etc. Exemple 2 : Dim Tsource as string Dim Tdest as string
Tsource = "Tbl1Date1" Tdest = "Tbl2Date1" Copie(Tsource, Tdest) Tsource = "Tbl1Date2" Tdest = "Tbl2Date2" Copie(Tsource, Tdest) etc. Jusque là on n'a pas trop gagné en nb de lignes, mais comme vos noms ont l'air de se suivre :
Exemple 3 : Dim Tsource as string Dim Tdest as string Dim i as integer
For i = 1 to 9 Tsource = "Tbl1Date" & i Tdest = "Tbl2Date" & i Copie(Tsource, Tdest) next
Si vos tableaux sont numérotés de 1 en 1 jusqu'à 12, on ajoute une autre boucle : Exemple 4 : Dim Tsource as string Dim Tdest as string Dim i as integer Dim j as integer
for j= 1 to 12 step 2 For i = 1 to 9 Tsource = "Tbl" & j & "Date" & i Tdest = "Tbl" & j + 1 & "Date" & i Copie(Tsource, Tdest) next i next j
Là, effectivement vous avez tout traité en quelques lignes. On voit aussi l'intérêt de choisir judicieusement le nom des signets.
Le for each s'utilise avec des "collections", c'est le terme exact qui vous aidera à vous retrouver dans l'aide. L'ensemble des signets d'un document (ou d'une plage, ou d'une sélection) est une collection de signets. Idem pour les tableaux. Ainsi : Dim UneTable as Table
For each UneTable in Active Document.Tables ' passe en revue toutes les tables du document actif next
Ca marche pour des tas de choses, par exemple : Dim Paragraphe As Paragraph For Each Paragraphe In ActiveDocument.Sections(5).Paragraphs 'Traiter chaque paragraphe de la section 5 Next
Ce type de programmation est très pratique, mais peut s'avérer piégeuse, ce n'est pas le cas dans votre exemple, mais il vaut mieux le savoir. On n'a aucune garantie sur l'ordre dans lequel la collection est défilée. Si le nombre d'éléments de la collection varie en cours d'exécution (suppression d'éléments) on ne maîtrise plus grand chose.
Dans votre cas, ce serait qqch comme
Dim Signet as bookmark For each Signet in Activedocument.bookmarks If instr(Signet.Name,"Date1") >0 then ' Signet à traiter
endif next signet Mais ça ne me parait pas très bien adapté à votre cas, en particulier en raison des noms qui sont significatifs.
-- A+
Geo
Re Bonjour
Pour compléter un peu sur les collections. Chaque élément d'une collection à un index qui permet de l'identifier de façon unique. Supposons que vous ayez donné un nom à la plage du document contenant vos tableaux. Dans cette plage le premier tableau a pour index 1, le suivant : 2 etc. Un tableau contient une collection de colonnes, une collection de lignes, une collection de cellules. La solution que vous utilisez avec les signets vous a obligé à donner un nom à chaque élément, et à partir de là, la solution est simple à programmer. Vous pourriez certainement utiliser la collection des cellules de chaque tableau, faisant lui-même partie de la collection des tableaux, mais la solution dépend de la présentation et de l'ordre des différents éléments. Vous les connaissez bien sûr, mais pas le(a) bénévole qui vous a aidée à trouver la solution qui marche actuellement. A contrario, si vous modifiez la structure d'un tableau, il faudrait peut-être aussi modifier votre programme.
-- A+
Re Bonjour
Pour compléter un peu sur les collections.
Chaque élément d'une collection à un index qui permet de l'identifier
de façon unique.
Supposons que vous ayez donné un nom à la plage du document contenant
vos tableaux.
Dans cette plage le premier tableau a pour index 1, le suivant : 2
etc.
Un tableau contient une collection de colonnes, une collection de
lignes, une collection de cellules.
La solution que vous utilisez avec les signets vous a obligé à donner
un nom à chaque élément, et à partir de là, la solution est simple à
programmer.
Vous pourriez certainement utiliser la collection des cellules de
chaque tableau, faisant lui-même partie de la collection des tableaux,
mais la solution dépend de la présentation et de l'ordre des différents
éléments. Vous les connaissez bien sûr, mais pas le(a) bénévole qui
vous a aidée à trouver la solution qui marche actuellement.
A contrario, si vous modifiez la structure d'un tableau, il faudrait
peut-être aussi modifier votre programme.
Pour compléter un peu sur les collections. Chaque élément d'une collection à un index qui permet de l'identifier de façon unique. Supposons que vous ayez donné un nom à la plage du document contenant vos tableaux. Dans cette plage le premier tableau a pour index 1, le suivant : 2 etc. Un tableau contient une collection de colonnes, une collection de lignes, une collection de cellules. La solution que vous utilisez avec les signets vous a obligé à donner un nom à chaque élément, et à partir de là, la solution est simple à programmer. Vous pourriez certainement utiliser la collection des cellules de chaque tableau, faisant lui-même partie de la collection des tableaux, mais la solution dépend de la présentation et de l'ordre des différents éléments. Vous les connaissez bien sûr, mais pas le(a) bénévole qui vous a aidée à trouver la solution qui marche actuellement. A contrario, si vous modifiez la structure d'un tableau, il faudrait peut-être aussi modifier votre programme.
-- A+
Jocelyne
Merci Geo pour vos explications.
Je vais tester les différents exemples pour mieux comprendre.
En ayant diverses automatisations à produire, je m'aperçois que le VBA ne s'apprend pas en un ou deux mois avec toutes les facettes qu'il comporte.
Pour ma part, il faut que je pratique sur différents cas, ce n'est pas seulement à regarder les codes que j'arrive à comprendre.
Dans certains codages, j'ai de la difficulté à savoir si c'est une variable de l'utilisateur ou un code de VBA. Alors, je teste en faisant des changements dans ce que je pense être une variable de l'utilisateur.
Les exemples que vous m'avez donnés pour mon cas vont m'aider dans ce sens et aussi les solutions que les autres bénévoles apportent.
J'apprécie grandement cette formation.
Au sujet de la collection Tableau, lorsqu'on utilise For each pour exécuter une action sur tous les tableaux du document, est-ce que les tableaux imbriqués sont également traités? ou bien VB n'en tient pas compte à moins de les nommer?
Jocelyne
Re Bonjour
Pour compléter un peu sur les collections. Chaque élément d'une collection à un index qui permet de l'identifier de façon unique. Supposons que vous ayez donné un nom à la plage du document contenant vos tableaux. Dans cette plage le premier tableau a pour index 1, le suivant : 2 etc. Un tableau contient une collection de colonnes, une collection de lignes, une collection de cellules. La solution que vous utilisez avec les signets vous a obligé à donner un nom à chaque élément, et à partir de là, la solution est simple à programmer. Vous pourriez certainement utiliser la collection des cellules de chaque tableau, faisant lui-même partie de la collection des tableaux, mais la solution dépend de la présentation et de l'ordre des différents éléments. Vous les connaissez bien sûr, mais pas le(a) bénévole qui vous a aidée à trouver la solution qui marche actuellement. A contrario, si vous modifiez la structure d'un tableau, il faudrait peut-être aussi modifier votre programme.
-- A+
Merci Geo pour vos explications.
Je vais tester les différents exemples pour mieux comprendre.
En ayant diverses automatisations à produire, je m'aperçois que le VBA ne
s'apprend pas en un ou deux mois avec toutes les facettes qu'il comporte.
Pour ma part, il faut que je pratique sur différents cas, ce n'est pas
seulement à regarder les codes que j'arrive à comprendre.
Dans certains codages, j'ai de la difficulté à savoir si c'est une variable
de l'utilisateur ou un code de VBA. Alors, je teste en faisant des
changements dans ce que je pense être une variable de l'utilisateur.
Les exemples que vous m'avez donnés pour mon cas vont m'aider dans ce sens
et aussi les solutions que les autres bénévoles apportent.
J'apprécie grandement cette formation.
Au sujet de la collection Tableau, lorsqu'on utilise For each pour exécuter
une action sur tous les tableaux du document, est-ce que les tableaux
imbriqués sont également traités? ou bien VB n'en tient pas compte à moins de
les nommer?
Jocelyne
Re Bonjour
Pour compléter un peu sur les collections.
Chaque élément d'une collection à un index qui permet de l'identifier
de façon unique.
Supposons que vous ayez donné un nom à la plage du document contenant
vos tableaux.
Dans cette plage le premier tableau a pour index 1, le suivant : 2
etc.
Un tableau contient une collection de colonnes, une collection de
lignes, une collection de cellules.
La solution que vous utilisez avec les signets vous a obligé à donner
un nom à chaque élément, et à partir de là, la solution est simple à
programmer.
Vous pourriez certainement utiliser la collection des cellules de
chaque tableau, faisant lui-même partie de la collection des tableaux,
mais la solution dépend de la présentation et de l'ordre des différents
éléments. Vous les connaissez bien sûr, mais pas le(a) bénévole qui
vous a aidée à trouver la solution qui marche actuellement.
A contrario, si vous modifiez la structure d'un tableau, il faudrait
peut-être aussi modifier votre programme.
Je vais tester les différents exemples pour mieux comprendre.
En ayant diverses automatisations à produire, je m'aperçois que le VBA ne s'apprend pas en un ou deux mois avec toutes les facettes qu'il comporte.
Pour ma part, il faut que je pratique sur différents cas, ce n'est pas seulement à regarder les codes que j'arrive à comprendre.
Dans certains codages, j'ai de la difficulté à savoir si c'est une variable de l'utilisateur ou un code de VBA. Alors, je teste en faisant des changements dans ce que je pense être une variable de l'utilisateur.
Les exemples que vous m'avez donnés pour mon cas vont m'aider dans ce sens et aussi les solutions que les autres bénévoles apportent.
J'apprécie grandement cette formation.
Au sujet de la collection Tableau, lorsqu'on utilise For each pour exécuter une action sur tous les tableaux du document, est-ce que les tableaux imbriqués sont également traités? ou bien VB n'en tient pas compte à moins de les nommer?
Jocelyne
Re Bonjour
Pour compléter un peu sur les collections. Chaque élément d'une collection à un index qui permet de l'identifier de façon unique. Supposons que vous ayez donné un nom à la plage du document contenant vos tableaux. Dans cette plage le premier tableau a pour index 1, le suivant : 2 etc. Un tableau contient une collection de colonnes, une collection de lignes, une collection de cellules. La solution que vous utilisez avec les signets vous a obligé à donner un nom à chaque élément, et à partir de là, la solution est simple à programmer. Vous pourriez certainement utiliser la collection des cellules de chaque tableau, faisant lui-même partie de la collection des tableaux, mais la solution dépend de la présentation et de l'ordre des différents éléments. Vous les connaissez bien sûr, mais pas le(a) bénévole qui vous a aidée à trouver la solution qui marche actuellement. A contrario, si vous modifiez la structure d'un tableau, il faudrait peut-être aussi modifier votre programme.
-- A+
Geo
Dans certains codages, j'ai de la difficulté à savoir si c'est une variable de l'utilisateur ou un code de VBA. Alors, je teste en faisant des changements dans ce que je pense être une variable de l'utilisateur.
C'est pour cela qu'il vaut mieux donner un nom en français, au moins on est certain que ce n'est pas du vba. Une coutume est de nommer une variable Mon ou Ma quelque chose. Par exemple MonTableau ou MaTable. Personnellement, pour les For Each j'utilise plutôt UnTableau, je réserve l'utilisation de MonTableau à un tableau précis, mais à chacun ses manies. Exploitez à fond l'interface VBE, il y a tout un chapitre sur le sujet dans le livre VBA que vous vous êtes procuré. En particulier l'utilisation de la fenêtre "Variables locales", vous y verrez toutes les variables et leurs membres.
Au sujet de la collection Tableau, lorsqu'on utilise For each pour exécuter une action sur tous les tableaux du document, est-ce que les tableaux imbriqués sont également traités? ou bien VB n'en tient pas compte à moins de les nommer?
Comme vous le disiez, l'expérimentation est le plus sur. Tapez ceci dans la fenêtre d'exécution : ? ActiveDocument.Tables.Count Vous verrez que seuls les tableaux globaux sont comptés Autre possibilité faites tourner ce petit programme en mettant un point d'arrêt sur le Next, vous verrez comment se fait le balayage :
Sub testTableaux() Dim UnTableau As Table Debug.Print ActiveDocument.Tables.Count For Each UnTableau In ActiveDocument.Tables UnTableau.Select Next End Sub Les tableaux imbriqués, sont des tableaux dans des tableaux. Voici un bout de programme qui permet de savoir le nombre de tableaux imbriqués jusqu'au niveau 3, c'est à dire combien il y a de tableaux dans un tableau, lui-même dans un tableau du document : Sub testTableaux() Dim UnTableau As Table Dim SousTableau As Table Debug.Print "Niveau 1", ActiveDocument.Tables.Count For Each UnTableau In ActiveDocument.Tables 'UnTableau.Select Debug.Print "Niveau 2", UnTableau.Tables.Count For Each SousTableau In UnTableau.Tables 'SousTableau.Select Debug.Print "Niveau 3", SousTableau.Tables.Count Next Next End Sub
Le premier tableau imbriqué dans le deuxième tableau du document est : ActiveDocument.Tables(2).Tables(1)
-- A+
Dans certains codages, j'ai de la difficulté à savoir si c'est une variable
de l'utilisateur ou un code de VBA. Alors, je teste en faisant des
changements dans ce que je pense être une variable de l'utilisateur.
C'est pour cela qu'il vaut mieux donner un nom en français, au moins on
est certain que ce n'est pas du vba.
Une coutume est de nommer une variable Mon ou Ma quelque chose.
Par exemple MonTableau ou MaTable.
Personnellement, pour les For Each j'utilise plutôt UnTableau, je
réserve l'utilisation de MonTableau à un tableau précis, mais à chacun
ses manies.
Exploitez à fond l'interface VBE, il y a tout un chapitre sur le sujet
dans le livre VBA que vous vous êtes procuré.
En particulier l'utilisation de la fenêtre "Variables locales", vous y
verrez toutes les variables et leurs membres.
Au sujet de la collection Tableau, lorsqu'on utilise For each pour exécuter
une action sur tous les tableaux du document, est-ce que les tableaux
imbriqués sont également traités? ou bien VB n'en tient pas compte à moins de
les nommer?
Comme vous le disiez, l'expérimentation est le plus sur.
Tapez ceci dans la fenêtre d'exécution :
? ActiveDocument.Tables.Count
Vous verrez que seuls les tableaux globaux sont comptés
Autre possibilité faites tourner ce petit programme en mettant un point
d'arrêt sur le Next, vous verrez comment se fait le balayage :
Sub testTableaux()
Dim UnTableau As Table
Debug.Print ActiveDocument.Tables.Count
For Each UnTableau In ActiveDocument.Tables
UnTableau.Select
Next
End Sub
Les tableaux imbriqués, sont des tableaux dans des tableaux.
Voici un bout de programme qui permet de savoir le nombre de tableaux
imbriqués jusqu'au niveau 3, c'est à dire combien il y a de tableaux
dans un tableau, lui-même dans un tableau du document :
Sub testTableaux()
Dim UnTableau As Table
Dim SousTableau As Table
Debug.Print "Niveau 1", ActiveDocument.Tables.Count
For Each UnTableau In ActiveDocument.Tables
'UnTableau.Select
Debug.Print "Niveau 2", UnTableau.Tables.Count
For Each SousTableau In UnTableau.Tables
'SousTableau.Select
Debug.Print "Niveau 3", SousTableau.Tables.Count
Next
Next
End Sub
Le premier tableau imbriqué dans le deuxième tableau du document est :
ActiveDocument.Tables(2).Tables(1)
Dans certains codages, j'ai de la difficulté à savoir si c'est une variable de l'utilisateur ou un code de VBA. Alors, je teste en faisant des changements dans ce que je pense être une variable de l'utilisateur.
C'est pour cela qu'il vaut mieux donner un nom en français, au moins on est certain que ce n'est pas du vba. Une coutume est de nommer une variable Mon ou Ma quelque chose. Par exemple MonTableau ou MaTable. Personnellement, pour les For Each j'utilise plutôt UnTableau, je réserve l'utilisation de MonTableau à un tableau précis, mais à chacun ses manies. Exploitez à fond l'interface VBE, il y a tout un chapitre sur le sujet dans le livre VBA que vous vous êtes procuré. En particulier l'utilisation de la fenêtre "Variables locales", vous y verrez toutes les variables et leurs membres.
Au sujet de la collection Tableau, lorsqu'on utilise For each pour exécuter une action sur tous les tableaux du document, est-ce que les tableaux imbriqués sont également traités? ou bien VB n'en tient pas compte à moins de les nommer?
Comme vous le disiez, l'expérimentation est le plus sur. Tapez ceci dans la fenêtre d'exécution : ? ActiveDocument.Tables.Count Vous verrez que seuls les tableaux globaux sont comptés Autre possibilité faites tourner ce petit programme en mettant un point d'arrêt sur le Next, vous verrez comment se fait le balayage :
Sub testTableaux() Dim UnTableau As Table Debug.Print ActiveDocument.Tables.Count For Each UnTableau In ActiveDocument.Tables UnTableau.Select Next End Sub Les tableaux imbriqués, sont des tableaux dans des tableaux. Voici un bout de programme qui permet de savoir le nombre de tableaux imbriqués jusqu'au niveau 3, c'est à dire combien il y a de tableaux dans un tableau, lui-même dans un tableau du document : Sub testTableaux() Dim UnTableau As Table Dim SousTableau As Table Debug.Print "Niveau 1", ActiveDocument.Tables.Count For Each UnTableau In ActiveDocument.Tables 'UnTableau.Select Debug.Print "Niveau 2", UnTableau.Tables.Count For Each SousTableau In UnTableau.Tables 'SousTableau.Select Debug.Print "Niveau 3", SousTableau.Tables.Count Next Next End Sub
Le premier tableau imbriqué dans le deuxième tableau du document est : ActiveDocument.Tables(2).Tables(1)