Vba Word 2013

Habtar - Modifié par Habtar le 9/01/2016 à 12:54
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 11 janv. 2016 à 11:04
Bonjour,

J'ai un document contenant près de 300 paragraphes, dont une bonne partie contient une signature à la fin. La signature commence toujours par le même mot : "tata". J'aimerai désolidariser cette signature du reste du paragraphe par l'insertion de l'équivalent d'une touche "entrée" (^p) à chaque début de mot "tata". Le résultat serait que chaque signature constituerait un paragraphe distinct des autres.

1. Rechercher le premier mot tata
2. Se placer en début de mot
3. Insérer une touche entrée (équivalent à un nouveau paragraphe dans word)
4. Continuer la recherche pour les mots suivants

J'ai un début de code qui évidemment ne fonctionne pas (lol) :

ActiveDocument.Range.Select
With Selection.Find
    .Text = "tata"
    Selection.HomeKey Unit:=wdLine
    SendKeys "{ENTER}"
    .Forward = True
    .ClearFormatting
    .Wrap = wdFindContinue
End With


Quelqu'un aurait une idée sur la façon d'agencer les instructions ?

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 11/01/2016 à 08:29
Bonjour,
n'utilise pas sendkeys.
Remplace donc "tata" par vbnewline & "tata (méthode Replace)

EDIT : mais si j'ai tout bien compris (ou deviné) de tes discussions précédentes, tu ferais bien mieux de supprimer "tata" du contenu de la variable texte extraite avant de l'écrire ailleurs. En remplaçant "tata" par "" dans ta variable.
Cela te permettrait de ne pas avoir à traiter séparément (encore) le paragraphe disant uniquement "tata" qui résulterait de cette "séparation".

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 11/01/2016 à 14:45
exemple bâclé :
Dim toto As Paragraph, lu As String
For Each toto In ActiveDocument.Paragraphs ' je boucle sur la collection des paragraphes
toto.Range.Select ' je sélectionne chacun de ces paragraphes, tour à tour
lu = Selection.Text
If lu Like "*tata*" Then lu = Replace(lu, "tata", "")
Selection.MoveLeft Unit:=wdCharacter, Count:=1 ' je vais au tout début du paragraphe
If Selection.Font.ColorIndex = 0 Then ' si couleur noire
MsgBox "voilà ce que tu dois coller ailleurs : " & vbCrLf & lu
End If
Next

dans cet exemple :
1) je ne prends que les paragraphes dont la 1ère lettre est en noir
2) j'y supprime "tata", si présent. Reste plus qu'à coller ailleurs le contenu de la variable lu !

A toi de mettre les conditions que tu veux (je t'ai montré dans une autre discussion ce qu'il fallait utiliser) pour ne retenir que les vrais paragraphes, sans tes titres

EDIT : voilà encore une autre manière, sans même replace :
Dim toto As Paragraph, lu As String
For Each toto In ActiveDocument.Paragraphs ' je boucle sur la collection des paragraphes
toto.Range.Select ' je sélectionne chacun de ces paragraphes, tour à tour
lu = Split(Selection.Text, "tata")(0) ' j'éclate sur "tata" et ne prend que ce qu'il y a devant (le 1er item de l'array obtenu)
Selection.MoveLeft Unit:=wdCharacter, Count:=1 ' je vais au tout début du paragraphe
If Selection.Font.ColorIndex = 0 Then ' si couleur noire
MsgBox "voilà ce que tu dois coller ailleurs : " & vbCrLf & lu
End If
Next


EDIT : et une manière moins bâclée, en ce sens que, cette fois-ci, je ne passe pas par des sélections :
 Dim lu As String, titi As Range, i As Long
With ActiveDocument
For i = 1 To .Paragraphs.Count 'je parcours les paragraphs
lu = Split(.Paragraphs(i).Range.Text, "tata")(0) ' j'éclate sur "tata" et ne prend que ce qu'il y a devant (le 1er item de l'array obtenu)
pos = .Paragraphs(i).Range.Start ' position du 1er caractère
pos2 = pos + 1 'position du second
Set titi = .Range(Start:=pos, End:=pos2) ' je défini cette plage (de ce caractère)
If titi.Font.ColorIndex = 0 Then ' si couleur noire
MsgBox "voilà ce que tu dois coller ailleurs : " & vbCrLf & lu
End If
Next
End With

Tu vois ? Il n'y a jamais UNE manière, mais DES manières. Il suffit de s'y mettre (même et surtout si, comme moi, on ne travaille jamais avec VBA/Word) et de réfléchir.




________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous