XL 2019 Signet VBA Excel vers Word

pakito49

XLDnaute Nouveau
Bonjour à Tous,
J'ai besoin d'aide pour un problème que je n'arrive pas à résoudre depuis des jours/heures ...
Mon but étant d'automatiser des comptes-rendus médicaux.
J'ai réussi à ouvrir Word avec Excel MAIS Aucune données d'Excel ne remplace les signets du document Word.
Impossible de trouver la réponse à mon problème, malgré la recherche sur internet, les forums, etc.
Mon problème est au niveau du fichier XL : Onglet Comptes-rendus sur la case Word . Malheureusement aucunes modifications...

Voici LE CODE VBA :

VB:
Sub CreationCPEPatientNouveauword()

            ' Choix nom enregistrement '
       
     DossierNom = Application.InputBox("Word", "Word", "Nom du document WORD ?")
     Sauvegardeindicateurs = "\\Mac\Home\Documents\Systématisation Essai" & DossierNom & "\"

     On Error Resume Next
     Fichierexistant = GetAttr(fichier) & vbDirectory
     If Fichierexistant = False Then
        MkDir (Sauvegardeindicateurs)
        End If

             ' Ouverture fichier WORD'

    Set Wordapp = CreateObject("word.Application")
    Wordapp.Documents.Open "\\Mac\Home\Documents\Systématisation Compte-Rendu\Automatisation CPE NomPatient.docx"

        Worddoc.Bookmarks("NomPatient").Range.Text = Sheets("Consultation Pré-endodontique").Range("D5")
        Worddoc.Bookmarks("PrénomPatient").Range.Text = Sheets("Consultation Pré-endodontique").Range("D6")
        Worddoc.Bookmarks("Dent1").Range.Text = Range("G10").Value
   
   
        Wordapp.Visible = True 'affiche le document Word
   

End Sub
 
Dernière édition:
Solution
Bonjour,

C'est intéressant de pouvoir remplir un document Word Modèle depuis Excel :
J'ai conservé aussi les signets après avoir remplis le document
C'est juste un essaie. A vous de l'adapter choix des bon éléments Excel à remplir vers Word
le principe est là avec le code ci-dessous. et quelques explications

1) Dans votre document Word il faut l'organiser avec des signets
2) lorsque les signets sont créés dans Word pour les repérer
* Options \ Options Avancées \ Affichér les signets [...]
3) Pour comprendre on imagine 3 Signets dans le documents Word
* Dim signet(1 To 3) As Word.Bookmark
4) Chaqu'un des 3 Signets doit être remplacé par une valeur depuis Excel...

Staple1600

XLDnaute Barbatruc
Re

Mea culpa
Exact, cela m'avait échappé.

Donc pour te proposer un exemple de publipostage plus complet, j'attends que tu postes un fichier Excel (qui servira de base de données)
Le principe étant que pour chaque [FORMTEXT} unique que l'on voit sur ma copie d'écran devra correspondre une colonne dans la base Excel.
 

pakito49

XLDnaute Nouveau
J'ai bien vérifié mais c'est vrai que le publipostage impose d'avoir un tableau unique. Je sais que c'est possible de le faire sans ce tableau unique. Pour mon programme, le publipostage n'est pas pratique, sauf pour l'envoie de mail.
L'utilisation des contenus de textes ou des signets via Word est la bonne option pour moi. Si tu as la solution en VBA ce serait parfait.
 

Staple1600

XLDnaute Barbatruc
Re

Etant adepte du principe K.I.S.S, je reste sur mon idée.
Et donc toi, sur la tienne.
;)

NB: Par exemple, sur mon PC, quand je fais des tests VBA entre Word et Excel, Word réagit très lentement.
Ce qui fait que souvent je renonce pour aller au plus simple.

Néanmoins, voici un code que j'ai commis dans un autre fil, qui peut-être t'inspirera ;)
 

Staple1600

XLDnaute Barbatruc
Re

[une petite pointe d'humour et de tranche de vie pour finir]
pakito49 à dit:
J'ai besoin d'aide pour un problème que je n'arrive pas à résoudre depuis des jours/heures ...
Avec mon publipostage (piloté par par macro), j'ai généré N documents personnalisés (exporté en N PDF par macro)
Avec une seconde macro, j'ai envoyé N mails avec N PDF.
Et j'utilise cette méthode au boulot toutes les semaines pour créer non pas des attestations mais des conventions.
Le seul boulot manuel que je fais, c'est de saisir les données dans ma base Excel.
Et cette (*)tâche rébarbative me prend moins de 10 minutes.
(*) saisie/génération des documents/envoi mails avec PJ
(Souvent je lance ma macro, pendant le pause café )
;)
[/une petite pointe d'humour et de tranche de vie pour finir]
 

laurent950

XLDnaute Accro
Bonjour,

C'est intéressant de pouvoir remplir un document Word Modèle depuis Excel :
J'ai conservé aussi les signets après avoir remplis le document
C'est juste un essaie. A vous de l'adapter choix des bon éléments Excel à remplir vers Word
le principe est là avec le code ci-dessous. et quelques explications

1) Dans votre document Word il faut l'organiser avec des signets
2) lorsque les signets sont créés dans Word pour les repérer
* Options \ Options Avancées \ Afficher les signets [...]
3) Pour comprendre on imagine 3 Signets dans le documents Word
* Dim signet(1 To 3) As Word.Bookmark
4) Chaqu'un des 3 Signets doit être remplacé par une valeur depuis Excel vers Word
* LeMot(1 To 3) As String
5) Exemple si je veux changer le Signet(1) qui correspond à "Nom"
Par : LeNomDeLaPersonne
Alors :
Set signet(1) = WordDoc.Bookmarks("Nom") ' Depuis Word
LeMot(1) = Sheets("Consultation Pré-endodontique").Range("D5").Value ' Depuis Excel
Msgbox LeMot(1) ' LeNomDeLaPersonne
Puis pour Remplacer le Signet :
signet(i).Range.Text = LeMot(i)

6 ) Pour ne pas perdre l'origine des signets dans le documents Model (Lorsqu'il sera enregistrer sous)
* Je laisse LeMot qui prendra la place du signet : entre [...] (Avec l'option Afficher les signets)
* Je rajoute le signets (comme à l'origine du fichier)
* en calculant la longueur de la chaine de caractère
* Range:=WordDoc.Range(Place, Place + Len(LeMot(i)))

7 ) Le fichier est enregistrer sous
* Au choix du nom du fichier

8 ) Aux choix pour organiser le travail pour remplir d'Excel vers Word :

9) Quelques condition pour Tester si :
* Si Le dossier Existe Ou Pas (Le créer)
* Word est Déjà Ouvert Ou Pas (L'ouvrir)
* Si le documents Modéle est ouvert Ou Pas (L'ouvrir)

Le code :
VB:
Sub CompleterWordDepuisExcel()
' Choix nom du dossier d'enregistrement '
    DossierNom = Application.InputBox("Word", "Word", "Nom du dossier WORD ?", Type:=2)
    DossierSauvegard = "C:\" & DossierNom & "\"
' Test si le DossierSauvegard est bien existant
'   * Dans le cas ou il n'existe pas le créer.
    Dim fs As Object
        Set fs = CreateObject("Scripting.FileSystemObject")
        If fs.FolderExists(DossierSauvegard) Then
            MsgBox "le repertoire existe donc rien a faire"
        Else
            MsgBox "le repertoire n'existe pas donc on le créer"
            fs.CreateFolder DossierSauvegard
        End If
    Set fs = Nothing
' Test Ouverture Application Word, si pas déjà Ouvert.
On Error Resume Next
    Dim WordApp As Word.Application
        Set WordApp = GetObject(, "Word.Application")
            If Err <> 0 Then
                Err.Clear
                Set WordApp = CreateObject("Word.Application")
            End If
        WordApp.Visible = True 'affiche le document Word
' Documents Word Modéle
    Dim WordDoc As Word.Document
        Set WordDoc = WordApp.Documents("C:\DocumentWordFichier.docx")
On Error GoTo 0
' Si le Documents Word Modéle est fermé l'Ouvrir.
    If WordDoc Is Nothing Then
        MsgBox "Le document est fermé / Ouvrir le document"
        Set WordDoc = WordApp.Documents.Open("C:\DocumentWordFichier.docx")
    End If
' Remplir le Document Modéle.
' Comment insérer du texte dans un signet.
' Remplit le signet SignetOrigine avec le texte "LeMot" sans détruire SignetOrigine
' Exemple ci-dessous (Choisir les bonnes Référence excel pour LeMot
    Dim signet(1 To 3) As Word.Bookmark, LeMot(1 To 3) As String, i As Integer
    Dim Place As Long, SignetOrigine As String
        Set signet(1) = WordDoc.Bookmarks("Nom") '[Nom] : nom du signet
            LeMot(1) = Sheets("Feuil1").Range("A1").Value
        Set signet(2) = WordDoc.Bookmarks("Prénom") '[Prénom] : nom du signet
            LeMot(2) = Sheets("Feuil1").Range("T5").Value
        Set signet(3) = WordDoc.Bookmarks("Adresse") '[Adresse] : nom du signet
            LeMot(3) = Sheets("Feuil1").Range("B6").Value
' Remplir le document Word modele.
        For i = LBound(LeMot) To UBound(LeMot)
        ' Depart du signet
            Place = signet(i).Range.Start
        ' Nom du signet d'Origine
            SignetOrigine = signet(i).Name
        ' Substitue par le Mot (qui remplace le signet)
            signet(i).Range.Text = LeMot(i)
        ' Options \ Options Avancées \ Affichér les signets [...]
        ' Ne pas perdre le Signet d'origine [...] et sa mise en forme entre crochet
            WordDoc.Bookmarks.Add Name:=SignetOrigine, Range:=WordDoc.Range(Place, Place + Len(LeMot(i)))
        Next i
' Enregistrer le document sous (Exemple : LeMot(1) & "-" & LeMot(2))
            Dim fichier As String
            fichier = "DocumentWordFichier " & LeMot(1) & "-" & LeMot(2) & ".docx"
            WordDoc.SaveAs2 DossierSauvegard & fichier
End Sub
 
Dernière édition:

pakito49

XLDnaute Nouveau
Bonjour,

C'est intéressant de pouvoir remplir un document Word Modèle depuis Excel :
J'ai conservé aussi les signets après avoir remplis le document
C'est juste un essaie. A vous de l'adapter choix des bon éléments Excel à remplir vers Word
le principe est là avec le code ci-dessous. et quelques explications

1) Dans votre document Word il faut l'organiser avec des signets
2) lorsque les signets sont créés dans Word pour les repérer
* Options \ Options Avancées \ Affichér les signets [...]
3) Pour comprendre on imagine 3 Signets dans le documents Word
* Dim signet(1 To 3) As Word.Bookmark
4) Chaqu'un des 3 Signets doit être remplacé par une valeur depuis Excel vers Word
* LeMot(1 To 3) As String
5) Exemple si je veux changer le Signet(1) qui correspond à "Nom"
Par : LeNomDeLaPersonne
Alors :
Set signet(1) = WordDoc.Bookmarks("Nom") ' Depuis Word
LeMot(1) = Sheets("Consultation Pré-endodontique").Range("D5").Value ' Depuis Excel
Msgbox LeMot(1) ' LeNomDeLaPersonne
Puis pour Remplacer le Signet :
signet(i).Range.Text = LeMot(i)

6 ) Pour ne pas perdre l'origine des signets dans le documents Model (Lorsqu'il sera enregistrer sous)
* Je laisse le Mot qui prendra la place du signet
* Je rajoute le signets (comme à l'origine du fichier)
* en calculant la longueur de la chaine de caractère
* Range:=WordDoc.Range(Place, Place + Len(LeMot(i)))

7 ) Le fichier est enregistrer sous
* Au choix du nom du fichier

8 ) Aux choix pour organiser le travail pour remplir d'Excel vers Word :

9) Quelques condition pour Tester si :
* Si Le dossier Existe Ou Pas (Le créer)
* Word est Déjà Ouvert Ou Pas (L'ouvrir)
* Si le documents Modéle est ouvert Ou Pas (L'ouvrir)

Le code :
VB:
Sub CompleterWordDepuisExcel()
' Choix nom du dossier d'enregistrement '
    DossierNom = Application.InputBox("Word", "Word", "Nom du dossier WORD ?", Type:=2)
    DossierSauvegard = "C:\" & DossierNom & "\"
' Test si le DossierSauvegard est bien existant
'   * Dans le cas ou il n'existe pas le créer.
    Dim fs As Object
        Set fs = CreateObject("Scripting.FileSystemObject")
        If fs.FolderExists(DossierSauvegard) Then
            MsgBox "le repertoire existe donc rien a faire"
        Else
            MsgBox "le repertoire n'existe pas donc on le créer"
            fs.CreateFolder DossierSauvegard
        End If
    Set fs = Nothing
' Test Ouverture Application Word, si pas déjà Ouvert.
On Error Resume Next
    Dim WordApp As Word.Application
        Set WordApp = GetObject(, "Word.Application")
            If Err <> 0 Then
                Err.Clear
                Set WordApp = CreateObject("Word.Application")
            End If
        WordApp.Visible = True 'affiche le document Word
' Documents Word Modéle
    Dim WordDoc As Word.Document
        Set WordDoc = WordApp.Documents("[B]C:\DocumentWordFichier.docx")[/B]
On Error GoTo 0
' Si le Documents Word Modéle est fermé l'Ouvrir.
    If WordDoc Is Nothing Then
        MsgBox "Le document est fermé / Ouvrir le document"
        Set WordDoc = WordApp.Documents.Open("C:\DocumentWordFichier.docx")
    End If
' Remplir le Document Modéle.
' Comment insérer du texte dans un signet.
' Remplit le signet SignetOrigine avec le texte "LeMot" sans détruire SignetOrigine
' Exemple ci-dessous (Choisir les bonnes Référence excel pour LeMot
    Dim signet(1 To 3) As Word.Bookmark, LeMot(1 To 3) As String, i As Integer
    Dim Place As Long, SignetOrigine As String
        Set signet(1) = WordDoc.Bookmarks("Nom") '[Nom] : nom du signet
            LeMot(1) = Sheets("Feuil1").Range("A1").Value
        Set signet(2) = WordDoc.Bookmarks("Prénom") '[Prénom] : nom du signet
            LeMot(2) = Sheets("Feuil1").Range("T5").Value
        Set signet(3) = WordDoc.Bookmarks("Adresse") '[Adresse] : nom du signet
            LeMot(3) = Sheets("Feuil1").Range("B6").Value
' Remplir le document Word modele.
        For i = LBound(LeMot) To UBound(LeMot)
        ' Depart du signet
            Place = signet(i).Range.Start
        ' Nom du signet d'Origine
            SignetOrigine = signet(i).Name
        ' Substitue par le Mot (qui remplace le signet)
            signet(i).Range.Text = LeMot(i)
        ' Options \ Options Avancées \ Affichér les signets [...]
        ' Ne pas perdre le Signet d'origine [...] et sa mise en forme entre crochet
            WordDoc.Bookmarks.Add Name:=SignetOrigine, Range:=WordDoc.Range(Place, Place + Len(LeMot(i)))
        Next i
' Enregistrer le document sous (Exemple : LeMot(1) & "-" & LeMot(2))
            Dim fichier As String
            fichier = "DocumentWordFichier " & LeMot(1) & "-" & LeMot(2) & ".docx"
            WordDoc.SaveAs2 DossierSauvegard & fichier
End Sub

Merci Laurent pour tout se travail. J'ai malheureusement un blocage au chemin d'accès : Erreur execution 52. Je code avec Excel mais depuis parallel desktop de mac. J'espère juste que ce n'est pas cela mais je ne pense pas car j'arrivais à ouvrir le fichier avant. On va essayer d'autre chemin d'accès.
Pour la partie signet : ce sera la prochaine étape une fois le fichier ouvert!
 

laurent950

XLDnaute Accro
Bonjour,
J'ai malheureusement un blocage au chemin d'accès : Erreur execution 52
Il faut écrire le bon chemin d'accès dans le programme.
Vous pouvez par exemple reprendre le chemin de votre premier Poste #1.
Le chemin du code Poste #22 est un exemple.
Pour la partie signet : ce sera la prochaine étape une fois le fichier ouvert!
Pour la partie Word "Signets", il faut créer dans le document Word (les signets au bon emplacement), et pour la partie Excel connaitre l'emplacement (Feuille/Cellule/Value) des mots qui vont alimenter ces "Signets" dans le document Word.
cdt
 
Dernière édition:

pakito49

XLDnaute Nouveau
Merci Laurent 950.

J'ai eu aussi l'erreur 5491 (à vérifier) : il fallait seulement modifier On Error Go to et mettre On error Resume next.

Un immense Merci. J'ai encore beaucoup de travail sur ce programme !! GENIAL !! TOP !! Tu es le meilleur !!!

Tu respires VBA non ?
 

Discussions similaires

Haut Bas