Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2011, 12h51   #1
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Par défaut VB6 sous Windows7 word 2010 rechercher remplacer dans toutes les sections document

Bonjour
je travaille sous Windows7 avec word 2010
Je voudrais créer une macro qui recherche et remplace des mots par d'autres dans toutes les sections document
Le problème est que je n'arrive qu'à remplacer dans le coeur du document mais pas dans les autres sections (en-têtes, pieds de page, cadre, tableau ...)
Merci de votre aide
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h46   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Il faut "aller" dans chaque partie.

Code :
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Select
Sachant que pour chaque section, il peut y avoir trois types de Headers.

Pour les tableaux, ils sont parcourus aussi, mais avec la Story que l'on sélectionne. S'ils sont dans le cœur du document, ce sera dans la MainStory.

Pour les cadres, il faut sélectionner chaque contenu de cadre.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h41   #3
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Merci pour la réponse
J'ai déjà testé cette commande mais il ne va jamais que dans l'entête et nulle part ailleurs. Voici la partie du code qui execute le remplacement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
    Dim intx As Integer
    For intx = 1 To ActiveDocument.Sections.Count        
 
ActiveDocument.Sections(intx).Headers(wdHeaderFooterPrimary).Range.Select
 
   With Selection.Find
        .Text = texte
        .Replacement.Text = newtexte
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 
    Next intx
merci d'avance pour l'aide
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 18h38   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

C'est juste un exemple.


Pour les pieds de page, c'est Footers.

Pour les zones de texte, soit InLineShapes soit Shapes.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 11h08   #5
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Bonjour,
Merci pour la réponse
Je ne vois pas encore comment je peux automatiser le tout, à savoir :
- parcourrir le doc afin d'y repérer toutes les parties (header, footer, ...)
- à chacune de ces parties, rechercher et remplacer les mots
donc je voudrais que le code détecte si c'est le corps ou la tete ou le pieds ...
Merci pour l'aide
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h23   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Sans parcourir les différentes Stories, tu ne pourras pas savoir si l'une d'elles contient ce que tu cherches.

Par contre, on peut savoir quelles sont les stories qui existent dans le document et ne faire la recherche que sur ce qui existe.

Pour savoir si elles existent, on peut les compter.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h28   #7
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
merci c'est sympa de me mettre sur la piste
Serait-ce abuser de toi que de m'expliquer l'ensemble du processus ?
je ne suis pas un vrai programmeur et je n'ai malheureusement pas trop de temps
un grand merci d'avance
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h59   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Voilà la listes des Stories qui existent en Word.

wdCommentsStory
wdEndnoteContinuationNoticeStory
wdEndnoteContinuationSeparatorStory
wdEndnoteSeparatorStory
wdEndnotesStory
wdEvenPagesFooterStory
wdEvenPagesHeaderStory
wdFirstPageFooterStory
wdFirstPageHeaderStory
wdFootnoteContinuationNoticeStory
wdFootnoteContinuationSeparatorStory
wdFootnoteSeparatorStory
wdFootnotesStory
wdMainTextStory
wdPrimaryFooterStory
wdPrimaryHeaderStory
wdTextFrameStory


On peut, au lieu de les compter, faire une boucle sur les Stories.

Code :
1
2
3
4
Dim aStory As Range
For Each aStory In ActiveDocument.StoryRanges
    Debug.Print aStory.Find.Execute(findtext:="moi")
Next aStory
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h26   #9
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
un grand merci
je teste tout cela et je te tiens au courant (ou "je te dis quoi" chez les chtis)
ciao
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 20h40   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
hey;

Même si je comprends ce dialecte, je ne suis pas un chti !
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 11h38   #11
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Bonjour
Non, mais moi je suis du Borinage en Belgique et notre dialecte est proche de celui des chtis
Mais revenons-en à nos moutons
J'ai testé ton code et ça marche mais uniquement sur la première page pas les autres. Tu dois savoir qu'il y a des sauts de page entre 2 pages
Merci d'avance
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 13h27   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Les borains c'est ni des gins (ça c'est fait).

C'est que tu n'as pas que des sauts de page, tu as probablement des sauts de sections.
Ou autre possibilité, un première page différente des autres.

Peut-être y a-t-il un autre moyen ?


Quel est le but de ton remplacement ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 10h38   #13
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Bonjour et merci de t'intéresser à mon problème : ça fait du bien !
Dans mon boulot, je teste windows 7 et word 2010
il y a des lettres modèles (qu'on appelle modèles mais qui ont l'extension .docx)
Dans ces lettres, il y a des variables qui commence par "_Vnomvariable" afin qu'un programme en java puisse les repérer et les remplacer par des valeurs et ce, dans le word/document.xml que contient le format docx.
Seulement, word splite le _Vnomvariable en plusieurs morceaux en donnant des style différent à "_" et à "V" et ensuite au reste de la variable. Pour la recherche dans le document xml cela devient très compliqué à gérer. D'où l'idée de les remplacer par des recherches/remplacer par VVnomvariable qui, l'expérience nous a demontré que Word ne splite plus l'ensemble du mot et donc tout reste ensemble dans le xml et le remplacement par les valeurs peut se faire
La macro recherche à partir d'un fichier qui contient tous les noms de variable, les _Vnomvariable pour les remplacer par VVnomvariable (nomvariable change pour chaque ligne du fichier texte contenant les noms de variable)
J'espère avoir été clair ?
Merci de ton aide
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 16h26   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Pour éviter de faire des remplacements de mots, une méthode qui fonctionne est l'utilisation de signet, mais il faut que ce soit possible.

Il faudrait voir dans le XML ce que ça donne.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h02   #15
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Bonjour
Oui en effet il y a des sauts de sections dans ce document
y a t-il qlq chose à adapter dans le code que tu m'as donné ?
merci d'avance
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 11h00   #16
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
Bonjour
Concernant les signets, je les utilisent déjà pour insérer, sous forme boucle, sur des structures de données quand il existe plusieurs valeurs pour les mêmes variables. Mais pour ce que je recherche, je ne vois pas trop comment cela pourrait m'aider ?
Mais pour le reste, ton premier code fonctionne bien sauf qu'il est vrai qu'il y a plusieurs sauts de section
Merci d'avance
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 11h52   #17
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

L'avantage d'un signet, c'est que tu ne dois pas faire de recherche.
Quelle que soit sa position, il suffit de l'adresser pour l'atteindre.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 12h07   #18
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
le problème est que j'utilise déjà les signets et cela entrainerait des conflits avec mes autres scripts (boucles, structures de valeurs)
Mais avec ton code si je parviens à boucler sur toutes les sections, cela devrait être bon !?
merci
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 20h27   #19
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

En fait, il faut boucler les différents objets.

Code :
1
2
3
4
5
6
7
8
Dim intI as Integer
 
For intI = 1 To ActiveDocument.Sections.Count
   ActiveDocument.Section(intI).Headers(wdHeaderFooterPrimary).Range.Select
 
Selection.Find
....
Next intI
On peut toujours vérifier l'existence de l'objet

Code :
activeDocument.Sections(1).Headers(wdHeaderFooterPrimary)
Pour le pied de page

Code :
activeDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.Select
Et ainsi de suite
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 11h31   #20
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 130
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 130
Points : 18
Points : 18
un grand merci
je teste ça et te dis quoi !
D'ici là, une bonne fin d'année !
ciao
cpf2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h50.


 
 
 
 
Partenaires

Hébergement Web