Passager10
Messages postés6Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention15 juin 2007
-
15 juin 2007 à 15:05
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
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é)
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 15 juin 2007 à 16:20
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]
Passager10
Messages postés6Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention15 juin 2007 15 juin 2007 à 16:01
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é.
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 15 juin 2007 à 16:13
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]
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 15 juin 2007 à 16:29
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
Passager10
Messages postés6Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention15 juin 2007 15 juin 2007 à 16:31
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
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 15 juin 2007 à 16:35
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"
cs_Exploreur
Messages postés4822Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 15 juin 2007 à 20:36
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...
cs_gwengwen
Messages postés3Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention12 octobre 2007 11 oct. 2007 à 20:51
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
cs_gwengwen
Messages postés3Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention12 octobre 2007 12 oct. 2007 à 22:58
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 :-)
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 15 oct. 2007 à 08:21
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"