cs_tatayet
Messages postés10Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention20 juillet 2006
-
20 juil. 2006 à 13:55
cs_tatayet
Messages postés10Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention20 juillet 2006
-
20 juil. 2006 à 15:25
Tatayet
Bonjour je fais un traîtement sur un fichier word contenant environ 400-500 pages. Chaque page correspond a un bon de commande. Je mets en gras les lignes les plus importantes, 4 lignes par page. Mon soucis c'est que je passe 4 fois dans tout le fichier ce qui allonge le temps de triatement de la macro. Je voulais savoir si il est possible de remplacer 4 boucles successives en une seule.
'-----------------------------------------------------------------------------
' MISE EN GRAS DE LIGNES SPECIFIQUES
'-----------------------------------------------------------------------------
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "SECTEUR"
While .Execute
Selection.Paragraphs(1).Range.Select
Selection.Range.Bold = wdToggle
Selection.Collapse wdCollapseEnd
Wend
End With
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "LIBELLE"
While .Execute
Selection.Paragraphs(1).Range.Select
Selection.Range.Bold = wdToggle
Selection.Collapse wdCollapseEnd
Wend
End With
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "COL "
While .Execute
Selection.Paragraphs(1).Range.Select
Selection.Range.Bold = wdToggle
Selection.Collapse wdCollapseEnd
Wend
End With
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "RECEPTION"
While .Execute
Selection.Paragraphs(1).Range.Select
Selection.Range.Bold = wdToggle
Selection.Collapse wdCollapseEnd
Wend
End With
EN GROS je voudrais que ca donne un truc comme ca au cas ou je me suis mal fais comprendre.
le code ci dessous ce fonctionne pas
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "SECTEUR" and "LIBELLE" and "COL " and "RECEPTION"
While .Execute
Selection.Paragraphs(1).Range.Select
Selection.Range.Bold = wdToggle
Selection.Collapse wdCollapseEnd
Wend
End With
Merci d'avance de l'attention porté à ce message
A voir également:
Remplacer plusieurs boucles successives en une seule
ntm113
Messages postés12Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention20 juillet 2006 20 juil. 2006 à 15:18
Désolé il y avait un truc que j'ai pas vu mais je pouvais pas savoir :
Moi, mon code je l'avais mis directement dans ThisDocument. Mais si on le met dans un Module il faut présiser à quel document s'applique Paragraph. Donc là je suis sûr que çà marche :
For Each p In ActiveDocument.Paragraphs
If InStr(p.Range.Text, "SECTEUR") Or InStr(p.Range.Text, "LIBELLE") _
Or InStr(p.Range.Text, "COL") Or InStr(p.Range.Text, "RECEPTION") Then
p.Range.Bold = True
End If
Next
Il fallait aussi remplacer wdToggle par True parce sinon çà fait passer les paragraphes qui sont déjà en gras en normal.
Sinon le meilleur moyen pour cibler une erreur c'est de passer en mode déboggage et de demander des espions express sur les différents éléments.
tof008
Messages postés695Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention 5 janvier 201033 20 juil. 2006 à 14:00
Tu peux eventuellement mettre 4 emplacements dans un tableau et tu boucle sur la longueur du tableau et les mettant a chaque fois dans une variable....
en gros :
for i = 1 to 4
emp = tab(i)
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = "" & emp & ""
While .Execute
Selection.Paragraphs(1).Range.Select
Selection.Range.Bold = wdToggle
Selection.Collapse wdCollapseEnd
Wend
End With
next
Je ne sais pas si c'est ca que tu veux mais j'espere que fca t aidera!
(Si la réponse vous convient, appuyez sur réponse acceptée...).
ntm113
Messages postés12Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention20 juillet 2006 20 juil. 2006 à 14:19
Je pense qu'utiliser la fonction Find n'est pas un bon moyen pour la rapidité.
Cette méthode revient à faire édition Rechercher et il n'y a pas moyen de rechercher 2 textes différents en même temps.
Une solution plus efficace serait de faire un truc du genre :
For Each p in Paragraphs
If Instr(p.text,"SECTEUR") Or Instr(p.text,"LIBELLE") Or Instr(p.text,"COL ") Or Instr(p.text,"RECEPTION") Then
p.Range.Bold = wdToggle
p.Collapse wdCollapseEnd
End If
Next
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_tatayet
Messages postés10Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention20 juillet 2006 20 juil. 2006 à 14:32
Tatayet
Merci je pense que si je peux reduire le temps de traitement par cela ca m interesse franchement de plus qu au boulot ca tourne sur un p2. Par contre g du apprendre le vba il y a peu de temps donc g pas toute les notions.
Sur le code que tu m as donné le compilateur bloque sur "For Each p In Paragraphs"
mais je vois pas l 'erreur, faut il initialiser p ou la declarer en variable.
ntm113
Messages postés12Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention20 juillet 2006 20 juil. 2006 à 14:48
Non en fait c'est p.text qui marche pas mais là il faudrait que t'apprennes à te servir de l'aide. Pour avoir le texte du paragraphe p il faut faire p.Range.Text
Le code qui marche sur mon PC est :
For Each p In Paragraphs
If InStr(p.Range.Text, "SECTEUR") Or InStr(p.Range.Text, "LIBELLE") _
Or InStr(p.Range.Text, "COL") Or InStr(p.Range.Text, "RECEPTION") Then
p.Range.Bold = wdToggle
End If
Next
Pense aussi à vérifier si tu n'es pas en Option Explicit dans quel cas il faut déclarer toutes les variables.
cs_tatayet
Messages postés10Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention20 juillet 2006 20 juil. 2006 à 15:05
Tatayet
merci
il bloque toujours sur le For Each p In Paragraphs
néanmoins je vais essyaer de chercher dans l'aide et pour l'opton explicit si tu dis que le code est bon
pour l 'option explicit, c'etait décoché si c bien ds l 'onglet editeur menu outil "déclaration des vairables obligatoires"
cs_tatayet
Messages postés10Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention20 juillet 2006 20 juil. 2006 à 15:14
Tatayet
'-----------------------------------------------------------------------------
' MISE EN GRAS DE LIGNES SPECIFIQUES
'-----------------------------------------------------------------------------
Dim p As Object
For Each p In Paragraphs
If InStr(p.Range.Text, "SECTEUR") Or InStr(p.Range.Text, "LIBELLE") _
Or InStr(p.Range.Text, "COL") Or InStr(p.Range.Text, "RECEPTION") Then
p.Range.Bold = wdToggle
End If
Next
si je met dim p as variant ou rien du tout ca bloque qd meme sur le for each p in Paragraphes