Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 17h40   #1
Invité régulier
 
Pierre ANTOINE
Inscription : novembre 2009
Messages : 34
Détails du profil
Informations personnelles :
Nom : Pierre ANTOINE

Informations forums :
Inscription : novembre 2009
Messages : 34
Points : 9
Points : 9
Par défaut Calculer le nombre de tableaux dans un fichier word

Bonjour,

J'ai créé une macro qui me permet de récupérer des données issus de tabelaux contenues dans un fichier Word vers un fichier Excel.

Mes questions :
Comment calculer le nombre de Tables dans mon fichier word?
Comment utiliser ce nombre de façon dynamique dans : For i = 1 To 65 (donc à la place de 65).


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub Imp_EVTS()
 
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
 
    Set WordApp = CreateObject("word.application")
    WordApp.Visible = True    'Word reste masqué pendant l'opéraion
    Set WordDoc = WordApp.Documents.Open("C:\IT2.docx")     
 
    ActiveDocument.Repaginate
    MsgBox ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)
 
      For i = 1 To 65
      WordDoc.Tables(i).Rows(1).Range.Copy
      Sheets("Feuil1").Select
      Range("A" & 1 + i).PasteSpecial xlPasteValues
      WordDoc.Tables(i).Rows(2).Range.Copy
      Range("B" & 1 + i).PasteSpecial xlPasteValues
      WordDoc.Tables(i).Rows(3).Range.Copy
      Range("C" & 1 + i).PasteSpecial xlPasteValues
      WordDoc.Tables(i).Rows(4).Range.Copy
      Range("D" & 1 + i).PasteSpecial xlPasteValues
      WordDoc.Tables(i).Rows(5).Range.Copy
      Range("E" & 1 + i).PasteSpecial xlPasteValues
      WordDoc.Tables(i).Rows(6).Range.Copy
      Range("F" & 1 + i).PasteSpecial xlPasteValues
      WordDoc.Tables(i).Rows(7).Range.Copy
      Range("G" & 1 + i).PasteSpecial xlPasteValues
 
   Next i
 
 
    'WordDoc.Tables(1).Rows(3).Range.Copy
    'Sheets("Feuil1").Select
 
    'Range("B1").PasteSpecial xlPasteValues
 
    WordDoc.Close
    WordApp.Quit
 
End Sub
Merci d'avance pour votre aide,
Pierrea4564 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 23h06   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
Salut,


On peut toujours faire une boucle sur les tableaux

Code :
1
2
3
4
5
6
7
dim oTbl As Table
 
For Each oTbl in ActiveDocument.Tables
...
...
...
Next oTbl
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2011, 23h11   #3
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Salut Pierrea,

Citation:
Envoyé par Pierrea4564 Voir le message
Comment calculer le nombre de Tables dans mon fichier word?
Code :
ActiveDocument.Tables.Count
Citation:
Comment utiliser ce nombre de façon dynamique dans : For i = 1 To 65 (donc à la place de 65).
La solution de Heureux-Oli fonctionne bien mais tu peux aussi utiliser
Code :
1
2
3
 
aNbTableaux = ActiveDocument.Tables.Count
For i = 1 To aNbTableaux
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h17   #4
Invité régulier
 
Pierre ANTOINE
Inscription : novembre 2009
Messages : 34
Détails du profil
Informations personnelles :
Nom : Pierre ANTOINE

Informations forums :
Inscription : novembre 2009
Messages : 34
Points : 9
Points : 9
Salut !
J'ai utilisé la solution de Sepia. Ca marche très bien.
Merci beaucoup !!!
Pierrea4564 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h49   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
Salut,

Si tu veux une boucle sur une variable, on peut alors gagner deux lignes de code.

Code :
For i = 1 to ActiveDocument.Tables.Count
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 23h19   #6
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Salut Pierrea4564,

Citation:
Envoyé par Heureux-oli Voir le message
Salut,

Si tu veux une boucle sur une variable, on peut alors gagner deux lignes de code.

Code :
For i = 1 to ActiveDocument.Tables.Count
Attention, c'est volontairement que j'ai utilisé une variable. En effet, en techniques algorithmiques, il ne faut pas utiliser un indice de boucle que tu fais varier dans ta boucle ou un indice de fin que tu fais varier. n effet, imagine que tu supprimes des tableaux ou que tu en dupliques, à chaque tour de boucle, la valeur ActiveDocument.Tables.Count est modifiée mais en fonction de paramètres assez subtils (comme le langage ou les options de compilation), cette valeur peut être chargée avant et ne pas réévaluée à chaque tour de la boucle ==> tu ne sais pas combien tu vas faire de tour. Pour les puristes, j'ai même un exemple d'une boucle avec une fin sur ActiveDocument.Tables.Count qui plante Word (Word 2003 PC mais pas Word 2004 Mac car sur Mac, Word est moins rapide donc l'OS lui dit qu'il le temps de recalculer, c'est trop fun) car elle contient une suppression de tableaux dans la boucle.

Comme ce cas n'est pas évident, j'ai préféré t'envoyer un code qui marche toujours pour une question purement didactique. Néanmoins le code d'Heureux-Oli fonctionne très bien (s'il n'y a pas de suppression/ajout de tableaux dans la boucle) et c'est souvent comme ça que j'utilise mes boucles sur des tableaux mais c'est parce que je sais ce que je fais (enfin, j'espère ).

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/02/2011, 09h08   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
Salut,

heu, si le nombre d'objets de la collection est changé, dans tous les cas on a une erreur.

Avec une variable
si j'ai deux tables, j'en ajoute une, seules deux seront traitées.
si j'ai deux tables, j'en supprime une, j'ai un indice de table qui n'existe plus.

Le retard d'actualisation de count, je n'ai pas encore rencontré.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 00h05   #8
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Salut,

Tu as raison, Heureux-Oli, il faut évidemment mettre à jour la variable sinon on a en effet le même problème.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h28.


 
 
 
 
Partenaires

Hébergement Web