IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Traitement des tableaux de word avec VBA: balise index


Sujet :

VBA Word

  1. #1
    Invité
    Invité(e)
    Par défaut Traitement des tableaux de word avec VBA: balise index
    Bonjour,

    Je suis ingénieur (informatique) specialisé dans le controle moteur. VBA n'est pas vraiment mon metier.

    Je fais des specifications logicielles temps réél. J'ai des tableaux word qui référencent les variables en entrée et les variables en sortie.

    Afin de construire une liste de référence croisé pour la totalité des specifications, je veux lire le conrenu de chaque cellule du tableau jusq'a la fin du tableau (de taille variable) copier le contenu, ajouter la balise XE avec Def ou Ref.

    Mon principal problème est de naviguer dans le tableau cellule après cellule, jusqu'a detecter un cellule vide ou une fin de tableau.

    Les methodes que j'ai utilisé ne marchent pas du tout. j'utilise Selection.MoveRight Unit:=wdCell, Count:=1 qui cree une cellule si elle n'exsiste pas

    Merci.
    Si qq a besoin d'information sur les calculateurs d'injection et d'allumage, je peux l'aider.
    Roger

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Word n'est peut-être pas l'outil le plus approprié... Mais peut-être est-ce une question de présentation.
    Sinon, pour la navigation dans un tableau Word, as-tu regardé dans la FAC?
    http://bidou.developpez.com/faqvba/?page=2.1.1

    Tu nous dis

    A+

  3. #3
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Je viens de tester ça sous Office 97
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub ParcourirTableau()
        Dim r As Integer, c As Integer
        Dim indice As Integer
        indice = 1 ' La collection Tables commence à 1
        'sélectionne la première cellule du premier tableau
        ActiveDocument.Tables(indice).Cell(0, 0).Select
        For r = 1 To ActiveDocument.Tables(indice).Rows.Count
            For c = 1 To ActiveDocument.Tables(indice).Columns.Count
                ActiveDocument.Tables(indice).Cell(r, c).Select
                ' Modifie le contenu de la cellule
                Selection.TypeText Text:=Str(r) & ", " & Str(c)
            Next c
        Next r
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup! c'est une solution simple et efficace bien plus simple que toutes les fonctions avancée de VBA mais question suplementaire : comment connaitre la taille du tableau lorsque on pointe sur la première cellule. (le tableau existe déjà et de taille variable).

    :

  5. #5
    Invité
    Invité(e)
    Par défaut
    Desolé pour la deuxieme question elle est stupide, l'utilisation de "count" répond à ma question.

    Je commençai serieusement à fulminer sur ma faible productivité

    J'espère pouvoir rendre un service similaire.

  6. #6
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Y'a rien à dire: Zazaraignée, c'est du solide!!
    Excel, Word... Rien ne lui résiste !!


  7. #7
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Mouaip!

    Parce que l'enregistreur de macro est mon ami!

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'ai longuement testé la solution qui m'a été donné. Elle me permet de resoudre plusieurs problèmes. merci encore !

    Malheuresement j'ai un nouveau probleme: Dans cette solution il est necessaire de connaitre l'indice du tableau sur lequel on travaille.

    La methode que j'emploie consiste
    1/ à rechercher un mot clé : Input data
    2/ a aller au tableau suivant en dessous du mot clé
    3/ à rechercher l'indice du tableau ou se situe les point d'insertion
    4/ A copier le contenu de chaque cellule
    5/ A ajouter a bascule XE + "Ref"

    Le point critique est le n°3

    Si je fait
    "IndiceTable = ActiveDocument.Tables.Count"
    indiceTable = nombre de tableau dans le document
    >>>Mauvaise solution

    Si je fait par les macro d'apprentissage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext, Count:=1, Name:=""
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = ""
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Tables(1).Select
    Si je teste la valeur de count par la suite il vaut 1
    >>>Mauvaise solution

    Merci à l'avance

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Essaie ça et précise ce que tu cherche à obtenir, à partir de là, je peux "peut-être" t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NbreTableau = ActiveDocument.Tables.Count
    MsgBox NbreTableau
    With ActiveDocument
        .Tables(2).Select
    End With
    A+

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Comme l'avait suggéré ouskel'n'or, ne pourrais-tu travailler dans Excel et importer le résultat dans Word?

    Je sais que c'est une manière de contourner le problème mais Excel était optimisé pour le traitement de tableaux, je pense que cette solution éviterait pas mal de recherches.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je t'ai donné une solution avec l'index du tableau mais il en existe une autre : Tu sélectionnes tour à tour tes différents tableaux, avec la procédure précédente et tu attribues un signet à chacun au passage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With ActiveDocument.Bookmarks
            .Add Range:=Selection.Range, Name:="Tableau1" ' ou 2 ou 3...
            .DefaultSorting = wdSortByName
            .ShowHidden = False
        End With
    Ainsi, le signet désigne le tableau entier.

    Ensuiite, pour accéder à ton tableau, tu "l'atteins" avec la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Selection.GoTo What:=wdGoToBookmark, Name:="Tableau1"
    L'avantage est qu'ainsi tu te libères de l'index.

    A+

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Et puis, comme j'avais cinq minutes, pour attribuer le nom que tu veux à tous tes tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    NomTableau = array("", "Références1", "Références2", "Synthèse") 'etc
    NbreTableau = ActiveDocument.Tables.Count 
    For i = 1 to NbreTableau 
        With ActiveDocument 
             .Tables(i).Select 
        End With
        With ActiveDocument.Bookmarks 
            .Add Range:=Selection.Range, Name:=NomTableau(i)
            .DefaultSorting = wdSortByName 
            .ShowHidden = False 
        End With
    Next
    Voilà, j'ai fini de jouer...

    A+

  13. #13
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    J'ai pas tout compris le problème... Ça m'arrive!

    Mais à vue de nez (que j'ai long, d'ailleurs. Il est donc constamment dans mon champ visuel...) on dirait que tu as besoin des fonctions RechercheV de Excel.

    Regarde dans l'aide de Excel (pas de VBA) pour les fonctions (formules de cellules) RechercheV et RechercheH. Personnellement, je préfère RechercheV qui correspond mieux à ce que l'on fait avec les Tableaux Excel. Il faut cependant que les données soient physiquement sur une feuille de calcul (plutôt qu'un tableau en mémoire).

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    zaza ?

    C'est un oubli ou tu as mal dormi ? Non, c'est le cours de réseaux qui te perturbe... ou la la pluie sur Rimouski... Roger Rouphael est sur Word... même si Excel serait en effet plus approprié...

    A+

  15. #15
    Invité
    Invité(e)
    Par défaut
    Désolé, je n'avais pas vu la réponse

    Sur ce que je veux faire:

    Je construit des cahiers de charge logiciel pour des calculateurs de controle moteur.

    Chaque fonctions moteur comme l'allumage au démarrage fait l'objet d'une specification. l'ensemble des specifications fait un cahier de charge.

    Ce document est utilisé d'une part par l'informaticien pour le codage ET le Metteur au point qui règle la moto (4000 paramètres).

    Afin de faciliter l'utilsation du document assemblé. Chaque fiches contient
    4 tableaux qui sont:

    INPUT DATA: les variables importées et utiliséss dans la fiche
    OUPUT DATA:les variables crées dans la fiche et exporté ailleurs
    CALIBRATION DATA: les constante ou cartographie servant au réglage de la moto
    ORDINATE DATA: Les index qui pointent sur les cartographies

    L'objectif est de construire une table de référence croisée qui permet d'identifier les variables et les constantes affichées dans l'outil de calibration de la moto.

    Par exemple

    La variable Regime moteur: Def: p238, Ref: p1,p3,p24,p234
    Régime est défini page 238 et utilisé page page 1,2 etc

    Pour ce faire j'utilise les insertion de balise XE disponible.

    Quand je rencontre le mot clé INPUT DATA, je recherche le premier tableau dessous, je remplace toustes les noms de variables comme "Régime" par" Régime {XE:Ref Régime}".

    Quand je rencontre le mot clé OUTPUT DATA, je recherche le premier tableau dessous, je remplace toustes les noms de variables comme "Pression" par "Pression {XEef Pression}".

    Une fois le document cahier de charge assemblé, j'insère la table de référence croisée en entête

    Un attachement permetrait de mieux comprendre...Je ne sais pas si c'est possible.

    Merci :

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello,

    Lisant tes explications, pas de doute : Excel est l'outil approprié. En outre, avec les tableaux croisés dynamiques, tu résoudrais un problème pour lequel, dans Word... tu aurais un gros problème.
    Sans entrer dans le fond, je décrirais le classeur ainsi :

    Une feuille 1 INPUT DATA: les variables importées et utiliséss dans la fiche
    Une feuille 2 OUPUT DATA:les variables crées dans la fiche et exporté ailleurs (à partir des données de la feuille 1 ? - c'est une question)
    Une feuille 3 CALIBRATION DATA: les constante ou cartographie servant au réglage de la moto
    Une feuille 4 ORDINATE DATA: Les index qui pointent sur les cartographies (pointant sur la feuille 3

    Cette structure ne pose aucun problème avec Excel. Quant à la présentation, si c'est là ton pb, tu peux faire ça sur une feuille 5 dans laquelle tu pourrais faire référence aux données des quatre feuilles précédentes.

    Si tu as un pb concret pour faire ça, on peut t'aider.

    A+

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je réponds à ta dernière observation :
    Un attachement permetrait de mieux comprendre...Je ne sais pas si c'est possible
    Il faudrait que tu trouves un site où tu pourrais héberger ton projet. Je ne peux pas t'en indiquer mais tu devrais pouvoir trouver ça.

    A+

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello,

    Je reprends depuis le début avec l'hypothèse Excel

    Une feuille 1 INPUT DATA: les variables importées et utiliséss dans la fiche
    Ma question : D'où viennent les données ? Saisies manuellement ? Importées depuis un autre document ? De quel type ? tcétéra...

    Une feuille 2 OUPUT DATA:les variables crées dans la fiche et exporté ailleurs (à partir des données de la feuille 1 ? - c'est une question)
    Tu n'a pas répondu à ma question
    Dans l'affirmative, un calcul est-il effectué entre la feuille 1 et les données collées dans la feuille 2 ?

    Une feuille 3 CALIBRATION DATA: les constante ou cartographie servant au réglage de la moto
    Qu'appelles-tu cartographie ? Un plan ou une énumétation ? Avec variables ? Prises où ? ...

    et enfin,
    Une feuille 4 ORDINATE DATA: Les index qui pointent sur les cartographies (pointant sur la feuille 3
    Une feuille de rapport ? Ça c'est simple et facile à réaliser.

    Tu dis...

    A+

  19. #19
    Invité
    Invité(e)
    Par défaut
    Le sujet est enfin clos.
    Après vos nombreux conseils excelents, j'ai fini par trouver la solution.

    Le fond du problème est qu'il n'est pas possible de connaitre le numéro du tableau sous word.

    Par contre on peut parcourir tous les tableaux les uns après les autres et consulter chaque cellule en parcourant l'indice du tableau et les indices ligne colonnes.

    prenant en compte cette contrainte, j'ai rentré les mots clés "input data" "output data" etc à l'intérieur du tableau et non pas à l'extrieur du tableau comme precedemment.

    A partir de là c'est facile, il suffit d'inérogger la premiere cellule de chaque tableau etc.....

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bien si tu as résolu le problème mais tu mets

    Le fond du problème est qu'il n'est pas possible de connaitre le numéro du tableau sous word.
    Avec le code "Posté le: Mer Oct 26, 2005 10:15" tu pouvais affecter un nom à tes tableaux et t'y rendre sans difficultés... Mais tu as trouvé tout seul un palliatif... je ne vais pas t'enlever le plaisir.
    Juste pour info donc (et après avoir exécuté la macro citée ci-dessus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub AtteindreLaPremièreCelluleDuTableauQuonVeut()
        NomTableau = Array("", "Références1", "Références2", "Synthèse") 'etc
        'Je veux atteindre la 1ère cellule du tableau Références2
        Selection.GoTo What:=wdGoToBookmark, Name:=NomTableau(2) 'Place sur le tableau "Référence2"
        Selection.MoveLeft Unit:=wdCharacter, Count:=1  'Place sur la 1ère cellule du tableau
    End Sub
    C'était juste pour dire...

    A+

    A+

Discussions similaires

  1. Ouvrir differents fichiers Word avec VBA
    Par karina218 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2007, 10h10
  2. Ouvrir un fichier word avec VBA Access
    Par alainb dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/10/2007, 21h57
  3. manipulation des fichiers et dossiers avec VBA excel
    Par GBAGO dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/07/2007, 23h30
  4. Manipulation d'un tableau sous Word avec vba
    Par Françoise Sagan dans le forum VBA Word
    Réponses: 1
    Dernier message: 02/12/2006, 13h54
  5. Comment parcourir une ficher word avec VBA?
    Par megapacman dans le forum VBA Word
    Réponses: 6
    Dernier message: 17/11/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo