Macro word changement de style

Résolu
gysmok Messages postés 4 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 3 juin 2009 - 2 juin 2009 à 11:33
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 - 3 juin 2009 à 09:05
Bonjour,

N'étant pas familier VB et ne connaissant pas les fonctions disponible, je fais appel à vous pour m'aider à réaliser une macro basic.

Voila ce que je veux faire, j'aimerais parcourir un document word ligne par ligne et ensuite en fonction du style de la ligne lui attribuer un nouveau style. J'aimerais juste connaitre les fonctions me permettant de parcourir le document ainsi que pour la vérification et le changement de style.

Toutes mes recherches sur internet ne mon pas permis de trouver une solution pour faire ça.

Merci d'avance pour vos réponse.

6 réponses

cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
2 juin 2009 à 12:23
Bonjour

Il aurait été intéressant de connaître exactement les difficultés que tu rencontres pour que l'on t'aide précisément. (du code par exemple)

Prendre connaissance du modèle objet Word (dans l'éditeur VBA: explorateur d'objet), Il faudra déjà utiliser les objets  "Activedocument,Selection,Range"

Donc ligne par ligne dans Word cela n'existe pas. Cela doit être paragraphe par paragraphe, phrase par phrase ou mot par mot, ou encore caractère par caractère.

On peut affecter un style à l'un de ces objets.

Attention dans une sélection de texte, tout le texte n'obéit pas à un certain style. Si un style a été appliqué à une zone de texte, il est encore possible que des propriétés complémentaires aient été données à certains caractères. Savoir si on est d'accord pour perdre ces propriétés.

Affecter un style redéfinira les propriétés caractères à toute la sélection, il faut alors accepter de perdre toutes les propriétés spécifiques (couleur, exposant, taille, police,..) à l'intérieur de la sélection.
0
gysmok Messages postés 4 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 3 juin 2009
2 juin 2009 à 13:40
Merci pour ta réponse rapide, le problème est que je cherchais à faire cela par ligne. Par paragraphe cela marche comme je le souhaite juste un ou 2 petits problèmes encore.

Voici ma macro.

Sub ChangementStyleDocument()

' Macro écrite par kfournie

    'Parcourt chaque paragraphe du document

   

    ' With ActiveDocument

     '   .UpdateStylesOnOpen = True

     '   .AttachedTemplate = _

      '      "D:\Documents and Settings\kfournie\Application Data\Microsoft\Templates\terminaux.dot"

   ' End With

   ' ActiveDocument.Save

   ' ActiveWindow.Close

   ' With ActiveDocument

   '     .UpdateStylesOnOpen = False

    '    .AttachedTemplate = _

    '        "D:\Documents and Settings\kfournie\Application Data\Microsoft\Templates\terminaux.dot"

   ' End With

    Dim Paragraphe As Paragraph

    For Each Paragraphe In ActiveDocument.Paragraphs

    If Paragraphe.style = "HeadingArticle" Then ' si le syle du paragraphe et de type "headingArticle"

    Paragraphe.style = "Titre"                  ' affecte le nouveau style au paragraphe

    End If

    If Paragraphe.style = "TextBody" Then

    Paragraphe.style = "Normal"

    End If

    If Paragraphe.style = "Heading1" Then

    Paragraphe.style = "Titre 1"

    End If

    If Paragraphe.style = "Heading2" Then

    Paragraphe.style = "Titre 2"

    End If

    If Paragraphe.style = "Heading3" Then

    Paragraphe.style = "Titre 3"

    End If

    If Paragraphe.style = "Heading4" Then

    Paragraphe.style = "Titre 4"

    End If

    If Paragraphe.style = "Preformatted" Then

    Paragraphe.style = "mode donsole"

    End If

    Next

    ActiveDocument.Save  

    End Sub

1° Questions :
Je doit d'abord appliquer un modèle de document pour récupérer les styles que je souhaite appliqués,
Sur mon PC j'ai mis
"D:\Documents and Settings\kfournie\Application Data\Microsoft\Templates\terminaux.dot"
Je ne sais pas comment fonctionne les relative path sous VB afin que cela fonctionne ensuite pour tous les utilisateurs.

2° Question :

Pour appliquer le modèles de document il faut fermer le document et le réouvrir,
comment enregistrer le chemin accès du fichier d'ou l'ont lance la macro pour le réouvrir.
Car en faisant cela il me met une erreur comme aucun document n'est ouvert
ActiveWindow.Close
With ActiveDocument

Merci d'avance pour vos réponses.
0
gysmok Messages postés 4 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 3 juin 2009
3 juin 2009 à 08:25
Merci pour tes réponses cela fonctionne bien maintenant.

Je ne voudrais pas abuser mais j'ai encore 2 petites question.
J'ai également ajouter un bas de page

 ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(0) _
        , Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces
    Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(8.5) _
        , Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
    Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(17) _
        , Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces

       
    With Selection.HeaderFooter.Range
    .Text = "Objet :" + vbTab + "/" + vbTab + "Ref TG0049 Ed 03

Cela me met bien le texte comme souhaite mais au milieu je souhaite affiché les pages du document, ex 1/10
J'ai essayé en rajoutant les champs {page}/{NUMPAGES} mais il ne remplace pas les champs par les numéros de pages.

Comment faire pour remettre le pointeur à la première position ligne 0 caractère 0?

Merci d'avance pour vos réponse.
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
3 juin 2009 à 09:05
Aide en ligne sous VBA
Si la sélection se trouve dans une zone de notes de fin ou de notes de bas de page en mode Page, cet exemple montre comment passer dans le document principal.



Set myView =  ActiveDocument.ActiveWindow.View
If myView. SeekView   = wdSeekFootnotes Or _
    myView.SeekView =  wdSeekEndnotes Then
    myView. SeekView   = wdSeekMainDocument
End If
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
2 juin 2009 à 14:37
Q1) dossiers des modèles utilisateur

ModeleUtilisateur = Application.Options.DefaultFilePath(wdUserTemplatesPath)
il suffit d'ajouter "\terminaux.dot"

Q2) Chemin d'une macro : en 3 parties séparés par des points 
Nom_du_projet.Nom_du_module.Nom_de_la_macro
Sous l'éditeur VBA le chemin d'une macro  est directment visible dans l'explorateur de projet

Pour lancer une macro

Set appWord=Wscript.CreateObject("Word<wbr>.Application")
appWord.Run "Nom_du_projet.Nom_du_module.Nom_de_la_macro"</wbr>
-2
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
3 juin 2009 à 08:45
Avec l'enregistreur de macro
Ajouter un numéro de page
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= "PAGE  ", PreserveFormatting:=True

retourner en début de document
Selection.HomeKey Unit:=wdStory

par contre si le volet (Pane) est la l'entete ou le bas de page, il faut revenir au corps du document
ActiveWindow.ActivePane.View.SeekView =????
-2
Rejoignez-nous