Mise en page d'un signet sous Word par macro

roilion2 - 28 nov. 2012 à 09:22
 Utilisateur anonyme - 3 déc. 2012 à 21:37
Bonjour à tous,

J’ai un peu de mal à programmer en VBA et je sollicite votre aide pour dépatouiller mon problème !
Voici ci-dessous un exemple de texte que l’on retrouve dans nos devis. Le paragraphe qui va de « TEST LETTRE » à « Poids d'un exemplaire : 1000 g » est un signet (champ) « TXT » qui est envoyé par un logiciel externe. Le moins qu’on puisse dire, c’est que la présentation n’est pas terrible !

-----------------------------
Monsieur,
Nous vous remercions vivement de votre demande et soumettons à votre accord notre meilleure offre :

TEST LETTRE



Essai + travaux
>Format fini (volume) 117.0 x 78.0 cm
Format hors tout 158.0 x 236.0 cm
Format machine 162.0 x 242.0 cm
>Sur matière particulière
>Fabrication à définir
>Opérations manuelles


Conditionnement
>Affrètement 1 pt 95

Poids d'un exemplaire : 1000 g

Prix pour 4 655 exemplaires >10 000.00 € HT
Prix pour les mille supplémentaires >1 946.00 € HT

Paiement à la livraison
-----------------------------

Le « > » est la représentation d’une tabulation
Au final après modifications manuelles, je retrouve ceci :

-----------------------------
Monsieur,
Nous vous remercions vivement de votre demande et soumettons à votre accord notre meilleure offre :

TEST LETTRE

Format fini 117.0 x 78.0 cm
Fabrication à définir
Sur matière particulière
Opérations manuelles

Conditionnement
Affrètement 1 pt 95

Prix pour 4 655 exemplaires >10 000.00 € HT
Prix pour les mille supplémentaires >1 946.00 € HT

Paiement à la livraison
-----------------------------

Voilà les opérations que je souhaiterai (si vous le voulez bien !) réaliser en automatique :
- Suppression des tabulations, ça je sais faire (voir ci-dessous)
- Titre « TEST LETTRE » en gras et souligné
- Laisser 1 seule ligne blanche après le titre
- Laisser 1 seule ligne blanche avant « Conditionnement »
- Suppression des lignes contenant « Essai + travaux », « Format hors tout », « Format machine », « Poids d'un exemplaire » et de la ligne blanche juste avant
- « Fabrication à définir » remonte d’une ligne et « Sur matière particulière » descend d’une ligne (inversion)
- Un truc sympa si c’était possible, suppression de « (volume ) » uniquement s’il n’y a que 2 nombres derrière et non pas 3 !

Le paragraphe « prix » est également un signet envoyé automatiquement. J’ai bien une tabulation avant chaque prix mais elle n’est pas fixe (idéalement à 9 sur l’échelle de tab) et elle n’est pas décimale, donc rien n’est aligné. De plus, il y a plusieurs espaces entre « pour » et la quantité, ne peut-on pas les supprimer pour n’en laisser qu’un seul ?

Voici le code pour les tabulations :
ActiveDocument.Bookmarks("TXT").Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = vbTab
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.MoveEnd
Selection.HomeKey

Voilà, c’est pas mal mais je pense que ça peut être intéressant pour beaucoup d’entre nous.

Merci pour votre aide.

4 réponses

Utilisateur anonyme
28 nov. 2012 à 18:25
Bonjour,

Le règlement de ce lieu prévoit que le demandeur doit faire l'effort de montrer une section suffisante (pas forcément la totalité) de son code incluant la partie qui cause problème. Le demandeur ne doit pas s'attendre à recevoir un programme complet gratuit, mais une réponse à une difficulté ponctuelle bien expliquée.

Et puis, tout ce que cela prend c'est un modèle de lettre préparé comme si c'était un publipostage. Au lieu d'avoir juste le nom, l'adresse, tu ajoutes des colonnes dans ta source de données pour ton prix et tes autres gugusses exotiques.

Ensuite, tu fais ton "publipostage". Pas besoin d'un programme pour cela.
0
Bonjour à tous

J'ai trouvé une solution à tous mes problèmes de programmation sauf 1 seule : comment définir que la 1ere ligne du signet (le titre) doit être dans un style différent (gras et souligné). Pour info le texte de cette 1ere ligne est toujours différent !

Merci pour votre aide
0
Utilisateur anonyme
3 déc. 2012 à 21:32
Bonjour,

J'ai ceci dans mes affaires. Cela applique le style Titre à la première phrase d'un texte. Enfin, un paragraphe d'une seule phrase et dans ce cas précis un titre. Si tu veux t'en servir, tu vas sans doute devoir adapter; soit en changeant le style Titre, soit en créant un nouveau style et en l'appelant lui au lieu du style Titre

Sub TitreCodeProject()
' TitreCodeProject Macro
'Rejoindre le début du texte
   Selection.HomeKey unit:=wdStory
   Do
     'Sélectionne le premier paraghraphe qui peut être
     'une phrase unique. Dans ce cas précis, je sais que
     'si j'ai un seul caractère, c'est une marque de
     'paragraphe.      
     Selection.Expand unit:=wdParagraph
     texte = Selection.Text
        If Len(texte) = 1 Then
          'Si c'est juste une marque de paragraphe
          'on lui dit bye-bye
           Selection.Delete
        Else
          'Appliquer le style Titre au paragraphe
          'Dans ce cas précis, je sais que j'ai
          'un paragraphe d'une seul phrase
           Selection.Style = ActiveDocument.Styles("Titre")
           Selection.Collapse
           Selection.Move unit:=wdParagraph
           Exit Do
        End If
          Selection.Collapse
   Loop
 End Sub


Mais je répète, c'est une macro que j'utilise dans des cas précis, avec des conditions pré-établies et contrôlée visuellement au préalable.
0
Utilisateur anonyme
3 déc. 2012 à 21:37
Bonjour,

Si un administrateur passe par ici, je pense que cela prendrait un coup de baguette magique.
0
Rejoignez-nous