Problème de creation de courrier avec balise word

BONJOUR les amis.

pour ceux qui désire faire des courrier avec des balise ( signet) préalablement mis dans un document word), voila la réponse

il y a deux méthode :

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(ThisWorkbook.Path & "\" & "dc.docx") 'ouvre document Word

WordApp.Visible = True

RemplirSignet "NOM", Sheets("Feuil2").Range("F3").Text, WordDoc

RemplirSignet "ADRESSE", Sheets("Feuil2").Range("G3").Text, WordDoc

RemplirSignet "CP", Sheets("Feuil2").Range("H3").Text, WordDoc

RemplirSignet "NOM2", Sheets("Feuil2").Range("F3").Text, WordDoc

'RemplirSignet "TYPEFORMALITE1", Sheets("Feuil2").Range("P3").Text, WordDoc

RemplirSignet "typeformalite", Sheets("Feuil2").Range("Q3").Text, WordDoc

'RemplirSignet "DATE1", Sheets("Feuil2").Range("K3").Text, WordDoc

RemplirSignet "DATE2", Sheets("Feuil2").Range("O3").Text, WordDoc

RemplirSignet "LEAD", Sheets("Feuil2").Range("D3").Text, WordDoc

RemplirSignet "NCFENET", Sheets("Feuil2").Range("E3").Text, WordDoc

'RemplirSignet "NCFENET2", Sheets("Feuil2").Range("E3").Text, WordDoc

End Sub

la seconde:

Sub Remplacer(signet As Bookmark, LeMot As String)

Dim deb As Integer, fin As Integer, Nom As String

deb = signet.Start 'début du signet

fin = signet.End 'fin du signet

Nom = signet.Name 'nom du signet

signet.Range.Text = LeMot 'remplace le texte contenu

With ActiveDocument.Range(Start:=deb, End:=fin) 'emplacement du signet

.Bookmarks.Add Name:=Nom 'ajoute le signet

End With

End Sub

Sub test()

Dim WordApp As Word.Application

Dim WordDoc As Word.Document

Dim signet As Bookmark, LeMot As String

Set WordApp = CreateObject("word.application")

Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\" & "TESTE.docx") 'ouvre document Word

WordApp.Visible = True

Set signet = ActiveDocument.Bookmarks("NOM")

LeMot = Sheets("Feuil2").Range("F3") 'Chaîne de caractère destiné à remplacer le contenu du signet

Remplacer signet, LeMot

End Sub

un grand merci a MACHIN pour son aide.

Ps: attention il n'y a pas la macro qui prévient si le document word est lancé et qui va faire galérer votre pc.

28tkge-version-1.xlsm (45.65 Ko)
22teste.docx (15.50 Ko)

up

newup

Bonjour, je suis débutant mais le sujet m’intéresse car c'est un domaine que je ne connais pas du tout, je vais lire et tenter de comprendre quelque chose avec vous...

Après avoir visité quelques sites j'ai trouvé quelques informations. En important du texte dans un signet word (apparement) vous écrasez le signet en lui même donc il existe des macros toutes faites pour mémoriser et recréer le signet tout en inserant le texte d'excel. Après adaptation cela donne ceci :

Sub Remplacer(signet As Bookmark, LeMot As String)
Dim deb As Integer, fin As Integer, Nom As String
    deb = signet.Start 'début du signet
    fin = signet.End   'fin du signet
    Nom = signet.Name  'nom du signet
    signet.Range.Text = LeMot 'remplace le texte contenu
    With ActiveDocument.Range(Start:=deb, End:=fin) 'emplacement du signet
        .Bookmarks.Add Name:=Nom 'ajoute le signet
    End With
End Sub

Sub test()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
 Dim signet As Bookmark, LeMot As String

Set WordApp = CreateObject("word.application")
Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\" & "TESTE.docx") 'ouvre document Word
WordApp.Visible = True

Set signet = ActiveDocument.Bookmarks("NOM") 
LeMot = Sheets("Feuil2").Range("F3") 'Chaîne de caractère destiné à remplacer le contenu du signet
Remplacer signet, LeMot

End Sub

Et tout ce qu'il y a en surligné est l'instruction pour écrire un nouveau mot dans un signet

En attendant que des experts passent par ici cela peu peut-être vous dépanner

merci de ta réponse je vais essayer ta macro.

par contre c'est justement pour ca que j'utilisai cette méthode car les signet ne disparaissent pas avec la macro du dessus, car il ne remplace pas le signet, il modifie juste ce qu'il y a écrit dans le signets.

Le probleme vient quand j'ai plusieurs signet (5 ou 6) et la, ca me dit qu'il y a une erreur.

Non, ce n'est à coup sur pas un problème quantitatif.... Je vous laisser regarder votre code et l'imp ecran de votre doc word...Vous allez très vite repérer la cause.

RemplirSignet "TYPEFORMALITE1", Sheets("Feuil2").Range("P3").Text, WordDoc
sans titre

je vais voir ci c'est ça qui causait le problème demain j'ai pas eu le temps de testé ce soir

D'accord

bon en corrigeant l'oubli d'un signet ca marche toujours pas.

La macro que tu m'a fourni marche, mais quand j'ai voulu ajouter DATE1 ca fonctionne plus ou alors il faut repéter la formule complete?

j'ai juste ajouter cette ligne pour l'instant

Set signet = ActiveDocument.Bookmarks("DATE1")

LeMot = Sheets("Feuil2").Range("K3") 'Chaîne de caractère destiné à remplacer le contenu du signet

Remplacer signet, LeMot

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(ThisWorkbook.Path & "\" & "dc.docx") 'ouvre document Word
WordApp.Visible = True
RemplirSignet "NOM", Sheets("Feuil2").Range("F3").Text, WordDoc
RemplirSignet "ADRESSE", Sheets("Feuil2").Range("G3").Text, WordDoc
RemplirSignet "CP", Sheets("Feuil2").Range("H3").Text, WordDoc
RemplirSignet "NOM2", Sheets("Feuil2").Range("F3").Text, WordDoc
'RemplirSignet "TYPEFORMALITE1", Sheets("Feuil2").Range("P3").Text, WordDoc
RemplirSignet "typeformalite", Sheets("Feuil2").Range("Q3").Text, WordDoc
'RemplirSignet "DATE1", Sheets("Feuil2").Range("K3").Text, WordDoc
RemplirSignet "DATE2", Sheets("Feuil2").Range("O3").Text, WordDoc
RemplirSignet "LEAD", Sheets("Feuil2").Range("D3").Text, WordDoc
RemplirSignet "NCFENET", Sheets("Feuil2").Range("E3").Text, WordDoc
'RemplirSignet "NCFENET2", Sheets("Feuil2").Range("E3").Text, WordDoc

End Sub

Votre macro est entièrement fonctionnelle sauf pour les lignes écrit en vert car les signets n'existent pas dans word.

Preuve à l'appui.

Cordialement.

désolé j'ai encore oublier de faire les mise a jour pour le signet ca marche merci.

par contre est ce que tu sais comment empécher de lancer l'ouverture du word s'il est deja ouvert sur la marchine, parceque quand il est deja ouvert la macro bug. un truc du genre

If word ("test") est ouvert then

msgbox= " Vous devez fermer word pour lancer le courrier."

else ( la macro se lance)

je sais pas comment écrire ce qui est en jaune

Non je ne sais pas mais je cherche et vous tiens au courant dès que j'ai trouvé une solution

tu peux me l'envoyer par message pour que je valide le sujet, je vais modifier le premier message pour mettre la réponse ca evite au gens de chercher partout ^^

et merci pour ton aide et ta patience ^^

Ca veut dire quoi envoyer par "message" ?

message privée je vois au dessus qu'il y a message privé. je pense avec le pseudo .

je valide au pire tant pis et merci pour ton aide tu a été d'un grand secours ^^

message privé...impossible, ma messagerie n'est pas paramétrée pour. Mais dans le dernier lien il y a une macro toute faite pour la vérification du doc word et je crois que ce n'est que ce qui vous manque non ?

Rechercher des sujets similaires à "probleme creation courrier balise word"