gysmok
Messages postés4Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention 3 juin 2009
-
2 juin 2009 à 11:33
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDerniè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.
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 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.
gysmok
Messages postés4Date d'inscriptionjeudi 16 avril 2009StatutMembreDerniè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
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?
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 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>
cs_loulou69
Messages postés672Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention 2 juin 20161 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 =????