Effacer une ligne entière d'un document word si le signet est vide

Bonjour,

J'ai un document word, tableau, avec sur la même ligne du texte et des signets identiques aux named range déclarés dans Excel. Le code ci-dessous remplit un signet avec la valeur du named range :

Sub FillDoc()
' Copie et renomme le fichier avec les infos du client
Dim NomClient As String
Dim VBook As Object

NomClient = ThisWorkbook.Path & "\" & [Ref_Client].Value & ".docx"
FileCopy ThisWorkbook.Path & "\Template Client.docx", NomClient '
Set VBook = CreateObject("Word.Application")
VBook.Visible = True
VBook.documents.Open NomClient
If [Ref_Prod00].Value <> "" Then
VBook.activedocument.Bookmarks("Ref_Prod00").Range.Text = [Ref_Prod00].Value
Else
' <- Je voudrais nettoyer la ligne entière si le signet est vide
End If
End Sub

Aucun problème si le named range n'est pas vide. Mais je sèche dans l'autre cas. La validité des données, existence etc... est testée en amont.

Si une bonne âme avait une piste à me proposer ?

Bonjour,

Une question assez bete c'est qu'on ne sait pas si vous voulez nettoyer la ligne dans Excel ou dans Word.

Si c'est celle dans Word, essayez :

VBook.activedocument.Bookmarks("Ref_Prod00").Range.Delete

Merci pour la réponse,

C'est bien la ligne du document Word que je souhaite effacer.

Code suivant testé :

Sub FillDoc()
' Copie et renomme le fichier avec les infos du client
Dim NomClient As String
Dim VBook As Object
Dim RngTest As Range

    NomClient = ThisWorkbook.Path & "\" & [Ref_Client].Value & ".docx"
    FileCopy ThisWorkbook.Path & "\Template Client.docx", NomClient '
    Set VBook = CreateObject("Word.Application")
    VBook.Visible = True
    VBook.Documents.Open NomClient
    If [Ref_Prod00].Value <> "" Then
        VBook.activedocument.Bookmarks("Ref_Prod00").Range.Text = [Ref_Prod00].Value
        MsgBox VBook.activedocument.Bookmarks("TSC_Cheese").Range.Text    ' <- Rends "", Anormal. Question de sélection à vérifier cf. infea
    Else
       MsgBox [Ref_Prod00].Value ' <- Rends "", Normal
       VBook.activedocument.Bookmarks("Ref_Prod00").Range.Delete

    End If
End Sub

Le code s'exécute mais ne change rien au document final. Je vais essayer en sélectionnant d'abord la ligne où se trouve le signet puis tenter de l'effacer.

Curieusement, tout ce que je vois sur le net n'indique que "activedocument" puis les méthodes qui s'y appliquent. Ici, si je ne mentionne pas spécifiquement VBook, j'ai une erreur de compilation. A creuser également.

My bad.

Si je remplace "TSC_Cheese" par "Ref_Prod00", j'ai le même résultat qu'écrit supra.

Curieusement, tout ce que je vois sur le net n'indique que "activedocument" puis les méthodes qui s'y appliquent. Ici, si je ne mentionne pas spécifiquement VBook, j'ai une erreur de compilation. A creuser également.

C'est que les exemples que vous voyez traitent du cas de code VBA dans Word directement, sans passer par Excel. L'application mère est alors Word et le document actif, le document word actif (c'est l'équivalent Word de ActiveWorkbook pour Excel).

Bon j'avoue que je n'y connais pas grand chose en VBA pour Word et surtout c'est assez compliqué d'identifier une ligne apparemment, on travaille plutôt avec des paragraphes normalement.

Un autre essai qui met en évidence le paragraphe contenant votre Bookmark : (remplacez Select par Delete si ça fonctionne).

VBook.activedocument.Bookmarks("Ref_Prod00").Range.Paragraphs(1).Range.Select

Merci pour la précision sur le VBA Word, c'est difficile d'identifier parfois ce qui dépends de Word et d'Excel. Et je suis un newb en VBA Word.

En travaillant sur la fonction Table, j'arrive au résultat souhaité à savoir, pour le named range "ref_Prod00" d'effacer la ligne ou le Bookmark corespondant se trouve dans le document Word

VBook.activedocument.Tables(1).Rows(3).Delete

Sauf que Rows doit être écrit en dur, et même si le tableau ne fait que 334 lignes actuellement, il devrait aller jusqu'à presque 1000. Le code,

VBook.activedocument.Tables(1).Rows.Count

me permet de faire éventuellement une boucle For Next (ou While Wend avec des gardes fou) sur chaque rangée, mais c'est bien plus long que de traiter le cas en une seule passe. Le problème du jour revient à identifier la ligne correspondante au Bookmark voulu.

Je suis preneur de toute piste

Ah mais vous voyez comme c'est important d'utiliser un vocabulaire clair et précis !! C'est fondamental de dire que vous travaillez dans un tableau !! Une ligne dans Word, a priori elle n'est pas dans un tableau. Ca change tout.

Bon dans ce cas, d'après la doc une solution de ce type devrait fonctionner :

VBook.activedocument.Bookmarks("Ref_Prod00").Range.Rows(1).Delete

Parce que le range du bookmark contient déjà l'information de la position de la ligne dans le tableau, donc pas besoin de la calculer, il suffit de prendre "1".

Le tableau est mentionné dès le premier message (^_-)

En tout cas, ça marche!

Merci beaucoup pour l'aide.

Content d'aider Je n'avais pas bien compris.

Bonne journée

Rechercher des sujets similaires à "effacer ligne entiere document word signet vide"