none
Pilotage Word - Création de signet RRS feed

  • Question

  • Bonjour,

    Je sollicite (à nouveau) votre bienveillance.

    J'ai créé une application qui génère des documents Word sur la base de modèles.

    Mes modèles contiennent des signets que je viens remplacer par du texte par la syntaxe suivante : 

    odoc.bookmarks.item("nom_du_signet").range.text = variable
    
    

    ou supprimer par la suivante :

    odoc.bookmarks.item("nom_du_signet").range.delete

    Mon problème est : 

    Je veux repérer un paragraphe par son contenu.

    Et créer un signet sur ce paragraphe.

    Le tout en utilisant du code et pas l'interface Word!

    Par exemple : 

    "Ceci est mon texte.

    Voici le paragraphe a définir comme signet

    Ceci est la fin de mon texte"

    Dans cet exemple, il faudrait ajouter un signet sur le groupe de mot "Voici le paragraphe a définir comme signet"

    Comment faire ?

    Je suppose qu'il faut utiliser :

    odoc.bookmarks.add("nom_du_signet")

    mais comment choisir sa position ?

    Merci d'avance,

    Application avec VB.NET

    office 2010 (au cas ou ce serait différent en fonction des versions)


    vendredi 17 août 2012 14:28

Réponses

  • Bonjour,

    Voici un code que vous pouvez essayer :

            For Each paragraph As Paragraph In doc.Paragraphs
    
                ' Si le paragraph contient la phrase : "Voici le paragraphe a définir comme signet"...
                If paragraph.Range.Text.Contains("Voici le paragraphe a définir comme signet") = True Then
    
                    '... Ajouter une signer sur la paragraphe
                    doc.Bookmarks.Add("<nom signet>", paragraph.Range)
    
                End If
    
            Next
    Ce code parcours tous les paragraphes à la recherche de votre texte. Si le texte recherché est trouvé, alors un signet est ajouté pour le paragaphe.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 20 août 2012 22:53
    Modérateur
  • Bonjour Fabien69,

    Par exemple :

        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            If ExistBookmark(TextBox1.Text) Then
                MessageBox.Show(TextBox1.Text + " est présent")
            Else
                MessageBox.Show(TextBox1.Text + " est absent")
            End If
        End Sub
    
        Private Function ExistBookmark(bmName As String) As Boolean
            For Each bm As Bookmark In oDoc.Bookmarks
                If bm.Name.ToUpper = bmName.ToUpper Then
                    ExistBookmark = True
                    Exit Function
                End If
            Next
        End Function


    Cordialement, Jacques

    samedi 25 août 2012 11:34
  • ou, sans fonction :

    Dim bm As Bookmark
    
    Try
        bm = oDoc.Bookmarks("MonSignet")
    Catch ex As Exception
        MessageBox.Show("Le signet n'existe pas")
    End Try
    If Not bm Is Nothing Then
        MessageBox.Show(bm.Name)
    End If


    Cordialement, Jacques

    samedi 25 août 2012 11:52

Toutes les réponses

  • Bonjour,

    Il faut utilisez la méthode "Bookmarks.Add()" qui prend en paramètre une sélection (Range).

    Cette sélection se fait avec la méthode Range() du document :

    Dim r As Range = doc.Range(16, 64)
    doc.Bookmarks.Add("<nom signet>", r)
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 19 août 2012 21:42
    Modérateur
  • Merci de l'informations.

    Mais a quoi corresponde 16 et 64 ?

    Et comment lui dire que ce Range(16,64) est l'emplacement de la phrase "Voici le paragraphe a définir comme signet".

    Je tiens à préciser que la position de cette phrase varie dans le document.

    J'ai bien une idée mais, ça ne fonctionne pas : 

    Dim oword As Word.Application Dim oDoc As Word.Document oword = CreateObject("Word.Application") oword.Visible = True oDoc = oword.Documents.Add("C:\Users\ac\Desktop\Doc1_test.docx") Dim variable_test As String = "Voici le paragraphe a définir comme signet" Dim opara As Word.Paragraph opara = oDoc.Find(variable_test) ' C'est ici qu'il y a une erreur. oDoc.Bookmarks.Add("Nouveau-signet", opara)


    Merci du coup de main.

    Cordialement,


    • Modifié Fabien69 lundi 20 août 2012 08:28
    lundi 20 août 2012 08:27
  • Bonjour,

    Voici un code que vous pouvez essayer :

            For Each paragraph As Paragraph In doc.Paragraphs
    
                ' Si le paragraph contient la phrase : "Voici le paragraphe a définir comme signet"...
                If paragraph.Range.Text.Contains("Voici le paragraphe a définir comme signet") = True Then
    
                    '... Ajouter une signer sur la paragraphe
                    doc.Bookmarks.Add("<nom signet>", paragraph.Range)
    
                End If
    
            Next
    Ce code parcours tous les paragraphes à la recherche de votre texte. Si le texte recherché est trouvé, alors un signet est ajouté pour le paragaphe.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 20 août 2012 22:53
    Modérateur
  • Ok, merci cela fonctionne très bien.

    Encore une petite question :

    J'ai également besoin de tester l'existence d'un signet. 

    Pour tester un fichier j'avais l'habitude d'écrire : 

    if exists("C:....") then

    Je suppose qu'il existe également une méthode pour faire cela avec un signet.

    Merci d'avance.

    Cordialement,

    mardi 21 août 2012 08:09
  • personne?
    samedi 25 août 2012 10:09
  • Bonjour Fabien69,

    Par exemple :

        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            If ExistBookmark(TextBox1.Text) Then
                MessageBox.Show(TextBox1.Text + " est présent")
            Else
                MessageBox.Show(TextBox1.Text + " est absent")
            End If
        End Sub
    
        Private Function ExistBookmark(bmName As String) As Boolean
            For Each bm As Bookmark In oDoc.Bookmarks
                If bm.Name.ToUpper = bmName.ToUpper Then
                    ExistBookmark = True
                    Exit Function
                End If
            Next
        End Function


    Cordialement, Jacques

    samedi 25 août 2012 11:34
  • ou, sans fonction :

    Dim bm As Bookmark
    
    Try
        bm = oDoc.Bookmarks("MonSignet")
    Catch ex As Exception
        MessageBox.Show("Le signet n'existe pas")
    End Try
    If Not bm Is Nothing Then
        MessageBox.Show(bm.Name)
    End If


    Cordialement, Jacques

    samedi 25 août 2012 11:52