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 :

Récupérer certaines lignes [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut Récupérer certaines lignes
    Bonjour,

    J'ai des documents words pouvant contenir des centaines de pages, avec des données à récupérer via une macro word.
    Nom : exigenceWord.png
Affichages : 604
Taille : 1,9 Ko
    Dans ces documents j'ai plusieurs fois ce type de données. Dans cet exemple chaque données est stockées sur une ligne, mais l'Exigence Texte peut être stockée sur plus d'une ligne.
    Chaque "ligne" ayant un style prédéfini à l'avance que je puisse récupérer celles-ci par vba. En plus la quatrième ligne a le même style que le reste du document du coup je sais juste qu'elle est comprises entre Exigence Nom et Exigence Fin
    Mais je n'y arrive pas, j'ai essayé de passer par Selection.Find en mettant la valeur du style dans .style, mais j'ai plusieurs fois la même ligne d'affilée:

    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
    16
    17
    18
    19
    20
    21
    22
     
    Public Sub TempTemp()
     
        Call getTexte("Exi_id", "Times New Roman", False)
        Call getTexte("Info", "Helvetica", True)
        Call getTexte("Exi_nom", "Times New Roman", False)
        Call getTexte("Texte", "Arial", False)
        Call getTexte("Exi_Trace", "Times", False)
    End Sub
     
    Private Sub getTexte(ByRef style As String, ByRef police As String, ByRef italic As Boolean)
        Selection.HomeKey Unit:=wdStory
     
        With Selection.Find
            .Forward = True
            .style = style
            .Font.Name = police
            .Execute
        End With
     
        Debug.Print Selection.style & ": " & Left(Selection.Text, Len(Selection.Text) - 1) & "|"
    End Sub
    Et le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Exi_id: Exigence ID
    Exi_id: Exigence ID
    Exi_nom: Exigence Nom
    Exi_nom: Exigence Nom
    Exi_nom: Exigence Nom
    Je suis plutôt habitué au vba Access mais pas Word, c'est pour ça que j'ai besoin de votre aide!

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Je rencontre des difficultés pour comprendre la finalité de ton document.
    Je pense qu'on devrait pouvoir y arriver autrement, mais j'ai besoin de mieux cerner tes buts.
    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 !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    C'est un peu difficile à expliquer correctement :p
    Mais depuis hier j'ai bien avancé et je récupère une partie des données que je veux.

    Alors:
    Je possède un document word (qui ressemble à un rapport), et qui contient quelques données que je dois récupérer via VBA.
    Ces données sont sous cette forme
    Nom : exigenceWord.png
Affichages : 585
Taille : 1,9 Ko
    En gros, la première ligne possède le style Exi_id, la deuxième Info, la troisième Exi_nom, la quatrième Texte (pas de style particulier) et la cinquième Exi_Trace.

    Il y a plusieurs blocs de ce style dans le word, et il faut que je puisse récupérer chacune de ces données en VBA pour les mettre ensuite dans un tableau.
    Les données de ces blocs sont tous sur une ligne SAUF "Exigence Texte" qui peut être sur plusieurs lignes.

    La seul chose qui me permet de différencier ces données du reste du document c'est leur style, j'ai donc utilisé Selection.Find pour les trouver.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub moveSelection(ByRef style As String)
        With Selection.Find
            .ClearFormatting
            .style = style
            .Execute
        End With
    End Sub
    Voila un exemple de document que je dois pouvoir traiter.
    Nom : exigenceWord2.png
Affichages : 581
Taille : 6,5 Ko
    Les données encadrés sont celles que je dois récupérer.

    Merci d'avance pour toute l'aide apportée, hésitez pas si vous avez besoin de plus d'informations

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Je pense qu'une boucle sur les paragraphes de ton document fonctionnerait mieux.

    Tu récupères en fonction du style du paragraphe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim oPar As Paragraph
     
    For Each oPar in ActiveDocument.PAragraphs
        ....
        ....
    Next oPar
    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 !

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Aaaah c'est super ça !
    J'avais réussi du coup via Selection.find mais bon pour toute ma méthode ça me prenait un grand nombre de ligne de code alors que là c'est tout simple de cette manière ^^

    Merci beaucoup je vais ajouter ça

  6. #6
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    J'ai une autre petite question avec ces paragraphes, certains titres du documents sont de ce style:
    Nom : titre.png
Affichages : 567
Taille : 2,0 Ko
    Sauf que quand je fais
    oPar.Range.Text je ne reçois que "Document" et pas le "1." qui est devant (et j'en ai besoin)

    Comment faire?...

    Merci d'avance

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Dans ton code précédent, tu récupérais cette valeur ?

    Mais tu peux récupérer cette valeur avec oPar.Range.ListFormat.ListString
    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 !

  8. #8
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Du coup c'était bien cette formule là que je cherchais (mais je l'avais trouvé dans la matinée :p)

    Merci quand même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer certaines lignes spécifiques avec grep sed
    Par hackmed dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 09/09/2015, 11h09
  2. [PowerShell] Comment récupérer certaines lignes d'un fichier pour ensuite s'en servir
    Par Zipper963 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 13/12/2012, 16h35
  3. [PowerShell] Récupérer certaines lignes d'un fichier txt dans un autre
    Par TanKer dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 16/11/2011, 22h31
  4. Récupérer certaine lignes d'un fichier
    Par piktux dans le forum Général Python
    Réponses: 37
    Dernier message: 09/02/2010, 10h46
  5. Récupérer certaines lignes contenu dans un tableau
    Par alexbts dans le forum Langage
    Réponses: 14
    Dernier message: 27/01/2009, 18h03

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