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

Macros et VBA Excel Discussion :

Modifier le texte d'un signet word via Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut Modifier le texte d'un signet word via Excel
    Bonjour à tous,

    Normalement je trouve toujours mes réponses en cherchant sur internet mais là je me suis inscrits et sollicite votre aide car je suis bloqué depuis quelques jours.

    Je dois réaliser un outil sous Excel pour mon entreprise: générer des documents Word à partir des informations saisies dans Excel. Ex: nom client, coordonnées, version du document, etc. Les employés saisissent seulement les informations dans les cellules, puis cliquent sur un bouton pour générer le document. La macro va chercher le document Word modèle et les informations sont reportées directement vers des signets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("date1").Range.Text = Sheets("Informaciones generales").Range("C12").Value
    Je ne peux pas faire du publipostage puisque les documents sont différents selon les clients.

    Jusque ici tout va bien, sauf que les documents évoluent. Ainsi ma macro va en permanence rechercher le dernier document Word créé. Sauf que lors de l'actualisation (ex: numéro de version changée), je me retrouve avec toutes les informations en double au niveau des signets. C'est à dire que le texte n'est pas modifié mais ajouté à droite du texte de l'ancienne version.

    Après recherche il serait plus facile de passer par des champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Fields("date1").Result.Text = "valeur a reporter"
    Sauf que je ne sais pas comment définir ce fameux "Fields" dans Word. Je sais que c'est un champ, ctrl+F9, mais je ne sais pas quoi mettre dedans.

    J'ai également trouvé cette formule qui me renvoie des erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim objRange As Range
    Set objRange = ActiveDocument.Bookmarks.Item("date1").Range
    objRange.Text = Sheets("Informaciones generales").Range("C12").Value
    ActiveDocument.Bookmarks("date1").Range.Select
    Selection.Text = Sheets("Informaciones generales").Range("C12").Value
    objRange.Bookmarks.Add "date1"
    J'espère que j'ai été clair et que vous pourrez m'aider.

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut Macro fonctionnant 1 fois sur 2
    Bonjour,

    Je ne comprends rien car j'ai une macro qui ne fonctionne qu'une fois sur deux. Les codes me paraissent corrects.

    Je change la valeur de la cellule "C12" par exemple, lance la macro test(), le document word s'ouvre, et j'ai une erreur '462' au niveau de la ligne en vert.

    Je debug, ferme le document word, relance la macro Test(), et cela marche, le signet dans Word est bien modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub RemplirSignet(S As String, T As String)
       
    Dim Place As Long
    Place = ActiveDocument.Bookmarks(S).Range.Start
    ActiveDocument.Bookmarks(S).Range.Text = T
    ActiveDocument.Bookmarks.Add Name:=S, _
    Range:=ActiveDocument.Range(Place, Place + Len(T))
    
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
     
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Open("C:\\\.docx") 'ouvre document Word
    WordApp.Visible = True
    RemplirSignet "date1", Sheets("Informaciones generales").Range("C12").Value
    RemplirSignet "nombre_proyecto", Sheets("Informaciones generales").Range("C3").Value
    End Sub
    Donc si quelqu'un voit une erreur dans le code car je n'y comprends rien.
    Car la macro fonctionne vraiment 1 fois sur 2, j'ai testé une 20 de fois à la suite....


    Merci

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    tu ne peux pas utiliser Activedocument dans une instance de Word, tu dois passer par l'instance du document.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public WordApp As Word.Application
    Public WordDoc As Word.Document
     
    Public Sub RemplirSignet(S As String, T As String)
    Dim Place As Long
        Place = WordDoc.Bookmarks(S).Range.Start '*******
        WordDoc.Bookmarks(S).Range.Text = T
        WordDoc.Bookmarks.Add Name:=S, _
        Range:=WordDoc.Range(Place, Place + Len(T))
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
        Set WordApp = CreateObject("word.application")
        Set WordDoc = WordApp.Documents.Open("C:\\\.docx") 'ouvre document Word
        WordApp.Visible = True
        RemplirSignet "date1", Sheets("Informaciones generales").Range("C12").Value
        RemplirSignet "nombre_proyecto", Sheets("Informaciones generales").Range("C3").Value
    End Sub
    Sans tester, je ne me souviens plus si tu dois utiliser l'instance du document ou de l'application.
    Tu peux tester l'un ou l'autre, pour moi ?
    A+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    Avec ce code j'ai maintenant toujours la même erreur a la même ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub RemplirSignet(S As String, T As String)
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
     
    Dim Place As Long
        Place = WordDoc.Bookmarks(S).Range.Start 
        WordDoc.Bookmarks(S).Range.Text = T
        WordDoc.Bookmarks.Add Name:=S, _
        Range:=WordDoc.Range(Place, Place + Len(T))
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
     
    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\tquevarec\Mis documentos\ADS\Travaux à réaliser\Generation documentation\Plan de Proyecto Template3.docx") 'ouvre document Word
    WordApp.Visible = True
    RemplirSignet "date1", Sheets("Informaciones generales").Range("C12").Value
    RemplirSignet "nombre_proyecto", Sheets("Informaciones generales").Range("C3").Value
    End Sub
    Et j'ai bien essayé avec les deux...

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Tel que tu l'as écrit (où tu l'as déclaré), Wordoc est inconnu dans ta sub remplissage !
    Regarde ce qu'à écrit Ousk ...!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    Il me semble que les variables S et T sont définies ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Sub RemplirSignet(S As String, T As String)
    Sinon j'ai voulu définir Worddoc de cette façon mais j'ai une erreur a ce niveau-ci, ce que je ne comprends pas car la macro test() ouvre le document non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub RemplirSignet(S As String, T As String)
    Dim WordObj As Word.Application
    Dim WordDoc As Word.Document
    Set WordObj = CreateObject("word.application") 'ouvre session word
    Set WordDoc = WordObj.ActiveDocument
    
    Dim Place As Long
        Place = WordDoc.Bookmarks(S).Range.Start
        WordDoc.Bookmarks(S).Range.Text = T
        WordDoc.Bookmarks.Add Name:=S, _
        Range:=WordDoc.Range(Place, Place + Len(T))
     
    End Sub
    Excusez-moi si je pose des question idiotes mais j'ai une formation mécanique à l'origine et la je dois faire quelque chose qui dépasse mes compétences en VB, d'où ma venue ici pour demander de l'aide...

    Mais ce qui m'etonne le plus c'est que la toute première macro fonctionnait..une fois sur deux certe mais fonctionnait.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    c'est bon j'ai trouvé:

    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
    Public Sub RemplirSignet(S As String, T As String, WordDoc As Word.Document)
     
    Dim Place As Long
        Place = WordDoc.Bookmarks(S).Range.Start
        WordDoc.Bookmarks(S).Range.Text = T
        WordDoc.Bookmarks.Add Name:=S, _
        Range:=WordDoc.Range(Place, Place + Len(T))
     
    End Sub
     
    Sub test()
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
     
    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Open("C:\.docx") 'ouvre document Word
    WordApp.Visible = True
    RemplirSignet "date1", Sheets("Informaciones generales").Range("C12").Value, WordDoc
    RemplirSignet "nombre_proyecto", Sheets("Informaciones generales").Range("C3").Value, WordDoc
    End Sub
    Merci pour votre aide, je mets le sujet en resolu

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    Solution trouvée: je mets le code qui pourrait être utilse à d'autres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub RemplirSignet(S As String, T As String, WordDoc As Word.Document)
     
    Dim Place As Long
        Place = WordDoc.Bookmarks(S).Range.Start
        WordDoc.Bookmarks(S).Range.Text = T
        WordDoc.Bookmarks.Add Name:=S, _
        Range:=WordDoc.Range(Place, Place + Len(T))
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
     
    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Open("C:\.docx") 'ouvre document Word
    WordApp.Visible = True
    RemplirSignet "date1", Sheets("Informaciones generales").Range("C12").Value, WordDoc
    RemplirSignet "nombre_proyecto", Sheets("Informaciones generales").Range("C3").Value, WordDoc
    End Sub

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    N'ouvre pas deux discussions pour une même question.
    Je fusionne.
    Pour faire ce que tu veux sans détruire le signet, regarde là, tu as deux solutions. C'est dans le forum VBA-Word, tu devras simplement utiliser tes instances à la place de Selection ou ActiveDocument.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/06/2015, 22h30
  2. [OL-2003] Modifier le texte d'un modele Outlook via Excel
    Par closer dans le forum Outlook
    Réponses: 0
    Dernier message: 04/02/2015, 17h31
  3. Modifier le texte d'un document word avec Java
    Par randhalrens dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 0
    Dernier message: 16/09/2009, 15h38
  4. Remplir un doc word via excel
    Par enretard dans le forum Word
    Réponses: 12
    Dernier message: 17/06/2008, 12h46
  5. couper/coller entre deux signets word via excel
    Par ptitemar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/08/2007, 11h41

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