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.
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.
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 !
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.