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
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)...
J’ai déjà répondu : si il y a 2 dents l’analyse n’est pas la même pour la dent 1 et pour la dent 2 etc.
Donc il y a 2 informations différentes. Les signets ne sont pas les mêmes selon le tableau excel. Merci pour ton aide
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.
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.
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
Bonjour , Voila je me casse la tete a trouver un moyen depuis word de copier un signet du document word , de le coller dans une celulle precisse (h1) d'un document excel puis de copier la case (i8) pour le collet dans un signet word. je ne sais pas si c'est claire. j'ai fait cela Sub test() On...
Merci pour ton aide.
Je viens de voir qu'il est possible d'utiliser "selectcontentcontrolsbytitle"ou "bytag". Je vais explorer cette piste et ton code aussi. Merci encore
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]
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
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!
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 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