Suppression des retours chariots

Suppression des retours chariots - VB/VBA/VBS - Programmation

Marsh Posté le 22-03-2007 à 16:48:14    

Bonjour,
J'ai une fonction qui recherche un style dans un document Word et qui insère avant et après le ou les mots qui ont ce styledes balises <term></term>. Mais lorsque, pour attribuer le style, on sélectionne le terme et le saut de ligne le tag ne se place pas directement derrière le mot ce qui pose problème...
Je n'arrive pas à remplacer les retours chariots ...Merci pour votre aide!
Voici le code:

Code :
  1. Sub insert_term_tag()
  2. On Error GoTo endSub
  3.     Selection.Find.ClearFormatting
  4.     Selection.Find.Replacement.ClearFormatting
  5.     With Selection.Find
  6.         .Style = "termKeystone" '"termHoribaABX"
  7.         .Text = ""
  8.         .Replacement.Text = ""
  9.         .Forward = True
  10.         .Wrap = wdFindContinue
  11.         .Format = True
  12.         .MatchCase = False
  13.         .MatchWholeWord = False
  14.         .MatchByte = False
  15.         .Execute
  16.         If Selection.Find.Found = True Then
  17.             Selection.InsertBefore ("<term>" )
  18.             Selection.ClearFormatting
  19.             Selection.InsertAfter ("</term>" )
  20.             Selection.ClearFormatting
  21.         End If
  22.        
  23.         While Selection.Find.Found = True
  24.             .Style = "termKeystone" '"termHoribaABX"
  25.             .Text = ""
  26.             .Replacement.Text = ""
  27.             .Forward = True
  28.             .Wrap = wdFindContinue
  29.             .Format = True
  30.             .MatchCase = False
  31.             .MatchWholeWord = False
  32.             .MatchByte = False
  33.             .Execute
  34.            
  35.             If Selection.Find.Found = True Then
  36.                 .Style = "termKeystone" '"termHoribaABX"
  37.                 .Text = ""
  38.                 .Replacement.Text = ""
  39.                 .Forward = True
  40.                 .Wrap = wdFindContinue
  41.                 .Format = True
  42.                 .MatchCase = False
  43.                 .MatchWholeWord = False
  44.                 .MatchByte = False
  45.                 .Execute
  46.                 Selection.InsertBefore ("<term>" )
  47.                 Selection.ClearFormatting
  48.                 Selection.InsertAfter ("</term>" )
  49.                 Selection.ClearFormatting
  50.             End If
  51.         Wend
  52.     End With
  53.     ActiveDocument.Select
  54.     Selection.GoTo What:=wdGoToHeading, Which:=wdGoToFirst
  55.  
  56. endSub:
  57. Exit Sub

Reply

Marsh Posté le 22-03-2007 à 16:48:14   

Reply

Marsh Posté le 22-03-2007 à 17:32:50    

Peut-être faudrait-il redéfinir la sélection en fonction de son contenu.
Par exemple, si la recherche sélectionne une zone avec un saut de ligne, alors tu redéfinis la sélection sans le saut de ligne avant de poursuivre ton traitement.
 
Désolé je ne connais pas assez VBA Word pour t'aider plus.

Reply

Marsh Posté le 22-03-2007 à 18:33:19    

enleve ton goto pour voir si tout marche bien dejà :)
de plus tu dois pouvoir faire un gain de lignes de code en utilisant plutot que ton while .find.found = true
un truc avec  
 
dim recherche as find
dim currpane as pane
set currpane = application.activedocument.activepane
currpane.selection.goto wdgotoline, wdgotofirst
set recherche = currpann.selection.find
with recherche
.clearformatting
......
while recherche.execute(findtext:="<term>" )
Wend
end with
à mettre à la bonne sauce hein  :pt1cable:

Reply

Marsh Posté le 23-03-2007 à 09:32:11    

ok merci ms ça ne résoud oas mon problème des retours chariot...

Reply

Marsh Posté le 23-03-2007 à 09:41:33    

tu peux nous faire un SS de ton probleme stp ?
Car si ton utilisateur prends le saut de ligne, n'est-ce pas parce qu'il ne sait pas se servir de sa souris :p

Reply

Marsh Posté le 23-03-2007 à 13:48:19    

Bonjour,
 
Je fais souvent ce type de traitement, la solution consiste dès le début de rechercher tous les ^013
et pas ^p, et d'affecter un style pour exemple "retour" ainsi deux mots séparés par un retour seront trouvé séparément.
 
Pourquoi ^013 et pas ^p, il arrive que certain fichier word provenant de mac, les codes retours sont mal interprétés avec ^013 je n'ai jamais de problème
 
Bonne après midi

Reply

Marsh Posté le 23-03-2007 à 15:16:41    

Non mon réel problème est que je dois avoir les tag <term></term> sur la même ligne....donc avant de mettre la balise </term>, je dois tester si il y a un retour chariot...s:(

Reply

Marsh Posté le 23-03-2007 à 15:20:26    

acorsa a écrit :

Non mon réel problème est que je dois avoir les tag <term></term> sur la même ligne....donc avant de mettre la balise </term>, je dois tester si il y a un retour chariot...s:(


ah ! ben tu vois si tu nous donnes cette raison pour ton problème, on va peut etre pouvoir te trouver une autre solution :)

Reply

Marsh Posté le 23-03-2007 à 15:24:43    

jpcheck a écrit :

ah ! ben tu vois si tu nous donnes cette raison pour ton problème, on va peut etre pouvoir te trouver une autre solution :)


regarde du cote de la fonction nolinebreakafter de ton document, ca doit te permettre d'avancer :)

Reply

Marsh Posté le 23-03-2007 à 15:30:21    

ok merci!!!

Reply

Marsh Posté le 23-03-2007 à 15:30:21   

Reply

Marsh Posté le 26-03-2007 à 11:48:04    

Bonjour,
 
En imaginant que la style soit Style1 regarde si cela te conviens
 
 
Sub dudule()
 
Selection.HomeKey Unit:=wdStory
With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Forward = True
    .MatchWildcards = False
    .Style = "Style1"
    .Text = ""
    .Execute
End With
While Selection.Find.Found
    Selection = "<term>" & Replace(Selection, Chr(13), "</term>" & Chr(13) & "<term>" ) & "</term>"
    Selection = Replace(Selection, "<term></term>", "" ) & ""
    Selection.MoveRight
    Selection.Find.Execute
Wend
End Sub

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed