Rechercher et Remplacer dans Word par Macro Excel [Résolu]

Passager10 6 Messages postés vendredi 15 juin 2007Date d'inscription 15 juin 2007 Dernière intervention - 15 juin 2007 à 15:05 - Dernière réponse : jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention
- 15 oct. 2007 à 08:21
Bonjour a vous,
    Voila je vous expose mon probleme :

Je cherche par une macro sous excel à ouvrir un document modèle Word que j'ai créé qui me permettra de remplacer certains textes par d'autres. Je m'explique :
    1) J'ai un document Word qui est une lettre classique du type : 
            "NOM Prenom"
           Je soussigné, NOM Prenom, bla bla bla ..."
    Ca c'est fait

    2) Donc sous excel je lance une macro (plutot un UserForm) qui me demande d'entrer les NOM et     Prénom qui sont stockés dans 2 cellules
    Ca aussi
 
    3) Et je voudrais remplacer mon texte NOM par ce qu'il y a dans  la premiere cellule et Prenom ce qu'il y a dans la 2eme.

Je vous préviens je n'est pas suivi de cours de VB enfin tres peu et je vous montre ce que j'ai fait pour l'instant.
Soyez indulgents s'il vous plait

Private Sub Facture_Click()

Dim AppWord As Object
Set AppWord = CreateObject("Word.Application")
AppWord.Documents.Add "Ou_vous_voulez_Modele.dot"
AppelWord.ActiveDocument.SaveAs "Ou_vous_voulez_Modele.doc"
AppelWord.Documents.Open "Ou_vous_voulez_Modele.doc"
AppelWord.Visible = True

    With AppWord.Selection.Find
        .Text = "NOM"
        .Replacement.Text = Sheets("Feuille").Range("A1").Value
        .ClearFormatting
        .Forward = True
        .Execute Replace:=wdReplaceAll
End With
        
With AppWord.Selection.Find
        
        .Text = "Prenom"
        .Replacement.Text = Sheets("Feuille").Range("A2").Value
        .ClearFormatting
        .Forward = True
        .Execute Replace:=wdReplaceAll
End With

AppWord.ActiveDocument.Close
AppWord.Application.Quit
Set AppWord = Nothing

End Sub

Alors c'est du barbare je me doute mais sous Word ca fonctionne mais seulement si mon curseur est situé en début de page.
Voila c'est un peu long mais j'essaye d'etre clair (c pas gagné)
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 15 juin 2007 à 16:20
3
Merci
Re, Petite correction apres utilisation (j'avais pas rendu App Visible)

ATTENTION AppWord = APPLICATION

J'ai testé et cela semble fonctionner chez moi.
Pour tout avouer je n'ai pas testé avec Sheets( "Feuille" ).Range("A1").Value Mais Avec "TOTO" par exemple mais cela ne devrait pas faire de difference.
Option Explicit

'Depuis Excel ajoute la référence suivante
'dans l'ide VBA Menu Outils => Références => Microsoft Word 9.0 Object Library
'(9.0) ou équivalent

Private Sub Facture_Click()

Dim AppWord As New Word.Application
   
   'J'avais oublier de le rendre visible
   AppWord.Visible = True
   Call AppWord.Documents.Add("Ou_vous_voulez_Modele.dot")
   Call AppWord.ActiveDocument.SaveAs("Ou_vous_voulez_Modele.doc")
   Call AppWord.Selection.HomeKey(wdStory)
   
   'Appelle la procédure (evite les répétitions
   Call FindAndReplace(AppWord, "Fichier", Sheets("Feuille").Range("A1").Value)
   Call FindAndReplace(AppWord, "PRENOM", Sheets("Feuille").Range("A2").Value)
   
   'Si pas true alors tu ne sauve pas les modif
   Call AppWord.ActiveDocument.Close(True)   'CORRECTION AppWord.APPLICATION INUTILE AppWORD APPLICATION
   Call AppWord.Quit
   Set AppWord = Nothing

End Sub<hr />

Private Sub FindAndReplace(ByRef WApp As Word.Application, ByVal What As String, ByVal ForWhat As String)
   With WApp.Selection.Find
       .Text = What
       .Replacement.Text = ForWhat
       .ClearFormatting
       .Forward = True
       .Execute Replace:=wdReplaceAll
   End With
End Sub<hr />
, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée

Merci jrivet 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de jrivet
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 15 juin 2007 à 15:09
0
Merci
Salut,

Il faut regarder du côté des : signet sous word...Fait une petite recherche dans le forum, je pense que tu vas trouver..
A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Commenter la réponse de cs_Exploreur
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 15 juin 2007 à 15:11
0
Merci
Salut,

Regarde défois ici

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Commenter la réponse de cs_Exploreur
Passager10 6 Messages postés vendredi 15 juin 2007Date d'inscription 15 juin 2007 Dernière intervention - 15 juin 2007 à 15:24
0
Merci
En tout cas d'ores et déja merci
Commenter la réponse de Passager10
Passager10 6 Messages postés vendredi 15 juin 2007Date d'inscription 15 juin 2007 Dernière intervention - 15 juin 2007 à 16:01
0
Merci
J'ai essayé aussi:

    1) J'ai créer un signet dans mon modele que j'ai appelé Monsieur et ecris ce code:

    Set MyDoc = AppelWord.ActiveDocument
    If MyDoc.Bookmarks.Exists(Monsieur) = True Then
    MyDoc.Bookmarks(Monsieur).Select
    Selection.TypeText = Sheets("Devis").Range("C4").Text
    End If

Donc je n'ai toujours pas d'erreur mais aucun changement ne s'opere
Merci a vous de m'aider.
La seule chose qui me bloque c'est l'écriture de ce texte stocké a l'endroit escompté.
Commenter la réponse de Passager10
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 15 juin 2007 à 16:03
0
Merci
Salut,

C'es pas plutôt(pas sûr de moi) :

Selection.TypeText = Sheets("Devis").Range("C4").VALUE

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Commenter la réponse de cs_Exploreur
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 15 juin 2007 à 16:06
0
Merci
Salut,
Si cela marche que si ton curesuer est en début de doc, place le en début de doc.
Avec

AppelWord.Selection.HomeKey(6) 6:=wdStory mais comme tu ne référence pas Word

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Passager10 6 Messages postés vendredi 15 juin 2007Date d'inscription 15 juin 2007 Dernière intervention - 15 juin 2007 à 16:08
0
Merci
C'est aussi ce que je pense mais que ce soit value ou text pas d'erreur et pas de changement HELP please
Commenter la réponse de Passager10
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 15 juin 2007 à 16:13
0
Merci
Salut,
Tiens essaie ceci (pas essayer chez moi je vais le faire tout de suite)
Option Explicit

'Depuis Excel ajoute la référence suivante
'dans l'ide VBA Menu Outils => Références => Microsoft Word 9.0 Object Library
'(9.0) ou équivalent

Private Sub Facture_Click()

Dim AppWord As New Word.Application
   Call AppWord.Documents.Add("Ou_vous_voulez_Modele.dot")
   Call AppWord.ActiveDocument.SaveAs("Ou_vous_voulez_Modele.doc")
   Call AppWord.Selection.HomeKey(wdStory)
   'Appelle la procédure (evite les répétitions
   Call FindAndReplace(AppWord, "NOM", Sheets("Feuille").Range("A1").Value)
   Call FindAndReplace(AppWord, "PRENOM", Sheets("Feuille").Range("A2").Value)
   
   'Si pas true alors tu ne sauve pas les modif
   Call AppWord.ActiveDocument.Close(True)
   Call AppWord.Application.Quit
   Set AppWord = Nothing

End Sub<hr />

Private Sub FindAndReplace(ByRef WApp As Word.Application, ByVal What As String, ByVal ForWhat As String)
   With WApp.Selection.Find
       .Text = What
       .Replacement.Text = ForWhat
       .ClearFormatting
       .Forward = True
       .Execute Replace:=wdReplaceAll
   End With
End Sub<hr />
, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Passager10 6 Messages postés vendredi 15 juin 2007Date d'inscription 15 juin 2007 Dernière intervention - 15 juin 2007 à 16:24
0
Merci
Erreur de compilation
Type defini par l'utilisateur non defini

Private Sub FindAndReplace(ByRef WApp As Word.Application, ByVal What As String, ByVal ForWhat As String)
Commenter la réponse de Passager10
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 15 juin 2007 à 16:29
0
Merci
Re,
Est ce que tu as fait ce que je te marquait,
Depuis Excel ajoute la référence suivante'dans l'ide VBA Menu Outils <gras>> Références> Microsoft Word 9.0 Object Library</gras>
'(9.0) ou équivalent

@+: =89254 Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Passager10 6 Messages postés vendredi 15 juin 2007Date d'inscription 15 juin 2007 Dernière intervention - 15 juin 2007 à 16:31
0
Merci
Pardon ca m'a l'air de fonctionner; je n'avais pas ajouté la référence.
Merci avec ca je vais pouvoir m'en sortir, c'est tres gentil et comme quoi il y a les champions et les autres
Commenter la réponse de Passager10
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 15 juin 2007 à 16:35
0
Merci
Salut,
Heureux d'avoir pu aider.
Une seule chose: Réponse acceptée c'est pour les posts qui t'on aider à avancer. de cette maniere visuellement, ceux qui recherche la même savent ce qui est la "solution"

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 15 juin 2007 à 20:36
0
Merci
Salut,

"c'est tres gentil et comme quoi il y a les champions et les autres" >> L'autre : Je ne suis pas un "champion" et ne dit pas que j'en suis un, mais j'essaye de comprendre et t'aider, même si défois cela ne sonne toujours pas juste...Mais c'est forgeant que l'on devient forgeron...

Bonne prog...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Commenter la réponse de cs_Exploreur
cs_gwengwen 3 Messages postés lundi 6 mars 2006Date d'inscription 12 octobre 2007 Dernière intervention - 11 oct. 2007 à 20:51
0
Merci
Hello tous
alors j'ai repris le code ci dessus (en faiit je veux faire qqch du style envoyer des donnees d'un tableau excel vers un document word, donc je me suis inspiree des lignes que j'ai vu ci dessus dans les reponses de pro :-)
J'ai bien , sous vba, coche Microsiofword object library
et qd je lance j'obtiens
"user-defined type not defined"
et ca vient de la ligne Dim AppWord As New Word.Application

c'est quoi comment que ca ce fait messieurs(dames) les stars de VBA ?
Pour info, j'ai fait ce code là sur mon pc du boulot, donc là bas ca a été enregistré avec M.office 11.0 object library. et ca marche bien

Chez moi c'est 10.0 donc c'est des versions posterieures à 9.0 que vous dites ..... et evidemment ca ne marche pas chez moi et c'est une appli pôur moi que j'ai fait , donc je prefererais que ca marche sur mon pc chez moi ....

j'attends vos avis/aides
merci d'avancne
gwenaelle
Commenter la réponse de cs_gwengwen
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 12 oct. 2007 à 07:56
0
Merci
Salut,
Si tu ne veux pas que ton prog soit version dépendant de Excel, Enlève  Microsoft Word Object Library des références du projet et passe par

Dim AppWord As Object
Set AppWord = CreateObject("Word.Application")

CEci devrait faire que tu peux utiliser sous Word 11 ou 10 ou 9 , etc

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
cs_gwengwen 3 Messages postés lundi 6 mars 2006Date d'inscription 12 octobre 2007 Dernière intervention - 12 oct. 2007 à 22:46
0
Merci
reponse acceptée :-)
cool, ca marche
en fait j'ai du faire la meme chose pour
 'Dim WordDoc As Word.Document qui avait une not defined
donc j'ai mis

Dim WordDoc As Object
Set WordDoc = CreateObject("Word.Document")

et hop :-)

cool, merci bien Julien et les autres pour le code dont je me suis inspiree

bonne soiree à tous
gwenaelle
Commenter la réponse de cs_gwengwen
cs_gwengwen 3 Messages postés lundi 6 mars 2006Date d'inscription 12 octobre 2007 Dernière intervention - 12 oct. 2007 à 22:58
0
Merci
alors en fait j'ai une autre question ....
je veux que ma macro s'applique aux cellules que je selectionne dans excell
j'ai donc utilisé
For Each area In Selection.Areas
....
Next area
Le pb avec ca c'est que je peux selectionner plusieurs plages, ok, j'arrive à afficher le nb de lignes et collonnes de chacunes d'elles.
Pour traiter chaque plage j'ai besoin de la premiere ligne de cette plage, donc je fais
topleft = ActiveCell.Row
mais le pb est là: active Cell.Row va me renvoyer la cellule active de la derniere plage que j'ai selectonnée.....
Donc je voudrais
- soit ne pas faire de boucle FOR EACH ....NEXT area pour pouvoir traiter le cas de la selection de plusieurs plages (en fait j'en ai pas vraiment besoin !)
- soit avoir un moyen de me positionner sur la premiere cellule de chq plage ...

je ne sais pas si je suis claire ....
merci d'avance pr vos reponses
gwenaelle (je decouvre ce language, mais je me prends au jeu :-)

 
Commenter la réponse de cs_gwengwen
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 15 oct. 2007 à 08:21
0
Merci
Salut,
[auteur/GWENGWEN/711966.aspx gwengwen]Si tu as un problème tu ferais mieux de reposter une nouvelle question dans le Forum après tout il est la pour ca.
Tu touchera plus de monde puisque CE sujet est dit "résolu"

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.