IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Ajouter texte avec style de texte dans word


Sujet :

VBA Word

  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2007
    Messages : 59
    Par défaut Ajouter texte avec style de texte dans word
    Bonjour,

    Une fois de plus je suis au bout du roulot, j'espère avancer sur le sujet grâce à vous.

    J'ai des spécifications dans des documents Word.
    Je souhaite sortir de ces spécifications les règles de gestion et les intégrer dans un nouveau document Word avec un certain format (pour les intégrer dans un outil).
    L'extraction des RG fonctionne (vous m'avez aidé sur cette partie déjà), c'est l'intrégation dans le document Word qui pose problème.

    Le code s'exécute en VBA dans un doc Word.

    1.création du document (le document de sortie n'existe pas, il faut le créer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    NomFichierWord = ThisDocument.Path + "\result" + date_s + ".doc"
    Dim FSO As New FileSystemObject
    FSO.CreateTextFile (NomFichierWord)
     
    'Créer une instance de word
    Set oWord = CreateObject("Word.Application")
    oWord.Documents.Open NomFichierWord
    oWord.Visible = False
    oWord.ShowMe
    =>ce code ne me semble pas très propre. on doit pouvoir faire mieux.

    2.ajout des différents styles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
                With ActiveDocument.Styles("Titre 1").Font
                    .Bold = True
                    .Italic = True
                    .ColorIndex = wdBlack
                    .Name = "Times New Roman"
                    .Size = 14
                End With
                ActiveDocument.Styles.Add ("Nom_Exigence")
                With ActiveDocument.Styles("Nom_Exigence").Font
                    .Bold = True
                    .Italic = False
                    .ColorIndex = wdBlack
                    .Name = "Times New Roman"
                    .Size = 12
                End With
                ActiveDocument.Styles.Add ("Descript_exigence")
                With ActiveDocument.Styles("Descript_exigence").Font
                    .Bold = False
                    .Italic = False
                    .ColorIndex = wdBlack
                    .Name = "Times New Roman"
                    .Size = 10
                End With
    =>L'ajout des styles dans le nouveau document ne fonctionne pas. Il fonctionne uniquement dans le document courant.

    le code "ActiveDocument.Styles.Add ("Descript_exigence")" plante 1 fois 2 en me disant que le style existe déjà = je ne comprend pas ce comportement


    3.ajout des lignes dans le document word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    i=0
        oWord.Selection.TypeText Trim(toutesRGdoc(i))
        oWord.Selection.TypeParagraph
        For i = 1 To maxnb Step 2
            oWord.Selection.Style = ActiveDocument.Styles("Nom_Exigence")
            oWord.Selection.TypeText Trim(toutesRGdoc(i))
            oWord.Selection.TypeParagraph
            oWord.Selection.Style = ActiveDocument.Styles("Descript_exigence")
            oWord.Selection.TypeText Trim(toutesRGdoc(i + 1))
            oWord.Selection.TypeParagraph
        Next i
        oWord.Selection.TypeParagraph
        oWord.Documents.Save
    toutesRGdoc est une liste de string
    "oWord.Selection.Style = ActiveDocument.Styles("Nom_Exigence")" ne fonctionne pas avec le message = "le membre de la collection requis n'existe pas"
    et même en faisant "oWord.Selection.Style "Titre 1"" = quand j'ouvre mon document il n'y a aucun format.

    Je ne comprend pas comment on ajoute une nouvelle ligne dans un document Word en lui appliquant un Style. Mon document Word est bien généré mais aucun style n'est pris en compte.


    J'espère avoir été claire

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Un morceau à la fois.
    Pour la création du document, il n'est pas utile de passer par le File System Object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim wApp As Word.Application
    Dim oDoc As Document
     
    Set wApp = New Word.Application
    Set oDoc = wApp.Documents.Add
    Mais, il me semble que Word est déjà ouvert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFichierWord = ThisDocument.Path + "\result" + date_s + ".doc"
    Dans ce cas, pas besoin de déclarer ni d'instancier une fois de plus Word.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim oDoc As Document
    Dim stNouvNom As String
     
    stNouvNom = ActiveDocument.fullName
    Set oDoc = Application.Documents.Add
    odoc.SaveAs FileName:=stNouvNom
    Par contre, pourquoi ajouter des styles dans ton document ?

    Si tu crées un modèle avec tes styles, tu peux utiliser ce modèle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents.Add Template:="C:\temp\monModèle.dotm"
    Je pense qu'on a déjà une bonne base pour te faire plancher toute la nuit !
    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 !

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2007
    Messages : 59
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Mais, il me semble que Word est déjà ouvert ?
    Oui mais c'est le word contenant la macro. Je souhaite créer un nouveau document word "resultat.doc" qui contiendra uniquement les résultats d'une seule exécution. C'est pour cela que le créé un nouveau document.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim oDoc As Document
    Dim stNouvNom As String
     
    stNouvNom = ActiveDocument.fullName
    Set oDoc = Application.Documents.Add
    odoc.SaveAs FileName:=stNouvNom
    => ce morceau de code n'est donc pas utile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents.Add Template:="C:\temp\monModèle.dotm"
    La complication de la macro par la création d'un dotm n'est pas utile puisque que je vais avoir 2 styles seulement.

    Un coup de main sur les autres points STP.
    Sachant que si tu n'as pas envie de te prendre la tête, c'est la non prise en compte des styles qui est bloquant pour moi.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Le dot ou dotm, tu le fais à la main, tu éviteras les messages d'erreur.
    Mais c'est une question de choix.

    Si word est ouvert, seule cette ligne est utile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim odoc As Document
    Dim stNouvNom As String
     
    stNouvNom = ActiveDocument.Path + "\result" + date_s + ".doc"
    Set oDoc = Documents.Add Template:="C:\temp\monModèle.dotm"
    odoc.SaveAs FileName:=stNouvNom
    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 !

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2007
    Messages : 59
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim odoc As Document
    Dim stNouvNom As String
     
    stNouvNom = ActiveDocument.Path + "\result" + date_s + ".doc"
    Set oDoc = Documents.Add Template:="C:\temp\monModèle.dotm"
    odoc.SaveAs FileName:=stNouvNom
    Oui mais là tu ne créé pas un nouveau document.
    tu insères le dotm dans le doc Word de la macro et le doc de la macro s'enregistre dans un nouveau nom.
    Tu créé un nouveau document contenant et ma macro et mon futur contenu!? j'étais partis sur un mode de fonctionnement comme avec un programme .NET C#:
    un doc Word: avec la macro qui pourra être utilisé à volonté
    un doc Word: contenant uniquement le résultat d'une exécution de la macro

    Une idée sur "c'est la non prise en compte des styles qui est bloquant pour moi. "

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    A je ne crée pas de nouveau document ?

    Pourtant, j'aurais juré que cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oDoc = Documents.Add Template:="C:\temp\monModèle.dotm"
    ajoute un nouveau document à la collection des documents et ce nouveau document est basé sur le modèle passé en paramètre.

    La macro peut être contenue dans un autre document sans problème.

    Si les styles sont contenu dans le modèle, tu devrais débloquer la situation.
    La gestion des style en VBA n'est pas insurmontable mais est souvent une source de problème.
    Il faut normalement tester l'existence des styles avent de les utiliser ou de les créer.
    Si ils sont contenu dans le document, ce problème est évité.
    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 !

  7. #7
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2007
    Messages : 59
    Par défaut
    Bonjour,

    Je comprends ta façon de tourner le problème. J'ai donc réaliser la création du fichier comme tu me l'as conseillé (je suis tellement mauvais en VBA Word).

    1. Le document nouvellement créé contient bien les styles
    (je mettrais un récapitulatif du code une fois le problème générale résolut)

    2.
    Par contre l'ajout avec un style ne fonctionne toujours pas
    oDoc étant le document resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    With oDoc.Selection
            .Style = "Titre 1"
            .TypeText Trim(toutesRGdoc(i))
            .TypeParagraph
            For i = 1 To maxnb Step 2
                'oDoc.Selection.Style = ActiveDocument.Styles("Nom_Exigence")
                .Style = "Nom_Exigence"
                .TypeText Trim(toutesRGdoc(i))
                .TypeParagraph
                .Style = "Descript_exigence"
                .TypeText Trim(toutesRGdoc(i + 1))
                .TypeParagraph
            Next i
            oDoc.Selection.TypeParagraph
        End With
        oDoc.Documents.Save
    "oDoc.Selection", "oDoc.Documents" ,... : ya rien qui marche

    Merci pour tes retours.

    PI:
    Pour mon fichier c'est un dot et non un dotm car je suis en Word 2002.

  8. #8
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2007
    Messages : 59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        i = 0
        oDoc.Select
        With Selection
            .Style = "Titre 1"
            .TypeText Trim(toutesRGdoc(i))
            .TypeParagraph
            For i = 1 To maxnb Step 2
                'oDoc.Selection.Style = ActiveDocument.Styles("Nom_Exigence")
                nbRGtrouveDsDoc = nbRGtrouveDsDoc + 1
                .Style = "Nom_Exigence"
                .TypeText Trim(toutesRGdoc(i))
                .TypeParagraph
                .Style = "Descript_exigence"
                .TypeText Trim(toutesRGdoc(i + 1))
                .TypeParagraph
            Next i
            .TypeParagraph
        End With
        oDoc.Save
    Le code suivant fonctionne par contre les RG du fichier N sont effacés par celle du fichier N+1.

    Une idée?

  9. #9
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2007
    Messages : 59
    Par défaut
    PROBLEME RESOLU

    Création du fichier résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'création du nom et patch du fichier resultat
    NomFichierWord = ThisDocument.Path + "\result" + date_s + ".doc"
    'création du nom et patch du fichier dot contenant les styles
    NomFichierDot = ThisDocument.Path + "\modelePerso.dot"
    'création d'un nouveau document Word avec prise en compte du fichier dot
    Set oDoc = Documents.Add(NomFichierDot, , , False)
    'enregistrement sur le disque du nouveau document
    oDoc.SaveAs FileName:=NomFichierWord
    Ajout de String dans le document Result
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    'sélection du document resultxxxxxxxx.doc
    oDoc.Select
    'aller à la fin de la sélection
    Selection.EndOf
        'on travaille sur l'objet Selection
        With Selection
             'on positionne le style
            .Style = "Titre 1"
            'on ajoute la ligne String
            .TypeText Trim(toutesRGdoc(i))
            'on ajoute un saut de ligne
            .TypeParagraph
        End With
        'sauvegarde du document
        oDoc.Save
    On ferme le fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2003] Macro cherchant du text ss Excel pour copie dans word
    Par yannick113 dans le forum VBA Word
    Réponses: 0
    Dernier message: 21/12/2010, 10h53
  2. Afficher du texte avec indices et exposants dans un DrawingVisual
    Par vinlap dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 22/05/2009, 10h56
  3. JTextPane avec styles de texte différents.
    Par Razgriz dans le forum Graphisme
    Réponses: 1
    Dernier message: 05/06/2008, 12h23
  4. Réponses: 1
    Dernier message: 07/05/2006, 17h33
  5. [JTextComponent] Afficher du texte avec style et image
    Par jean_bobi dans le forum Composants
    Réponses: 9
    Dernier message: 30/10/2005, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo