[VB] Macro : Suppression champs multi-lignes
F_Pignon
Messages postés
23
Statut
Membre
-
F_Pignon Messages postés 23 Statut Membre -
F_Pignon Messages postés 23 Statut Membre -
Bonjour CCMnautes,
J'espère que des spécialistes de Visual Basic ou autres passeront par là :)
Je dois réaliser une macro dans Word qui doit supprimer certaines lignes identifiées par un numéro entre parenthèse en début de ligne
Mon document est de la forme suivante :
Je ne veux supprimer que les intitulés (28), (152) et (170) ainsi que leur contenu. J'ai donc fait la macro suivante :
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 :
pour dire "jusqu'à la prochaine marque de paragraphe", mais ça ne fonctionne pas...
J'aimerai donc obtenir ce résultat là :
Si quelqu'un pouvait me proposer une piste, un conseil, de l'aide, je lui en serait très reconnaissant ! :)
NB : je dois garder cette structure là de macro (càd : tableau des champs au début, parcours du tableau, recherche de l'intitulé, etc.)
Merci d'avance !
J'espère que des spécialistes de Visual Basic ou autres passeront par là :)
Je dois réaliser une macro dans Word qui doit supprimer certaines lignes identifiées par un numéro entre parenthèse en début de ligne
Mon document est de la forme suivante :
(7)Blablablablablabla (12)Blablablablablabla Blablablablablabla (28)Blablablablablabla (72)Blablablablablabla Blablablablablabla (152)Blablablablablabla Blablablablablabla (170)Blablablablablabla (198)Blablablablablabla Blablablablablabla Blablablablablabla Blablablablablabla Blablablablablabla (200)Blablablablablabla ...
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...
J'aimerai donc obtenir ce résultat là :
(7)Blablablablablabla (12)Blablablablablabla Blablablablablabla (72)Blablablablablabla Blablablablablabla (198)Blablablablablabla Blablablablablabla Blablablablablabla Blablablablablabla Blablablablablabla (200)Blablablablablabla ...
Si quelqu'un pouvait me proposer une piste, un conseil, de l'aide, je lui en serait très reconnaissant ! :)
NB : je dois garder cette structure là de macro (càd : tableau des champs au début, parcours du tableau, recherche de l'intitulé, etc.)
Merci d'avance !
A voir également:
- [VB] Macro : Suppression champs multi-lignes
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Vb - Télécharger - Langages
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro maker - Télécharger - Divers Utilitaires