coupure de phrase dans Ms Word,soluce en VBA?

fred_gaou

Nouveau membre
Bonjour à tous et merci de votre attention.

Voilà mon problème avec Microsoft Office Word 2003 SP2 sous XP

J'ai un document dont certaines phrases sont coupées par une marque de paragraphe. Ce qui donne pour exemple ceci:

Quand une entreprise (organisme, ..) décide de "déposer un nom de domaine", elle s'adresse à un prestataire¶

habilité pour le faire (en France ou aux USA), qui va vérifier si le nom n'existe pas déjà, et ensuite va lui attribuer¶

une adresse IP disponible. Le couple domaine-adresse IP est¶

ensuite communiqué à des serveurs DNS, tous connectés à Internet, qui vont¶

dialoguer entre eux pour "répliquer" (si besoin est) cette mise à jour d'annuaire.¶

Et ceci sur une centaine de pages, donc la flemme de corriger cela manuellement. Cela me prendrait environ une centaine d'années et je n'ai pas tout ce temps à y consacrer :D

J'ai essayé tout ce dont je suis capable pour réassembler ces phrases dans tout le doc. J'ai fait une recherche selective pour surligner toutes les marques de paragrahes mises en cause en faisant ceci:
Ctrl F en mettant dans la case "rechercher" ^$^p^$, ajouté à cela quelques options selectives pour ne rechercher que dans le corps de texte, puis rechercher tout

Cela me surligne les marques de paragraphe concernées. Le problème maintenant, c'est que je voudrais remplacer les marques de paragraphes ^p ainsi surlignées par un espace. Or la fonction remplacer de word ne le fait pas car elle remplace soit toutes les marques de paragraphe du document, soit toutes la chaînes de caractères surlignées ^$^p^$.

D'où me vient l'idée de l'utilisation d'une macro qui pourrait éxecuter ce que je souhaite. Or, je ne connais rien au langage VBA ni s'il pourra résoudre mon problème.

Voici ma question: est-il possible de programmer en VBA, directement applicable dans une macro word, cette tâche:

remplacer dans tout le document ^p par un espace quand ^p est compris entre deux lettres minuscules appartenant au corps de texte ?

J'espère que j'ai bien exprimé mon problème et que vous m'avez compris.

Si un pro du VBA pouvait m'éditer cette macro si cela est possible ou bien m'orienter vers une autre solution que l'arrachage de cheveux pour résoudre ce problème. Ce serait fantastique et ça me changerait la vie car je pourrais appliquer cette macro à pleins de doc qui représente des milliers de pages.

A votre bon coeur, messieurs, dames :merci:

fred
 

Johan_et_Pirlouit

Grand Maître
Et si tu nous disais la provenance du texte mal retranscrit ? C'est du copier-coller depuis des pages Web ? Des fichiers .doc "d'origine" (quelle version de Word, dans ce cas) ? De l'importation de texte depuis un autre format de texte ? Il se peut, dans le cas d'une importation, que le mécanisme de Word patauge un peu, suivant le format d'origine.. Autant que possible, il est préférable de gérer en amont l'éventuelle arrivée de soucis, du côté de la source..

Après pour les macros, je passe la main..

:merci:
 

fred_gaou

Nouveau membre
Salut,

Ce sont des textes que j'ai converti de leur format PDF d'origine au format Word.doc grâce au logiciel "Solid Converter PDF" et ce afin de pouvoir les remettre en forme. Je trouve que ça fait plutôt bien son boulot dans l'ensemble mais ya peut-être un logiciel meilleur qui permet de palier à ses petits inconvénients.
 

Johan_et_Pirlouit

Grand Maître
Ca rentre bien dans ce que je pensais.... Plusieurs soucis : les deux formats PDF et DOC sont des formats propriétaires et si le premier, sans être réellement ouvert, est maintenant pas mal utilisé par des applis autres qu'Adobe Acrobat / Distiller et avec un bon niveau de compatibilité, le second reste particulièrement fermé et les applis autres que MS qui savent générer du .doc le font par devinettes, car personne ne peut actuellement accéder au code source de la structure du format DOC..

Donc, ton soucis est le suivant : Solid Converter PDF qui fait de la "décompilation" PDF pour ensuite générer un fichier DOC dont il ne sait pas les subtilités de la structure..

Je viens de faire quelques assais avec la v3 Démo et, comme tous ces logiciels d'extraction, il ne faut pas trop lui en demander.. Pas grand chose à voir avec les documents de démonstration sur le cite de Solid Converter, documents qui, comme d'hab, servent plus d'artifices marketting qu'autre chose..

Avant de lancer des macros, essaie de sortir en format RTF, standard connu, reconnu et simple à manipuler par les logiciels de création.. Sinon, pour les autres logiciels, vois plutôt dans la cat Logiciels (par ex. le Topic Unique sur les logiciels gratuits, entre autres).. Je serais très mauvais guide pour ça ;)..

:merci:
 

zeb

Modérateur
Une idée : y a-t-il systématiquement un espace devant le retour-chariot ? Si oui, la solution saute au yeux...

Un truc pour VBA : Enregistre une macro et essaye de comprendre le code (Alt+F11). Ce n'est pas difficile, tu peux trouver de l'aide directement dans l'aide en ligne, sur google et pourquoi pas ici. Mais ça prend plein de temps !
 

zeb

Modérateur
Essaie ça :
Code:
Option Explicit                                ' Evite les fautes de frappe

Sub Macro1()
    Dim i As Integer

    Selection.GoTo wdGoToPage, wdGoToFirst     ' Allez au début.
    Do While True
        With Selection                         ' On considère le caractère courant
            If .Style <> "Normal" Then         ' Si on n'est pas en style "Normal", on zérote.
            	                                ' Tu dois peut être faire des changements ici.
                i = 0
            Else
                If i = 2 Then                  ' Est-on une case après le retour-chariot ?
                    .MoveLeft wdCharacter, 1   ' On recule d'une case, donc on est sur le retour-chariot
                    .Characters(1) = ""        ' On met RIEN à la place du retour-chariot
                    .MoveRight wdCharacter, 1  ' On avance d'une case.
                    i = 0                      ' C'est fait, on zérote.
                End If
                If .Characters(1) = Chr(13) And i = 1 Then   ' Est-on sur le retour-chariot
                    i = 2
                Else
                    ' Attention, tu veux peut-être considérer l'espace, la ponctuation, etc.
                    ' Ici je te donne la version "Une minuscule avant
                    If .Characters(1) >= "a" And .Characters(1) <= "z" Then i = 1 Else i = 0
                End If
            End If
            If .MoveRight(wdCharacter, 1) = 0 Then Exit Do ' FIN
        End With
    Loop
End Sub
 

fred_gaou

Nouveau membre
Merci zeb et tous les autres qui m'ont répondu :merci:

Je vais tester ton code que je vais essayer de comprendre afin de me mettre la prog de VBA.
Sur un autre forum, un gars sympa comme vous m'a donné un code qui marche à la perfection. Le voici:

[cpp]Function EstMin(c As String) As Boolean
EstMin = (c >= "a" And c <= "z")
End Function
Sub SupprimeParagraphe()
Selection.Find.ClearFormatting
ActiveDocument.Select
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^$^p^$"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
While Selection.Find.Execute
If EstMin(Left(Selection.Text, 1)) And EstMin(Right(Selection.Text, 1)) Then
Selection.TypeText Left(Selection.Text, 1) & " " & Right(Selection.Text, 1)
End If
Wend
End Sub
[/cpp]

Mon problème est donc résolu grâce à la générosité des programmeurs ou developpeurs amateurs qui ont bien voulu offrir au néophyte un peu de leur science. Avec toute ma reconnaissance. :hello:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 054
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut