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 28/01/2011, 16h31   #1
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Par défaut De paragraphe en paragraphe

Tout d'abord, merci au site pour ses FAQ et tuto en VBA Word, moi qui habitué au macro Excel, ca m'a énormément aidé !

Je pilote Word depuis Excel

J'ouvre un document word et je dois remplacer plusieurs mots clefs.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordParagraph As Paragraph
Dim Tampon As String
'Ref(NbRef) as String est ce que je dois remplacer
'Retour(NbRetour) as String est ce par quoi je dois le remplacer
...
...
        For Each WordParagraph In WordDoc.Paragraphs
            Tampon = WordParagraph.Range.Text
            If Len(Tampon) > 1 Then Tampon = Left(Tampon, Len(Tampon) - 1)
            For NbRetour = 0 To NbRef - 1
                Tampon = Replace(Tampon, Ref(NbRetour), Retour(NbRetour))
            Next NbRetour
            WordParagraph.Range.Text = Tampon
        Next WordParagraph
Sauf que le Next WordParagraph ne change pas de paragraphe ! Il me remet sur le même paragraphe (et la macro tourne en boucle)
J'ai affecté "a" à Tampon juste WordParagraph.Range.Text = Tampon et là ça marchait !
Je me suis dit, je suis gêné par un retour à la ligne, alors j'ai supprimé le dernier caractère de Tampon, et ça marchait, mais ça faisait des trucs bizarres dans le document, car je dois avoir tout un tas de paragraphe avec juste un retour à la ligne.
Alors j'ai dis que je supprimerais je retour à la ligne que si tampon fait plus que 1 caractère, et ça m'a collé les 2 premiers paragraphes (j'ai l'impression) et après, ça recommençait à tourner en boucle sur le premier paragraphe.

Please Help Me !

Et Joyeux Week-End

Ps : Dim Tampon as String n'est pas une référence salace, juste un pure hasard (sisi, je le jure)
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 22h17   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
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 321
Points : 29 219
Points : 29 219
Salut,

Logique, lorsque tu changes le paragraphe, tu changes la collection et tu entres dans une boucle sans fin.

Soit tu comptes les paragraphes et tu les atteints par leur index, soit tu traites le contenu d'une autre manière.

Code :
1
2
3
4
5
6
7
dim intP as Integer
Dim intCp as integer
 
intP = Activedocument.Paragraphs.Count
 
For intCp = 1 to intP
ActiveDocument.Paragraphs(intCp) ....
__________________
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 29/01/2011, 10h08   #3
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Merci de la réponse. Je mets ça en pratique lundi matin. Ca devrais marcher.
Ce que je ne comprend pas, c'est quelle collection change ! Selon moi, je parcoure les objets Paragraph de la collection Paragraphs de mon document WordDoc. Et ce qui me laisse perplexe, c'est que ça marche lorsque je modifie par exemple le variable Tampon. (je laisse le même code je rajoutai juste une ligne pour réaffecter Tampon avant de le réaffecter au texte du paragraphe).
Je voudrais bien comprendre !

En tout cas merci beaucoup !!!
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 10h43   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
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 321
Points : 29 219
Points : 29 219
Salut,

Elle chane avec ce morceau de code : WordParagraph.Range.Text = Tampon

Essaie de faire un len du contenu d'un paragraphe, tu verras que le paragraphe contient 1 caractère de plus que ce que tu as comme texte, c'est la marque de paragraphe et affecter un nouveau texte à tous le paragraphe le modifie et modifie par la même occasion la collection.
__________________
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 31/01/2011, 11h02   #5
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Lundi matin et un café plus tard

Je code ça :
Code :
1
2
3
4
5
6
7
8
NbPar = WordDoc.Paragraphs.Count
        For PArCount = 1 To NbPar
        Tampon = WordDoc.Paragraphs(PArCount).Range.Text
            For NbRetour = 0 To NbRef - 1
                Tampon = Replace(Tampon, Ref(NbRetour), Retour(NbRetour))
            Next NbRetour
        WordDoc.Paragraphs(PArCount).Range.Text = Tampon
        Next PArCount
et ça marche pas. En fait, ça bloque au premier paragraphe modifié, et ça veut plus le quitter jusqu'à la fin de la boucle for (PArCount = NbPar)
Je cherche encore, mais je crois avoir toujours besoin d'aide !
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 11h28   #6
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
J'ai rajouté du code faisant repartir le parcours du document depuis 0 si une modif est faite. 1ère modif, la macro repart bien au début mais se rebloque là où la première modif à été faite.
J'ai oublié de préciser que la plupart des paragraphes sont écrits dans des tableaux. Peut-être que ça à un rapport, peut-être pas.
Je pense plutôt à un caractère de fin de paragraphe qui saute ou qqch comme ca, mais je n'y touche pas théoriquement. Je ne comprends pas trop ...
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 11h21   #7
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Voici une autre solution.

Je me suis souvenu d'un outil bien sympathique qui est l'enregistreur de macro. Je me suis dis
Citation:
Envoyé par moi
En fait, ce dont j'ai besoin, c'est un bon gros "rechercher/remplacer"
J'ai donc ouvert Word, lancé l'enregistreur de macro, fait un remplacement, suis allé chercher le code, enlever les bizarreries sans pour autant enlever les lignes qui me paraissent inutiles, adapté au fait que je pilote ça depuis Excel, et ai remplacé le code posté dans mon premier message par
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       'Remplacement
        For NbRetour = 0 To NbRef - 1
            With WordDoc.Range.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = Ref(NbRetour)
                .Replacement.Text = Retour(NbRetour)
                .Wrap = wdFindContinue
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
                .Execute Replace:=wdReplaceAll
            End With
        Next NbRetour
CQFC (ce qu'il fallait coder)
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web