OVH Cloud OVH Cloud

Créer un doc Word depuis Excel

3 réponses
Avatar
Michel RAMEAUX
Bonjour à toutes et tous,

Je suis en cours de finition de tableaux d'analyses dont je dois faire
parvenir des résultats (selon le destinataire), et à plusieurs destinataires
(en fonction des résultats). Donc beaucoup de croisements d'informations ...

Dans des courriers, réalisés sous Word, je souhaite qu'Excel prenne la main
dans Word pour y exécuter les adjonctions et modifications.

Dans un premier temps pour vérifier la faisabilité, je m'occupe que de la
partie "Destinataire". J'ai réalisé un document modèle dans lequel je
souhaite remplacer le nom et l'adresse du destinataire (Nom1 Nom2 et Adr1
Adr2) par les vraies coordonnées stockées dans Excel.

Je me suis inspiré des infos prises sur ce groupe pour élaborer le début du
programme, mais... cela ne fonctionne pas. Dans la sélection faite, aucune
modification ne se fait.

Pour anticiper la suite des évènements, je n'ai pas trouvé d'info pour
ajouter une ligne à l'intérieur du courrier type, à un endroit précis. Soit
le texte suivant (paragraphes (phrases) de plusieurs lignes) :
JJJJJJJ
LLLLL
MMMM
Comment insérer une ligne (ou une phrase ou un paragraphe) contenant KKKK à
la suite de J (dans le même paragraphe) ou entre J et L? Le contenu KKKK est
entièrement maîtrisé sous Excel. Est-il possible de formater en gras les
valeurs numériques qu'il contient? Les valeurs numériques sont maîtrisées
sous Excel. Comment supprimer (éventuellement) le paragraphe MMMM? Quelle
est la technique générale pour ce genre de manip?

Voici ce que j'ai écrit...

Sub RemplirWordDepuisExcel()

Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim Docu As String
Set AppWord = New Word.Application

' Données du message à envoyer :
Dim Adr1 As String
Dim Adr2 As String
Dim Civ1 As String
Dim CSI As String
Dim Nom1 As String
Dim Nom2 As String

' Récupération les données dans Excel
CSI = Range("A24").Value
Nom1 = Range("B24").Value
Nom2 = Range("C24").Value
Adr1 = Range("D24").Value
Adr2 = Range("E24").Value & " " & Range("F24").Value
Civ1 = Range("G24").Value
'...
' Ouvrir le document Word
AppWord.ShowMe
AppWord.Visible = True
Docu = "c:\AAA\BBB\CCC.doc"
Set DocWord = AppWord.Documents.Open(Docu, ReadOnly:=False)
With ActiveDocument.Content.Find
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
.Text = "CSI" 'Doir remplacer "CSI" par le nouveau texte contenu
dans la variable CSI
.Replacement.Text = CSI
End With
ActiveDocument.Content.Find.Execute Replace:=wdReplaceAll
'...
DocWord.Application.ActiveDocument.Save
AppWord.Application.Quit
End Sub

J'èpère que je ne suis pas trop exigeant... et par avance,

Merci beaucoup du coup de pouce.

3 réponses

Avatar
Anacoluthe
Bonjour !

'Michel RAMEAUX' nous a écrit ...
Je suis en cours de finition de tableaux d'analyses dont je dois faire
parvenir des résultats (selon le destinataire), et à plusieurs destinataires
(en fonction des résultats). Donc beaucoup de croisements d'informations ...


Effectivement, ça se croise beaucoup

Je me suis inspiré des infos prises sur ce groupe pour élaborer le début du
programme, mais... cela ne fonctionne pas.


On ne voit pas bien ce qui ne fonctionne pas.

Pour anticiper la suite des évènements, je n'ai pas trouvé d'info pour
ajouter une ligne à l'intérieur du courrier type, à un endroit précis.


Il faut d'abord savoir comment se précise votre endroit précis !
Ensuite il est facile d'y insérer par exemple à la suite (InsertAfter)
votre ligne de texte.

Anacoluthe
« Je ne cherche pas à connaître les réponses,
je cherche à comprendre les questions. »
- CONFUCIUS

Avatar
Bounou
Bonjour,
Je me suis justement inspiré d'une solution que VOUS avez proposé à une
prédédente question (ajout d'une ligne dans un tableau). Mais je n'ai pas
bien compris la méthode pour ajouter ou modifier du texte "à volonté".
Dans le module proposé j'ai écrit (en vba) que :
en arrivant dans Word, je sélectionne tout le texte, j'y recherche la
séquence de caractères CSI pour les remplacer par le contenu de la variable
du même nom (initialisée au début). Le code est très proche de celui fourni
par l'enregistreur de macro. Nota : ce code qui fonctionne sous Word, ne
fonctionne pas si on l'intègre "brut" dans le module Vba sous excel.
Or, même adapté comme je pense qu'il devrait être (ce qui est proposé pour
analyse), cela ne fonctionne pas plus... l'ancien texte reste toujours
présent... il y a là une épaisse couche de brouillard.
Pour les autres questions, je souhaite que, par exemple, dans CE message
Excel puisse ajouter, ci-dessus, un nouveau texte entre "... volonté." et
"Dans ...", que ce soit la suite du premier paragraphe (sans en changer)
et/ou en insérerant un nouveau paragraphe.

Merci de nouveau...

"Anacoluthe" a écrit dans le message news:

Bonjour !

'Michel RAMEAUX' nous a écrit ...
Je suis en cours de finition de tableaux d'analyses dont je dois faire
parvenir des résultats (selon le destinataire), et à plusieurs
destinataires


(en fonction des résultats). Donc beaucoup de croisements d'informations
...



Effectivement, ça se croise beaucoup

Je me suis inspiré des infos prises sur ce groupe pour élaborer le début
du


programme, mais... cela ne fonctionne pas.


On ne voit pas bien ce qui ne fonctionne pas.

Pour anticiper la suite des évènements, je n'ai pas trouvé d'info pour
ajouter une ligne à l'intérieur du courrier type, à un endroit précis.


Il faut d'abord savoir comment se précise votre endroit précis !
Ensuite il est facile d'y insérer par exemple à la suite (InsertAfter)
votre ligne de texte.

Anacoluthe
« Je ne cherche pas à connaître les réponses,
je cherche à comprendre les questions. »
- CONFUCIUS



Avatar
Anacoluthe
Bonjour !

'Bounou' nous a écrit ...
Je me suis justement inspiré d'une solution que VOUS avez proposé à une
prédédente question (ajout d'une ligne dans un tableau). Mais je n'ai pas
bien compris la méthode pour ajouter ou modifier du texte "à volonté".
Dans le module proposé j'ai écrit (en vba) que :
en arrivant dans Word, je sélectionne tout le texte, j'y recherche la
séquence de caractères CSI pour les remplacer par le contenu de la variable
du même nom (initialisée au début). Le code est très proche de celui fourni
par l'enregistreur de macro. Nota : ce code qui fonctionne sous Word, ne
fonctionne pas si on l'intègre "brut" dans le module Vba sous excel.
Or, même adapté comme je pense qu'il devrait être (ce qui est proposé pour
analyse), cela ne fonctionne pas plus... l'ancien texte reste toujours
présent... il y a là une épaisse couche de brouillard.
Pour les autres questions, je souhaite que, par exemple, dans CE message
Excel puisse ajouter, ci-dessus, un nouveau texte entre "... volonté." et
"Dans ...", que ce soit la suite du premier paragraphe (sans en changer)
et/ou en insérerant un nouveau paragraphe.


Il est bien difficile de vous répondre quand vous posez 50 questions
en même temps ! Évitez de transposer des solutions toutes faites en vba,
sériez chaque problème, commencez par vous familiariser avec les
instructions les plus simples. Les solutions les plus complexes
ne sont le plus souvent que des suites d’instructions très simples.

Votre dernière question par exemple:
Pour se repérer entre 'volonté' et 'Dans' vous devez savoir si le
programme doit chercher un mot, les deux mots, un signet ou tout
simplement la fin du premier paragraphe, savoir si le texte à insérer
est brut ou formaté, s'il est fixe ou à chercher dans un objet.
Rédigez et testez toujours votre code Word dans Word. Tout code qui
fonctionne dans Word peut être exécuté par et dans Excel mais
évidemment pas s'il est recopié 'tel quel' : il importe de bien
comprendre que tout ce qui est implicite pour Word doit être explicite
dans Excel et réciproquement. Bon courage.

Anacoluthe
« Le principal est de débuter. »
- Georges Charles HUYSMANS