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

parcourir les items d'un index MSWord

11 réponses
Avatar
jean-paul.bataille
Bonjour =E0 toutes et tous,

Je dispose d'un index et d=E9sire venir par VB (ou VBA) lire chaque item
afin de le modifier.
Comment faire ?

remerciements anticip=E9s.

Jean-Paul

10 réponses

1 2
Avatar
Geo

Bonjour à toutes et tous,

Je dispose d'un index et désire venir par VB (ou VBA) lire chaque item
afin de le modifier.
Comment faire ?


Les items dans l'index ? Fichtre !
A ta place j'essaierais plutôt de modifier directement le contenu des
champs XE, par ricochet cela modifierai le texte des entrées de la
table.

PS ne jamais mettre sa véritable adresse sur un forum public, cela
attire les pourriels.



--
A+

Avatar
jean-paul.bataille
Pour préciser mon intention :
J'ai un texte historique avec des dates : je ne peux (veux) donc pas
changer la présentation des dates dans le document - tantôt 25
decembre 1870, tantôt 3 janv 1871, quand ce n'est pas 4 jan.71-
Et je désire constituer un index des dates ; c'est là où ça coince
:
Word ne (re)connait pas les formats de dates et classe celles-ci selon
l'ordre alphanumérique soit 3 janv 1871 puis 25 déc 1870 ce qui n'est
pas souhaité.
Avatar
Anacoluthe
Bonjour !

'' nous a écrit ...
Pour préciser mon intention :
J'ai un texte historique avec des dates : je ne peux (veux) donc pas
changer la présentation des dates dans le document - tantôt 25
decembre 1870, tantôt 3 janv 1871, quand ce n'est pas 4 jan.71-
Et je désire constituer un index des dates ; c'est là où ça coince
Word ne (re)connait pas les formats de dates et classe celles-ci selon
l'ordre alphanumérique soit 3 janv 1871 puis 25 déc 1870 ce qui n'est
pas souhaité.


Ce serait tellement plus simple pour tout le monde si vous restiez
dans la même ficelle de discussion !!!

Amha votre problème doit d'abord se régler dans les entrées d'index.
Ainsi 25 décembre 1870 doit être indexé { XE "1870-12-25" }
L'index sera alors automatiquement ordonné chronologiquement
à chaque mise à jour.

Ensuite il vous faut une macro qui va se contenter de faire une
série de RR (Rechercher-remplacer) sur l'index obtenu. Par exemple
remplacer 1:4chiffres 2:tiret-2chiffres-tiret 3:2chiffres
par 3 2 1 pour inverser en 25-12-1870, puis encore s'il le faut
une série de RR pour obtenir les mois en clair 25 décembre 1870.

Chaque fois que vous remettrez à jour l'index il faudra cependant
ré-appliquer cette macro de mise en forme des dates.
Est-ce qu'on avance ?

Anacoluthe
« L'ordre des causes se confond avec l'ordre des faits. »
- Hippolyte TAINE

Avatar
jean-paul.bataille
Anacoluthe wrote:

Ce serait tellement plus simple pour tout le monde si vous restiez
dans la même ficelle de discussion !!!

J'ai mis comme exemple à cette question le Pb qui me turlupine en ce

moment,
mais la question est d'ordre général.


Amha ????

votre problème doit d'abord se régler dans les entrées d'index.
Ainsi 25 décembre 1870 doit être indexé { XE "1870-12-25" }


Je n'y avais pas pensé, c'est tellemenrt simple pourtant

Ensuite il vous faut une macro qui va se contenter de faire
une série de RR (Rechercher-remplacer) sur l'index obtenu.


Cela peut convenir aussi je me suis rué sur l'aide Word 2003 et aussi
sur

1) http://word.mvps.org/FAQs/General/TransposeDatesContent.htm
et
2) http://word.mvps.org/FAQs/General/UsingWildcardsContent.htm

Mais je n'arrive pas à suivre leurs explications ; même en recopiant
leurs exemples
Peut étre faut il traduire les ',' en ';' comme dans les formules
Excel ou quelque chose comme cela.

Est-ce qu'on avance ?
Ça OUI je ne pensais pas que RR était aussi puissant,... ...quand je

saurais l'exploiter...

Je continue mes recherches mais dés maintenant un grand merci.


Jean-Paul

"Le succés c'est d'aller d'échec en échec, sans perdre son
enthousiasme"

Sir W. CHURCHILL

Avatar
jean-paul.bataille
Effectivement il faut remplacer les ; par des , si on veut pouvoir
compter les occurences d'un caractère.

À part cela voici un résumé de Recherche et Remplace avec emploi de
caractères génériques

panser à cocher 'utiliser les caractères génériques dans les
options : bouton PLUS.
Pour trouver un mois exprimé sur deux chiffres : [0-9]{2}
Pour remplacer par exemple 2005-12-25 par 25 décembre 2005 :
1) RECHERCHER : ([0-9]{4})-([0-9]{2})-([0-9]{2})
Les () distinguent les 3 éléments -année,
mois, jour- de la date
REMPLACER : 3 2 1
On remplace AAAA-MM-JJ par JJ MM AAAA

2) Il ne reste plus qu'à remplacer les valeurs des mois par leur
nom si on le désire
usage classique du RECHERCHE / REMPLACE


Il ne me reste plus qu'à mettre ça en VB......
Avatar
Anacoluthe
Bonjour !

'' nous a écrit ...
Il ne me reste plus qu'à mettre ça en VB......


Ou VBA. Vous y êtes presque !
Au pire enregistrez vos RR avec l'enregistreur de macros.

Anacoluthe
« L'ordre des causes se confond avec l'ordre des faits. »
- Hippolyte TAINE

Avatar
Geo

Au pire enregistrez vos RR avec l'enregistreur de macros.


Comment "au pire" ?
C'est tellment plus simple quand le vba n'est pas sa langue maternelle.

On pourrait d'ailleurs plaindre la maman.

:-)

--
A+

Avatar
jean-paul.bataille
Voici le fruit de mon labeur :

3 sub pour successivement :
1) trouver l'index des dates: FindDateIndex
2)suivi de : convertir les champs dates dont les entrées sont sous la
forme AAAA-MM-JJ : Conversion_AAAAMMJJ_en_JJMMAAAA
3) puis encore une conversion du n° de mois en son nom :
Conversion_MM_en_MOIS

Ces 3 sub's, lancées successivement, fonctionnent correctement -sur
le fond- si ce n'est que les deux dernières ne se limitent pas à la
sélection réalisée par la 1ére sub. Ce qui conduit à la
destruction des entrées d'index dans le texte, puisque { XE
"2006-12-25:Noël 2006" } devient { XE "2006 decembre 25:Noël 2006" }



Ne peut on pas avoir quelque chose comme

While Selection.Find.Execute(findtext:=NumMois(iMois))
???????????
Wend

en plaçant le code des macros de conversion à la pace des ?????


'************************************************************************** *******************
Sub FindDateIndex()
'RECHERCHE UN CHAMP INDEX DE DATES NOTÉ {INDEX f "d" ......}

Dim objChamp As Field

'les codes de champ peuvent ne pas étre visibles à l'écran
ActiveDocument.Range.TextRetrievalMode.IncludeFieldCodes = True


'PASSER EN REVUE TOUS LES CHAMPS DU DOCUMENT ACTIF
For Each objChamp In ActiveDocument.Fields
'SI LE CHAMP EST UN INDEX
If objChamp.Type = wdFieldIndex Then
'afficher le code de champ
If InStr(1, objChamp.Code, "f ""d""", vbTextCompare) Then
'si on a affaire à l'index de date alors sélectionner ce
champ
objChamp.Select
MsgBox objChamp.Code & " " & objChamp.Index
End If
End If
Next objChamp
End Sub

'************************************************************************** *******************

Sub Conversion_AAAAMMJJ_en_JJMMAAAA()
'CONVERTIR LES DATES DU FORMAT AAAA-MM-JJ EN JJ-MM-AAAA

'!!!!!!!!!!!!!! le remplacement n'est pas restreint à la sélection
!!!!!!!!!!!!!

'LES ENTRÉES D'INDEX SOUS LA FORME AAAA-MM-JJ SONT MIS SOUS LA FORME
JJ-MM-AAAA
'forme AAAA-MM-JJ pour avoir un classement chronologique lors de la
compilation de l'index

' !!!! SELECTIONNER L'INDEX AVANT TOUTE AUTRE ACTION

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]{4})-([0-9]{2})-([0-9]{2})"
.Replacement.Text = "3-2-1"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With


Selection.Find.Execute Replace:=wdReplaceAll

SubEnd:
End Sub

'************************************************************************** *******************
Sub Conversion_MM_en_MOIS()
'REMPLACEMENT DU NUMERO DU MOIS PAR SON NOM

'!!!!!!!!!!!!!! le remplacement n'est pas restreint à la sélection
!!!!!!!!!!

Dim iMois As Integer 'indice de boucle pour les 12 mois

NumMois = Array("-01-", "-02-", "-03-", "-04-", "-05-", "-06-", "-07-",
"-08-", "-09-", "-10-", "-11-", "-12-")
NomMois = Array(" janvier ", " février ", " mars ", " avril ", " mai
", " juin ", " juillet ", " août ", " septembre ", " octobre ", "
novembre ", " décembre ")

'BOUCLER POUR LES 12 -MM-
For iMois = 0 To 11

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = NumMois(iMois)
.Replacement.Text = NomMois(iMois)
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next iMois


End Sub

'************************************************************************** *******************
Avatar
Anacoluthe
Bonjour !

Dans toutes vos macros de RR remplacez déjà
.Wrap = wdFindAsk
par
.Wrap = wdFindStop
pour qu'au moins le RR ne déborde pas de la Selection !!!!!

Sinon du moment que ça marche .... ;-)
Bonne continuation !

Anacoluthe
« Le vrai est trop simple, il faut y arriver
toujours par le compliqué. »
- George SAND



'' nous a écrit ...
Voici le fruit de mon labeur :

3 sub pour successivement :
1) trouver l'index des dates: FindDateIndex
2)suivi de : convertir les champs dates dont les entrées sont sous la
forme AAAA-MM-JJ : Conversion_AAAAMMJJ_en_JJMMAAAA
3) puis encore une conversion du n° de mois en son nom :
Conversion_MM_en_MOIS

Ces 3 sub's, lancées successivement, fonctionnent correctement -sur
le fond- si ce n'est que les deux dernières ne se limitent pas à la
sélection réalisée par la 1ére sub. Ce qui conduit à la
destruction des entrées d'index dans le texte, puisque { XE
"2006-12-25:Noël 2006" } devient { XE "2006 decembre 25:Noël 2006" }



Ne peut on pas avoir quelque chose comme

While Selection.Find.Execute(findtext:=NumMois(iMois))
???????????
Wend

en plaçant le code des macros de conversion à la pace des ?????


'*********************************************************************************************
Sub FindDateIndex()
'RECHERCHE UN CHAMP INDEX DE DATES NOTÉ {INDEX f "d" ......}

Dim objChamp As Field

'les codes de champ peuvent ne pas étre visibles à l'écran
ActiveDocument.Range.TextRetrievalMode.IncludeFieldCodes = True


'PASSER EN REVUE TOUS LES CHAMPS DU DOCUMENT ACTIF
For Each objChamp In ActiveDocument.Fields
'SI LE CHAMP EST UN INDEX
If objChamp.Type = wdFieldIndex Then
'afficher le code de champ
If InStr(1, objChamp.Code, "f ""d""", vbTextCompare) Then
'si on a affaire à l'index de date alors sélectionner ce
champ
objChamp.Select
MsgBox objChamp.Code & " " & objChamp.Index
End If
End If
Next objChamp
End Sub

'*********************************************************************************************

Sub Conversion_AAAAMMJJ_en_JJMMAAAA()
'CONVERTIR LES DATES DU FORMAT AAAA-MM-JJ EN JJ-MM-AAAA

'!!!!!!!!!!!!!! le remplacement n'est pas restreint à la sélection
!!!!!!!!!!!!!

'LES ENTRÉES D'INDEX SOUS LA FORME AAAA-MM-JJ SONT MIS SOUS LA FORME
JJ-MM-AAAA
'forme AAAA-MM-JJ pour avoir un classement chronologique lors de la
compilation de l'index

' !!!! SELECTIONNER L'INDEX AVANT TOUTE AUTRE ACTION

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]{4})-([0-9]{2})-([0-9]{2})"
.Replacement.Text = "3-2-1"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With


Selection.Find.Execute Replace:=wdReplaceAll

SubEnd:
End Sub

'*********************************************************************************************
Sub Conversion_MM_en_MOIS()
'REMPLACEMENT DU NUMERO DU MOIS PAR SON NOM

'!!!!!!!!!!!!!! le remplacement n'est pas restreint à la sélection
!!!!!!!!!!

Dim iMois As Integer 'indice de boucle pour les 12 mois

NumMois = Array("-01-", "-02-", "-03-", "-04-", "-05-", "-06-", "-07-",
"-08-", "-09-", "-10-", "-11-", "-12-")
NomMois = Array(" janvier ", " février ", " mars ", " avril ", " mai
", " juin ", " juillet ", " août ", " septembre ", " octobre ", "
novembre ", " décembre ")

'BOUCLER POUR LES 12 -MM-
For iMois = 0 To 11

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = NumMois(iMois)
.Replacement.Text = NomMois(iMois)
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next iMois


End Sub

'*********************************************************************************************



Avatar
Geo

Bonjour !

Dans toutes vos macros de RR remplacez déjà
.Wrap = wdFindAsk
par
.Wrap = wdFindStop
pour qu'au moins le RR ne déborde pas de la Selection !!!!!


Et on pourrait sans doute sélectionner au départ le champ INDEX, et
donc la table elle-même.

--
A+

1 2