Excel to Word-Supprimer du texte word en fonction de l'etat d'un tableau
Bonjour,
j'essaie désespéramment de réaliser un rapport automatisé sur word en fonction de données Excel.
pour ce faire, j'ai créée des tableaux structurés dans excel contenant mes données et un fichier template word, contenant du texte mis en forme.
j'ai créé un script avec bouton qui implémente mes tableaux dans word via des signets.
le script est également capable de détecter lorsqu'un tableaux structuré est vide auquel cas, il ne doit pas l'insérer, et doit supprimer le signet dans word.
Jusque là tout va bien les tableaux s'insèrent bien ou pas selon la condition.
Maintenant je veux dire à mon script : de retirer dans word, en plus du signet, le titre et texte en amont , correspondant à la section/paragraphe du tableau vide, et là patatra impossible.
j'ai tenté de faire des correspondances de type : si signetX inexistant alors suppression titreX, mais impossible
D'où mon appel à l'aide.
pour résumer, mon script doit faire, insérer tableau et texte cellule, mais si tableaux vide, alors suppression signet correspondant, + suppression du texte en amont + suppression espace + suppression saut de ligne + suppression du titre correspond au tableau vide inexistant dans word .
un Grand Merci pour votre aide
Bonjour et bienvenue
Merci de lire ou relire la charte du forum
[A LIRE AVANT DE POSTER] Charte du forum et informations utiles
Et notamment :
4. Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).
Sinon, cela me semble compliqué de pouvoir vous répondre
A+
Bonjour,
pardon, voici mon bout de script concerné
Merci
Sub SupprimerSignetEtParagraphes(wdDoc As Object, signet As Object)
Dim para As Object
Dim i As Long
Dim signetRange As Range
' Récupérer le Range du signet avant de le supprimer
On Error Resume Next
Set signetRange = signet.Range
On Error GoTo 0
' Supprimer le signet
On Error Resume Next
signet.Delete
On Error GoTo 0
' Supprimer les paragraphes vides ou le titre au-dessus du signet supprimé
' Premièrement, vérifier si le signetRange existe toujours
If Not signetRange Is Nothing Then
For i = wdDoc.Paragraphs.Count To 1 Step -1
Set para = wdDoc.Paragraphs(i)
' Supprimer les paragraphes vides
If Trim(para.Range.Text) = vbCr Or Trim(para.Range.Text) = "" Then
On Error Resume Next
para.Range.Delete
On Error GoTo 0
ElseIf para.Range.Start < signetRange.Start Then
' Si c'est le titre du paragraphe correspondant (au-dessus du signet), le supprimer aussi
On Error Resume Next
para.Range.Delete
On Error GoTo 0
Exit For
End If
Next i
End If
End Sub
Sub InsererTableauDansWord(wdDoc As Object, wb As Object, signetNom As String)
Dim tableauExcel As Object
Dim ws As Object
On Error Resume Next
Set tableauExcel = wb.Names(signetNom).RefersToRange
If tableauExcel Is Nothing Then
For Each ws In wb.Sheets
Set tableauExcel = ws.ListObjects(signetNom).Range
If Not tableauExcel Is Nothing Then Exit For
Next ws
End If
On Error GoTo 0
If Not tableauExcel Is Nothing Then
' Insérer le tableau dans Word
tableauExcel.Copy
wdDoc.Bookmarks(signetNom).Range.Paste
Application.CutCopyMode = False
End If
End Sub- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Vous vous embarquez dans une démarche très complexe. Une démarche bien plus simple est de conditionner l'inclusion du texte précédant vos tableaux par des variables intégrées au document. Il vous suffit dans votre document, d'utiliser les champs : "Si" avec la variable document adéquate et "InclureTexte" . Vous aurez juste à constituer des documents annexes contenant le texte de vos présentations de tableau, chacun de ces documents étant renvoyé par le champ "InclureTexte".
Bonjour Thev,,
merci pour votre réponse, je vais tester.
Merci d'avoir pris le temps😊
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ci-joint un exemple simple de document Word avec un contenu conditionné par une variable document : ts1
(Voir les macros Word de création, mise à jour et suppression de la variable).
rappel : affichage champs dans document : 1- les sélectionner, 2- Alt + F9,
mise à jour champs dans document : 1- les sélectionner, 2- F9
Merci encore pour votre réponse
Je vais reformuler car je crois ne pas avoir tout compris
Donc pour rappel mon script retire le tableaux et le signet correspondant si vide.
Donc vous me suggérer de placer un champ conditionnel, au niveau du texte précédant la section vide après retrait du tableau vide, dans le document word ?
exemple :
dans Excel :
Tableau structuré nommé "Tableau15"
dans Word :
2.1.2 Titre (que je dois masquer/supprimé) >> 2.1.2 Titre{IF {DOCVARIABLE Tableau15 \*MERGEFORMAT} "oui" "afficher" 'masquer"
- Texte (que je dois masquer/supprimé) >> Texte{IF {DOCVARIABLE Tableau15 \*MERGEFORMAT} "oui" "afficher" 'masquer"
Signet nommé "Tableau15" >> disparait avec mon script vba
et cela avec le script vba dans word contenant :
Sub ajout_variables()
ThisDocument.Variables.Add Name:="Tableau15"
End Sub
Sub maj_variables()
ThisDocument.Variables("Tableau15") = "oui"
ThisDocument.Fields.Update
End Sub
Sub suppression_variables()
Dim var As Variable
For Each var In ThisDocument.Variables
var.Delete
Next var
End Subc'est bien cela ? (j'ai testé cela ne fonctionne pas)
merci de votre aide,
Nell
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ci-joint un exemple de rapport avec 2 tableaux structurés : Tableau14 et Tableau15. Ces 2 tableaux sont paramétrés dans le fichier modèle Word . J'ai laissé le Tableau14 vide pour aperçu du résultat.
Un grand Merci,
Je n'en reviens toujours pas, j'y ai passé des heures et des heures!!!
Un grand merci Thev !!! Vous êtes mon nouvel idole!!!