Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Word : un compteur sur une balise

4 réponses
Avatar
veto_fr
Bonjour à tous,

j'essaye en VBA, d'appliquer une numérotation automatique sur une balise de
texte.

C'est à dire :
Remplacer la balise <cpt> qui figure plusieurs fois dans mon texte par son
numéro d'ordre d'apparition.
La première occurence <cpt> devrait être remplacée par 1, la deuxième par 2
et ainsi de suite...

J'ai pitoyablement fabriqué la macro suivante, qui ne fonctionne pas.

Sub Numerotation()
Dim cpt As Integer ' compteur
For i = 1 To 10
cpt = cpt + 1
With Selection.Find
.Text = "<cpt>"
.Replacement.Text = cpt
.Execute Replace:=wdReplaceOne
End With
Next
End Sub

Merci pour tout conseil.

4 réponses

Avatar
Anacoluthe
Bonjour !

'veto_fr' nous a écrit ...
j'essaye en VBA, d'appliquer une numérotation automatique sur une
balise de texte.
C'est à dire :
Remplacer la balise <cpt> qui figure plusieurs fois dans mon texte par
son numéro d'ordre d'apparition.
La première occurence <cpt> devrait être remplacée par 1, la deuxième
par 2 et ainsi de suite...


On a répondu il y a peu : remplacer le texte <cpt> par le champ { SEQ cpt }

Dans ce champ cpt est alors le nom identificateur de la séquence
Il aurait été plus simple d'inclure ce champ au lieu de cette 'balise'

Il n'y a même pas besoin d'une macro pour faire le remplacement :
il suffit de placer le champ dans le presse-papiers et de remplacer tous
les <cpt> du texte par le contenu due presse-papiers (^c) .

Si vous avez /vraiment/ besoin d'une macro :

Public Sub RemplacerTexteParChamp()
Dim T As String, C As String, myRange As Range
T = "<cpt>" ' texte à remplacer
C = "SEQ cpt" ' texte du champ sans les {}
Set myRange = ActiveDocument.Content
With myRange.Find
.ClearFormatting
.Text = T
.Forward = True
Do While .Execute
myRange.Fields.Add myRange, Type:=wdFieldEmpty, Text:=C
Loop
End With
End Sub

C'est mieux ?

Anacoluthe
« Bienheureux les travailleurs des champs. »
- VIRGILE

Avatar
veto_fr
Votre macro marche très bien , merci !

Je n'ai pas tout compris :
il suffit de placer le champ dans le presse-papiers et de remplacer tous
les <cpt> du texte par le contenu du presse-papiers


question naïve : comment place-t-on un champ dans le presse papier ?
Quand je clique dans le champ (clic droit) je ne trouve aucun menu
contextuel qui permet cette opération. Et si j'utilise la fonction remplacer
(Ctrl+H) j'obtiens le remplacement de <cpt> par { SEQ cpt }, mais Word ne
lit pas alors { SEQ cpt } comme un champ !?

Je crois que j'ai encore beaucoup à apprendre.
Si quelqu'un connait quelques liens sur l'utilisation de VBA et des champs,
je suis preneur.
(pour l'instant je ne connais (que) http://faqword.free.fr)

Encore merci pour la macro
:-)

Luc



"Anacoluthe" a écrit dans le message de
news:eOcQ%
Bonjour !

'veto_fr' nous a écrit ...
j'essaye en VBA, d'appliquer une numérotation automatique sur une balise
de texte.
C'est à dire :
Remplacer la balise <cpt> qui figure plusieurs fois dans mon texte par
son numéro d'ordre d'apparition.
La première occurence <cpt> devrait être remplacée par 1, la deuxième par
2 et ainsi de suite...


On a répondu il y a peu : remplacer le texte <cpt> par le champ { SEQ
cpt }

Dans ce champ cpt est alors le nom identificateur de la séquence
Il aurait été plus simple d'inclure ce champ au lieu de cette 'balise'

Il n'y a même pas besoin d'une macro pour faire le remplacement :
il suffit de placer le champ dans le presse-papiers et de remplacer tous
les <cpt> du texte par le contenu due presse-papiers (^c) .

Si vous avez /vraiment/ besoin d'une macro :

Public Sub RemplacerTexteParChamp()
Dim T As String, C As String, myRange As Range
T = "<cpt>" ' texte à remplacer
C = "SEQ cpt" ' texte du champ sans les {}
Set myRange = ActiveDocument.Content
With myRange.Find
.ClearFormatting
.Text = T
.Forward = True
Do While .Execute
myRange.Fields.Add myRange, Type:=wdFieldEmpty, Text:=C
Loop
End With
End Sub

C'est mieux ?

Anacoluthe
« Bienheureux les travailleurs des champs. »
- VIRGILE



Avatar
JièL
Bonjoir(c) veto_fr

Le 24/03/2008 16:25 vous avez écrit ceci :
question naïve : comment place-t-on un champ dans le presse papier ?


en l'affichant (alt+F9), le sélectionnant et le copiant (Ctrl+C) (c'est la
copie qui met dans le PP).

remplacer (Ctrl+H) j'obtiens le remplacement de <cpt> par { SEQ cpt }


nan, remplacer par "^c" cad le contenu du PP

Je crois que j'ai encore beaucoup à apprendre.


On es la pour ça ;-)
si je ne me trompe pas dans les touches :
Alt+F9 (affichage des codes de champs)
Ctrl+F9 (création du champ)
Saisie de "SEQ cpt"
Sélectionnez le champ (cad { SEQ cpt })
Ctrl+C (copie dans le pp)
Ctrl+H (fonction de remplacement)
Saisir "<cpt>" dans le champ "Rechercher"
Saisir "^c" dans le champ "Remplacer"
Cliquer sur Remplacer Tout, OK, Fermer
Alt+F9 (masquer les champs)
Ctrl+A (sélectionner tout)
F9 (mettre à jour les champs si c'est nécessaire)

Si quelqu'un connait quelques liens sur l'utilisation de VBA et des
champs, je suis preneur.


Avant d'attaquer le VBA je vous conseille sincèrement de connaître Word,
sinon vous allez faire parti des gens qui font du "superfétatoire" et le
club des AMIS(*) va vous tomber dessus ;-)

(pour l'instant je ne connais (que) http://faqword.free.fr)


Que vous manque t'il ?

(*) AMIS = Anti Macro Inutilement Superfétatoire :-)
En bref, si Word à une fonctionnalité, évitez de la réinventer en
macrotant ; Non seulement vous allez perdre beaucoup de temps et vous
arrachez les cheveux, mais ,à ma connaissance, rien n'est plus performant
que les fonctionnalités internes du produit.
Donc, quitte à perdre du temps, autant essayez d'en gagner en apprenant à
vous servir au mieux de Word ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq.outlook.free.fr/

Boycott des questions venant de CDO
http://faq.outlook.free.fr/viewpage.php?page_id=2

Avatar
veto_fr
Avant d'attaquer le VBA je vous conseille sincèrement de connaître Word,
sinon vous allez faire parti des gens qui font du "superfétatoire" et le
club des AMIS(*) va vous tomber dessus ;-)


Voilà de précieux conseils
:-)

J'ai fini par comprendre la manoeuvre de copie du presse papier, avec "^c" .

Merci



"JièL" a écrit dans le message de
news:
Bonjoir(c) veto_fr

Le 24/03/2008 16:25 vous avez écrit ceci :
question naïve : comment place-t-on un champ dans le presse papier ?


en l'affichant (alt+F9), le sélectionnant et le copiant (Ctrl+C) (c'est la
copie qui met dans le PP).

remplacer (Ctrl+H) j'obtiens le remplacement de <cpt> par { SEQ cpt }


nan, remplacer par "^c" cad le contenu du PP

Je crois que j'ai encore beaucoup à apprendre.


On es la pour ça ;-)
si je ne me trompe pas dans les touches :
Alt+F9 (affichage des codes de champs)
Ctrl+F9 (création du champ)
Saisie de "SEQ cpt"
Sélectionnez le champ (cad { SEQ cpt })
Ctrl+C (copie dans le pp)
Ctrl+H (fonction de remplacement)
Saisir "<cpt>" dans le champ "Rechercher"
Saisir "^c" dans le champ "Remplacer"
Cliquer sur Remplacer Tout, OK, Fermer
Alt+F9 (masquer les champs)
Ctrl+A (sélectionner tout)
F9 (mettre à jour les champs si c'est nécessaire)

Si quelqu'un connait quelques liens sur l'utilisation de VBA et des
champs, je suis preneur.


Avant d'attaquer le VBA je vous conseille sincèrement de connaître Word,
sinon vous allez faire parti des gens qui font du "superfétatoire" et le
club des AMIS(*) va vous tomber dessus ;-)

(pour l'instant je ne connais (que) http://faqword.free.fr)


Que vous manque t'il ?

(*) AMIS = Anti Macro Inutilement Superfétatoire :-)
En bref, si Word à une fonctionnalité, évitez de la réinventer en
macrotant ; Non seulement vous allez perdre beaucoup de temps et vous
arrachez les cheveux, mais ,à ma connaissance, rien n'est plus performant
que les fonctionnalités internes du produit.
Donc, quitte à perdre du temps, autant essayez d'en gagner en apprenant à
vous servir au mieux de Word ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq.outlook.free.fr/

Boycott des questions venant de CDO
http://faq.outlook.free.fr/viewpage.php?page_id=2