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 :

Trouver un titre dans un document et inclure un signet à la suite du titre [WD-2010]


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Trouver un titre dans un document et inclure un signet à la suite du titre
    Bonjour à tous,

    Je débute depuis peu les macros VBA sous Word. Aujourd'hui, je travaille sur un fichier Word doté d'une arborescence du type :
    1 Titre 1 (style Titre1)
    1.1 Sous-titre 1 (style Titre2)
    Texte tata
    1.2 tonton
    2 tata

    Ma problématique est la suivante: parmis les titres dont le style est Titre1, je cherche "tata". (tata peut se trouver dans le texte d’un autre paragraphe mais je ne souhaite pas prendre ce "tata" en considération)
    Quand j’ai trouvé "tata", je souhaite inclure juste après un signet (monSignet par exmple). Petite difficulté supplémentaire, une table des matières existe et je ne veux pas chercher "tata" dedans.

    Par ailleurs, je dispose de tableaux que j’inclus dans ce document. (ça, c’est bon, je maitrise)
    Je souterais créer un titre style Titre2 juste avant chaque tableau. Le texte de chaque titre serait la cellule (1ère ligne, 2ème colonne) du tableau le suivant.

    Demande: quelqu'un aurait une piste pour me lancer dans mon chantier car pour l'instant je ne trouve rien de probant sur l'internet mondial pour répondre à ma problématique?

    Je vous remercie par avance de votre aide et d'avoir lu jusque là!

    Tanoffy

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Une boucle sur les paragaphes.
    Si le style est le bon, on recherche le mot voulu.

    On élimine d'office la table des matières qui est en style TM.


    Pour les tableaux, c'est aussi avec une boucle sur les tableaux et un déplacement après selection.
    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
    Futur Membre du Club
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour Heureux-oli,

    Merci pour votre prompte réponse!

    J'ai commencé à travailler selon votre proposition sur la boucle concernant les paragraphes.

    J'en arrive aux quelques lignes de code qui suivent:

    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 test()
     
    For Each monParagraphe In ThisDocument.Paragraphs
        If monParagraphe.Style = ThisDocument.Styles("Titre 1") Then
            MsgBox monParagraphe.Range 'vérification du bon fonctionnement de la boucle SI pour le style
            If monParagraphe.Range.Text = "Tata" Then
               MsgBox "trouvé!" 'vérification du bon fonctionnement de la boucle SI pour le texte du titre cherché
               Exit For
               Else: MsgBox "pas trouvé"
            End If
        End If
    Next monParagraphe
     
    End Sub
    La procédure me renvoie bien le nom des titres mais ma ligne testant si le texte est "Tata" me renvoie systématiquement "pas trouvé" même si dans le document, il y a bien un titre "Tata" en style Titre 1.

    Je suppose que le problème vient de monParagraphe.Range.Text mais je ne comprends pas où est l'erreur.

    Bonne soirée,
    Tanoffy

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Dans le paragraphe, il faut soit faire une recherche, soit utiliser la fonction InStr().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestSurPara()
    Dim oPar As Paragraph
     
    For Each oPar In ActiveDocument.Paragraphs
    If oPar.Range.Style = "Titre 1" Then
        Debug.Print InStr(1, oPar.Range.Text, "titre")
    End If
    Next oPar
     
    End Sub
    Dans cet exemple, si le mot titre se trouve dans le paragraphe, InStr renvoie la position du premier caractère du mot dans le paragraphe.
    Si c'est 0, le mot n'est pas dans le paragraphe.

    On peut aussi faire une recherche, mais alors il faut sélectionner le paragraphe.
    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
    Futur Membre du Club
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour Heureux-oli,

    Merci de votre aide. J'ai pu adapter votre code à mon besoin et ça fonctionne comme je le souhaite.

    A présent, je souhaite inclure un saut de page entre chaque tableau mais pas après le dernier:

    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
    Sub InclureTable()
     
    Dim oTab As Table
    Dim MonFichier As Documents
     
    For Each oTab In MonFichier.Tables
        oTab.AutoFitBehavior (wdAutoFitWindow)
        oTab.AutoFitBehavior (wdAutoFitContent)
        oTab.Range.Copy
     
        ThisDocument.Bookmarks("MonSignet").Range.Select
     
        Selection.Collapse Direction:=wdCollapseStart
        Selection.MoveLeft unit:=wdCharacter, Count:=1
     
        Selection.PasteAndFormat (wdFormatOriginalFormatting)
        Selection.Paragraphs.Add
        Selection.InsertBreak Type:=7
     
     Next oTab
     
    End Sub
    Je pensais tester si je suis au dernier tableau de MonFichier mais je ne sais pas comment faire. (Si oTab = dernier tableau de MonFichier then Instruction)

    Par ailleurs comment puis-je ajouter un titre précédent chaque tableau et dont le texte est la valeur d'une cellule du tableau. Je comprends la logique à suivre mais je ne vois pas comment la coder.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Avec une boucle sur les tableaux et éventuellement un test pour le dernier.

    Pour la boucle, on peut utiliser la collection ou les indices.

    Il faut faire une selection et un déplacement de selection pour ajouter le saut de page.

    Pour la collection d'objets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim oTbl As Table
    For Each oTbl In ActiveDocument.Tables
     
    oTbl.Select
     
    Selection.Collapse (wdCollapseEnd)
    Selection.InsertBreak (wdPageBreak)
     
     
    Next oTbl
    Ce code insère aussi un saut de page après la dernière table.

    On peut le faire avec un compteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim intI As Integer
     
    For intI = 1 To (ActiveDocument.Tables.Count - 1)
     
    ActiveDocument.Tables(intI).Select
    Selection.Collapse (wdCollapseEnd)
    Selection.InsertBreak (wdPageBreak)
     
    Next intI
    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 !

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonsoir Heureux-Oli,

    Merci encore de votre réponse. Avec un peu de bidouille, j'ai pu adapter votre code à mon besoin et ça marche très bien.

    J'ai d'autres problématiques mais je commence à sérieusement m'éloigner du sujet initial de cette discussion.

    Bonne soirée,

    Tanoffy

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

Discussions similaires

  1. Inclure du code c++ dans un document
    Par iut26 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/07/2009, 12h39
  2. Numérotez vos titres dans un document Word
    Par Heureux-oli dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/11/2008, 08h43
  3. Inclure une bibliographie dans un document
    Par Butterfly83 dans le forum Bibliographies - Index - Glossaires
    Réponses: 1
    Dernier message: 14/09/2007, 17h11
  4. [COM] Trouver des mots dans des PDF et autres documents ?
    Par zyongh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/11/2006, 14h23
  5. Trouver tous les objets d'un certain type dans un document?
    Par kobe dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 03/11/2005, 17h07

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