[RESOLU] : Export de données Excel dans Word

Jean Michel

XLDnaute Nouveau
Bonjour à tous et merci par avance.

Voila mon probleme :
J'ai un fichier Excel qui contient en colonne A le nom des clients et en colonne B leur prenom.
Lors de la creation d'un nouveau client, ce fichier Excel voit donc une ligne de plus apparaitre a chaque fois.
Je demande nom et prenom puis une macro remplit la nouvelle ligne.
Ceci fonctionne sans souci.

En parallelle, un dossier client est créé à son nom ou sera stockée une feuille Word nommée "Fiche"
Dans cette feuille Word, juste 2 choses : Son nom et son prénom que j'ai récupérée ci-dessus.
La feuille word vierge contient juste 2 lignes : Nom et Prenom
Il y a bien moyen par une macro de remplacer le mot 'nom' par celui du client et de faire pareil pour le prenom mais ceci suppose que ce soit moi qui tape le nom du client.

Ce que je souhaite, c'est que la macro Excel remplisse le fichier Excel, ouvre la fiche Word (et jusque la, c'est OK) et remplace a chaque fois dans Word les mots Nom et Prenom par ceux que je viens de renseigner.
Ensuite, il ne me reste plus qu'a sauvegarder dans le repertoire créé par Excel au nom du client cette fiche word et c'est gagné.

Voici le source actuel ci-dessous, quelqu'un peut m'aider ?
Merci par avance

Sub Newdossier()

' Trouve la ligne pour positionner le nouveau dossier
debut = 1
While Cells(debut, 1) <> ""
debut = debut + 1
Wend
Cells(debut, 1).Select
' OK, le nom et prenom du client seront ecrits sur la ligne 'Debut' apres ceux deja existants

' Demande du nom du Dossier client et création d'un répertoire à ce nom Nom
NomClient = InputBox("Nom du client=")
prenom = InputBox("Prenom=")
MkDir ("C:\Users\Utilisateur\Desktop\Myne" & NomClient)
Cells(debut, 1) = NomClient
Cells(debut, 2) = prenom
' ********* Jusqu'ici, tout est OK, le fichier Excel enregistre la nouvelle ligne et crée un repertoire au nom du client

'Ouverture de la fiche Word

Set wordapp = CreateObject("word.Application")
wordapp.Documents.Open "C:\Users\Utilisateur\Desktop\Myne\Fiche.docx"
wordapp.Visible = True

'La fiche word s'ouvre mais comment recuperer le nom et prenom du client ?
' J' ai bien trouvé une macro qui remplacerait a chaque fois le mot nom par celui du client
' mais comment passer en parametre le nom du client récupéré dans Excel ?

End Sub
 

sousou

XLDnaute Barbatruc
Bonjour et bienvenu sur le forum
Voici une méthode pour trouver un mot dans un document word ouvert par excel.
Je traite un exemple en remplacant nom par " toto"à toi de voir dans ton contexte
Sub test()
chemin = ThisWorkbook.Path
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open (chemin & "\test.docx")
wordapp.Visible = True
Set doc = wordapp.documents(1)
For Each mot In doc.Words

If mot = "nom" Then

mot.Delete
mot.InsertAfter (" toto")
End If
Next

End Sub
 

Jean Michel

XLDnaute Nouveau
Désolé, j'ai encore un petit souci mais qui devrait être simple pour vous.

Tout fonctionne bien, je crée donc un document Word à partir de données Excel, mais a la fin, quand je veux sauvegarder mon documents word, j'ai une erreur 13 incompatibilité de type

MkDir ("C:\Users\Utilisateur\Desktop\Myne\" & NomClient)

chemin = ThisWorkbook.Path
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open (chemin & "\Fiche.docx")
wordapp.Visible = True
Set doc = wordapp.documents(1)

For Each mot In doc.Words
If mot = "Nomclient" Then
mot.Delete
mot.InsertAfter ("" & NomClient)
End If
Next

ChDir ("C:\Users\Utilisateur\Desktop\Myne\" & NomClient)

wordapp.documents.Save ("Fiche.docx") ' ICI, message d'erreur 13, incompatibilité de type ?
wordapp.documents.Close

Comment puis-je faire pour que ce fichier word soit sauvegardé par la macro ?

Merci
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@jean-michel
Dans ta macro initiale, on peut lire:
Set wordapp = CreateObject("word.Application")
wordapp.Documents.Open "C:\Users\Utilisateur\Desktop\Myne\Fiche.docx"

Dans la macro de ton dernier message, on peut lire
chemin = ThisWorkbook.Path
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open (chemin & "\Fiche.docx")

Si j'étais moi, je me rendrais compte que ce n'est pas la même chose et subséquemment je ferais le choix du chemin idoine.
Le seul et beau chemin verdoyant qui embaume la noisette et qui mène à coup sur à Fiche.docx ;)

PS: Sinon, à mon humble avis, pour faire ce type de tâches, l'outil le plus adapté, c'est le publipostage (word+excel)
Pas besoin de macros et par voie de conséquence par de risque de plantage ou d'erreur 13 ;)
 

Jean Michel

XLDnaute Nouveau
Bonjour le fil, le forum

@jean-michel
Dans ta macro initiale, on peut lire:
Set wordapp = CreateObject("word.Application")
wordapp.Documents.Open "C:\Users\Utilisateur\Desktop\Myne\Fiche.docx"

Dans la macro de ton dernier message, on peut lire
chemin = ThisWorkbook.Path
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open (chemin & "\Fiche.docx")

Si j'étais moi, je me rendrais compte que ce n'est pas la même chose et subséquemment je ferais le choix du chemin idoine.
Le seul et beau chemin verdoyant qui embaume la noisette et qui mène à coup sur à Fiche.docx ;)

PS: Sinon, à mon humble avis, pour faire ce type de tâches, l'outil le plus adapté, c'est le publipostage (word+excel)
Pas besoin de macros et par voie de conséquence par de risque de plantage ou d'erreur 13 ;)
 

Jean Michel

XLDnaute Nouveau
Bonjour Staple1600,

Le chemin different est normal.
Au depart, je remplis une fiche vierge et une fois remplis, elle doit être sauvée dans un dossier créé au nom du client.

chemin = ThisWorkbook.Path
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open (chemin & "\Fiche.docx")
C'est pour telecharher la fiche vierge

et ensuite

ChDir ("C:\Users\Utilisateur\Desktop\Myne\" & NomClient)
wordapp.documents.Save ("Fiche.docx") ' Qui pose donc probleme
wordapp.documents.Close
C'est pour sauvegarder la fiche dans le repertoire au nom du client

Il y a donc un repertoire de base ou est stockée la fiche vierge et ensuie autant de repertoire que de clients ou est stockée la meme fiche remplie.

Le repertoire au nom du client a été créé dans la meme macro, il existe donc bien mais je ne vois pas comment y sauvegarder la fiche une fois remplie.

Merci de ton aide
 

Staple1600

XLDnaute Barbatruc
Re

@Jean Michel
1) Ne serait point plus simple d'utiliser un document Word modèle ?
(donc *.dotx)

2) Ne serait-ce point le moment adéquat pour joindre deux fichiers exemple (Fiche.docx et un fichier Excel) regroupé dans *.zip ?
(ces deux fichiers ayant été bien sur anonymisés par tes soins au préalable)
Et sans oublier de mettre le code VBA que tu uilises dans le fichier Excel.

3) NB: Et quid de ma suggestion d’utiliser le publipostage (avec comme choix Catalogue) ?
 
Dernière édition:

Jean Michel

XLDnaute Nouveau
@Staplle1600

J'ai renommé la fiche vierge du depart "Fichedebut" pour eviter la confusion avec les fiches finales qui s'appellent "Fiche' a chaque fois
(qui se telecharge donc par un chemin 'fixe' indiqué dans la macro)

Tout fonctionne bien sauf cette sauvegarde finale, je n'ai pas l'habitude de manipuler des fichiers par macro, il doit donc y avoir un truc 'tout bête'.

Les deux fichiers sont en piece jointe (ils sont d'une taille ridicule, ce sont des fichiers " de travail" dont je me servirai au boulot une fois que ce sera ok.
(il ne me restera plus qu'a modifier les chemins)

Merci d'avance

NB : Fiche.docx a été remplacé par fiche.doc partout, je croyais que ça allait éviter le passage en zip mais .doc est aussi interdit
 

Staple1600

XLDnaute Barbatruc
Re

J'avais déjà pondu cela avant que tu postes tes fichiers
Alors je poste
Tu verras que la sauvegarde se fait bien sur le bureau
Je te laisse adapter pour la suite.
VB:
Sub test_2()
Dim Fiche$, svGPath$, wordapp As Object, doc As Object
Fiche = ThisWorkbook.Path & "\test.docx"
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open Fiche
wordapp.Visible = True
Set doc = wordapp.documents(1)
    'For Each mot In doc.Words
    'If mot = "nom" Then
    'mot.Delete
    'mot.InsertAfter (" toto")
    'End If
    'Next
svGPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
doc.SaveAs2 svGPath & "ClientTOTO.docx", 12
doc.Close False: wordapp.Quit: Set wordapp = Nothing
End Sub
 

Discussions similaires

Réponses
11
Affichages
364

Statistiques des forums

Discussions
315 093
Messages
2 116 122
Membres
112 666
dernier inscrit
Coco0505