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.
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 Bookmarks | Pages with content = 1 / Pages to remove = 0 |
OVER1 | 1 |
OVER50 | 0 |
OVER51 | 0 |
(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 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