Je ne veux supprimer que les intitulés (28), (152) et (170) ainsi que leur contenu. J'ai donc fait la macro suivante :
Sub MacroSupChamp() ' ' MacroSupChamp Macro
Selection.Find.ClearFormatting
'Déclaration du tableau de champs Dim mesChamps(3) As String mesChamps(1) = "(28)" mesChamps(2) = "(152)"
mesChamps(3) = "(170)"
' Déclaration du compteur Dim i As Integer i = 1
'début du parcours de tableau
While i < = 3
'Debut recherche Do With Selection.Find .Text = mesChamps(i) 'cherche le champ i du tableau .Replacement.Text = ""
.Forward = True .Wrap = wdFindAsk .Format = False
.MatchCase = False .MatchWholeWord = False .MatchWildcards = False
.MatchSoundsLike = False .MatchAllWordForms = False End With
Selection.Find.Execute 'execution de la macro, la selection apparait en surbrillance 'Fin recherche
'Suppression du champ sélectionné With Selection If .Find.Forward = True Then
Selection.MoveRight Unit:= wdCharacter, Count:=0 'Place le curseur en début de ligne Selection.Extend 'active la fonction de sélection
Selection.EndKey Unit: =wdLine 'Sélection jusqu'à la fin de la ligne Selection.TypeBackspace 'Effacer la ligne ainsi sélectionnée Selection.Fields.Update 'sortir de la fonction sélection (facultatif)
End If End With 'Selection.Find.Execute i = i + 1 'Passe à la recherche du champ suivant
Loop While Selection.Find.Found 'Fin de la boucle
Wend ' fin du parcours de tableau
End Sub Visiblement cela fonctionne pour les champs 28 et 170.
En revanche pour le champ 152 cela ne supprime que la première ligne (ce qui est logique vu que je ne sélectionne que la ligne qui suit l'intitulé numérique) mais pas la deuxième ligne.
Or, cette deuxième ligne faisant partie du contenu de (152) je dois la supprimer aussi.
Je peux d'ailleurs avoir aussi plusieurs ligne pour un même intitulé (pas seulement deux, cf. intitulé (198) dans mon exemple).
Je ne trouve donc pas comment dire que je prends la première ligne ainsi que les suivantes jusqu'à la prochaine ligne vide (vu que les intitulés et leur contenu sont chacun séparés par une ou plusieurs lignes vides)
J'ai quand même essayé ça :
Selection.EndKey Unit: =wdLine & "^p" pour dire "jusqu'à la prochaine marque de paragraphe", mais ça ne fonctionne pas...
medelidrissi
Messages postés180Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention26 novembre 20072 13 oct. 2007 à 23:48
Bonjour,
Je pense que pour répondre à ton besoin tu peux faire appel à "Selection.EndOf Unit:=wdParagraph, Extend:=wdExtend".
Sans trop entrer
dans les détails, voici ce que je te propose , note qu'au passage j'ai rectifié
quelques petites erreurs :
Selection.Find.ClearFormatting
'Déclaration du tableau de champs
Dim mesChamps(3) As String
mesChamps(1) = "(28)"
mesChamps(2) = "(152)"
mesChamps(3) = "(170)"
' Déclaration du compteur
Dim i As Integer
i = 1
'début du parcours de tableau
While i <= 3
'Debut recherche
Do
With Selection.Find
.Text = mesChamps(i) 'cherche le champ i du tableau
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute 'execution de la macro, la selection apparait en surbrillance
'Fin recherche
If Not Selection.Find.Found Then Exit Do
'Suppression du champ sélectionné
With Selection
If .Find.Forward = True Then
Selection.MoveRight Unit:=wdCharacter, Count:=0 'Place le curseur en début de ligne
Selection.Extend 'active la fonction de sélection
Selection.EndOf Unit:=wdParagraph, Extend:=wdExtend
Selection.TypeBackspace 'Effacer la ligne ainsi sélectionnée
Selection.Fields.Update 'sortir de la fonction sélection (facultatif)
End If
End With
'Selection.Find.Execute
Loop While Selection.Find.Found 'Fin de la boucle
i = i + 1 'Passe à la recherche du champ suivant
Wend ' fin du parcours de tableau
Bonne programmation.
Cordialement medelidrissi
<hr />En Informatique, rien n'est impossible. Mais, ce n'est pas toujours évident.
FPignon
Messages postés3Date d'inscriptionsamedi 13 octobre 2007StatutMembreDernière intervention16 octobre 2007 14 oct. 2007 à 00:31
Bonsoir Medelidrissi,
Avant toute chose, merci beaucoup pour ta réponse et tes corrections
Ca fonctionne mais pas totalement :os Je m'explique :
Quand j'ai une intitulé et un contenu du type :
(52)Blablablablabla
Blablablablabla
Ca fonctionne pas à tous les coups. (M'enfin c'est déjà mieux que ce que j'avais fait :))
Par contre là où c'est plus ennuyeux c'est quand j'ai des cas avec plusieurs ligne comme :
(99)Blablablablabla Blablablablabla Blablablablabla Blablablablabla Blablablablabla Blablablablabla
Blablablablabla Blablablablabla Blablablablabla où là ça me supprime la première et le deuxième ligne et ensuite ça passe à l'intitulé suivant de mon tableau de départ. Donc ça me laisse encore tout le reste du contenu :
Blablablablabla Blablablablabla Blablablablabla Blablablablabla
Blablablablabla Blablablablabla Blablablablabla et je ne vois pas comment y remédier, parce que ta commande avec "wdParagraph" me paraissait être ce qu'il me manquait pour dire "tout le paragraphe" (vu que je peux avoir plusieurs lignes de contenu..) mais là je sèche..
faudrait pouvoir dire : supprime à partir de (63) (qui serait l'incide i das mon tableau de départ) jusqu'à la prochaine parenthèse ouvrante (non-incluse) çàd ici la parenthèse du (88)
De cette façon je pourrais régler le problème du multilignes ainsi que la possibilité d'avoir une ligne vide dans un contenu, etc.