Suppression de pages dans Word en fonction de valeurs dans Excel

Bonjour,

J'ai construit un VBA qui me permet d'exporter plusieurs zones de données de mon fichier Excel vers un fichier Word, en utilisant un Word template et des bookmarks.

Cependant, il arrive que, certains bookmarks restent vides car aucune donnée présentes dans mes zones de données dans Excel. Quand le template se lance, les pages sans données s'affichent quand même. Le bookmark apparait mais n'est donc pas remplacé par mes données d'Excel. (ex avec le bookmark "OVER51"). J'aimerais que, dans ce cas de figure, cette page se supprime.

Pour éviter toute action supplémentaire de la part des utilisateurs de ce fichier, je souhaiterais trouver un code qui supprimerait les pages sans grands intérêts.

image

Je n'ai malheureusement pas pu trouver de cas identiques sur le forum, mais j'ai pu en trouver qui se rapproche un peu de mon besoin, sauf que dans ce cas, seuls les bookmarks sont supprimés et non pas les pages :

Sub CreateWordDocument()
'Note: This code requires a VBA reference to Word, via Tools|References
Dim xlSht As Worksheet, wdApp As New Word.Application, wdDoc As Word.Document, lRow As Long, r As Long
Set xlSht = ActiveSheet: lRow = xlSht.UsedRange.Cells.SpecialCells(xlCellTypeLastCell).Row
With wdApp
  'Show the Word session
  .Visible = True
  ' create a new Word Document based on the specified template
  Set wdDoc = .Documents.Add("C:\MyTemplate.dotm")
  With wdDoc
    'loop through used range and process the corresponding Word bookmarks
    For r = 1 To lRow
      If .Bookmarks.Exists(xlSht.Range("A" & r).Text) Then
        'Erase designated bookmark content
        If xlSht.Range("B" & r).Value = 0 Then
          .Bookmarks(xlSht.Range("A" & r).Text).Range.Text = vbNullString
        End If
      End If
    Next
  End With
  .Activate
End With
'MEMORY CLEANUP
Set wdDoc = Nothing: Set wdApp = Nothing: Set xlSht = Nothing
End Sub

Je vous fais suivre ci-dessous un échantillon de mon fichier Excel qui indique les pages à garder et à supprimer suivant l'état du Bookmark.

Word BookmarksPages with content = 1 / Pages to remove = 0
OVER11
OVER500
OVER510

(j'ai plus de 60 bookmarks au total)

Merci par avance ! :)

Thomas

Bonjour TBR68 et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum

Ainsi que sur les fonctionnalités (Nouveau Forum au bas de page notamment)

Sinon, pour moi tout se passe ici

If xlSht.Range("B" & r).Value = 0 Then
  .Bookmarks(xlSht.Range("A" & r).Text).Range.Text = vbNullString
End If

Il faut peut-être essayer un truc du style

If xlSht.Range("B" & r).Value = 0 Then
  .Bookmarks(xlSht.Range("A" & r).Text).Delete
End If

Bonne participation

Bonjour BrunoM45,

Merci pour ton retour, j'ai pris le temps d'effectuer les modifications que tu as pu apporter au code. Cependant, cela ne fonctionne pas.

Ca m'a permis de réfléchir à une autre approche, je touche au but, mais je bloque toujours, malheureusement.

Je ne change pas la structure de mon code, j'ajoute une étape intermédiaire avant de pouvoir supprimer la/les page souhaitée(s) dans mon Word.

Sub CreateWordDocument2()
Dim xlSht As Worksheet, wdApp As New Word.Application, wdDoc As Word.Document, lRow As Long, r As Long
user = Environ("Username")
desktop = "C:\Users\" & user & "\xxx\xxx - Quotation Tool - General\"
Set xlSht = ActiveSheet: lRow = xlSht.UsedRange.Cells.SpecialCells(xlCellTypeLastCell).Row
With wdApp
  'Show the Word session
  .Visible = True
  ' create a new Word Document based on the specified template
  Set wdDoc = .Documents.Add("C:\Users\" & user & "\xxx\xxx- Quotation Tool - General\testwordcopy.dotx")
  With wdDoc
    'loop through used range and process the corresponding Word bookmarks
    For r = 1 To lRow
      If .Bookmarks.Exists(xlSht.Range("A" & r).Text) Then
        'Move to designated bookmark content
            If xlSht.Range("B" & r).Value = 0 Then
            .Bookmarks(xlSht.Range("A" & r).Text).Select
        'Select the whole page for deletion
            .Bookmarks("\Page").Select
            Selection.Delete
             End If
      End If
    Next
  End With
  .Activate
End With
'MEMORY CLEANUP
Set wdDoc = Nothing: Set wdApp = Nothing: Set xlSht = Nothing
End Sub
J'ai ajouté cette approche :
        'Select the whole page for deletion
            .Bookmarks("\Page").Select
            Selection.Delete

La page dans Word se sélectionne comme souhaitée, cependant l'action de suppression ne s'effectue pas. Mon approche est très certainement incorrecte.. Une idée?

Un grand merci par avance,

Bonne journée ensoleillée :)

TBR68

Bonjour TBR68,

Sans fichier, malheureusement pas d'autre idée

Bonjour BrunoM45

Ci-joint les deux fichiers :
1) Excel file avec mes deux colonnes contenant les noms des bookmarks (colA) & des 0 ou 1 dans la colonne B pour savoir si on garde ou non.

2) le template dotx Word (voir à partir de la page 4)

En espérant que ces deux fichiers pourront t'aider :)

Bonne fin de journée

Thomas

2testwordcopy.zip (632.16 Ko)
Rechercher des sujets similaires à "suppression pages word fonction valeurs"